SlideShare une entreprise Scribd logo
1  sur  63
Télécharger pour lire hors ligne
REAL WORLD ELIXIR
DEPLOYMENT
Empire City Elixir | 2016-05-21
pete gamache | pete@gamache.org | @gamache
Hi!
Summary
• Elixir and Erlang make a rock-solid platform
• Erlang excels at long-lived clusters
• "Modern" deployment practices do not take
advantage of Erlang core features
• Deploying Elixir can be painful, but if you are
taking advantage of platform, can be worth it
Let's talk about an
ideal platform
Platform Desirables
• Horizontal scalability
• Fault tolerance
• Zero-downtime upgrades and rollbacks
• Stability and performance
• Ease of administration and maintenance
Let's talk about an
average platform
Devops 2010
• Fleets of ephemeral, stateless servers
• Load-balancer or shared work queue
• All message passing happens externally
• All state held externally
Devops 2010, cont.
• Upgrade: Start new servers, add to pool,
remove old servers from pool, kill old servers
• Rollback: either same as above, or hot/cold
a.k.a. blue/green deployment
• Many moving parts -- provisioning, load
balancer, connection draining
Devops 2016
• Mostly like that
• Something something Docker
• Heavily automated
• Far-out stuff: virtualized resource pools, e.g.
Mesos
Desirables Achieved?
• Horizontal scalability and fault tolerance, check
• Zero-downtime upgrades and rollbacks, mostly
• Stability and performance, yeah sure
• Ease of maintenance, not so sure
Let's talk about the
Erlang platform
Things Erlang Does
• Extreme fault tolerance
• Simple scalability to dozens of server nodes
• Zero-downtime upgrades/rollbacks (and fast)
• Stability and performance
Things Elixir Helps With
• Ease of administration and maintenance
Erlang Clustering
• Designed for long-lived server clusters
• Treat OTP apps like microservices, and you get
a free resource pool
• Postpone sharding
• Postpone outboard message passing
Erlang vs The World
• Erlang doesn't look like Devops 2010, but
delivers much of Devops 2016
• Go with the flow of the platform
• Startups love time-to-market advantages
Real Talk
• Don't use Elixir in prod just because it's shiny
• Evaluate advantages and disadvantages
• If Elixir and Erlang have the features to get you to
market faster or better, consider it
• Also consider Erlang + Devops 2016 if that works
for your use case
• Nothing's free in the long run -- scale hurts
Deployment
• The sum of tools and topology
• Topology is a big topic, so here I will
abbreviate to "at least two of everything"
• Now let's discuss deployment tools on the
Erlang/Elixir platform
In the Beginning...
Source: http://learnyousomeerlang.com/relups
exrm
• Elixir Release Manager
• Handles most of steps 1-25 in previous slide
• Generates Erlang releases
• Then you like, put them on servers or
something? lol
edeliver
• Based on deliver, a bash-based deploy tool
• Works with rebar, mix, relx, exrm
• Handles builds, deployment, versioning
• Actively developed
• https://github.com/boldpoker/edeliver
How to edeliver
• Add edeliver as a dependency/app in mix.exs
• Create and configure .deliver/config file
• Set up servers, logins, dirs, and configs
• Use git tags to mark mix.exs versions
• Run mix tasks, make money
edeliver Directories
• Don't create $BUILD_AT, $TEST_AT,
$DELIVER_TO yourself
• config/*.secret.exs, etc. go in $CONFIG_AT
• *.vm.args files handle node names, clustering
• Normal Unix permissions rules apply
How to Clustering
• name and setcookie params in vm.args
• sync_nodes_mandatory/sync_nodes_optional
in :kernel config
• http://erlang.org/doc/design_principles/
distributed_applications.html
edeliver and Versions
• edeliver has some new features around auto-
versioning
• I do not recommend using them (yet)
• Just stick to git tags named exactly like the
mix.env version (i.e., "0.0.1" not "v0.0.1")
Let's take edeliver

out for a spin
Build a release
Deploy the first
release
Build a hot upgrade
Deploy a hot upgrade
Hot upgrades
are cool
But they don't always work
• Sometimes it's a matter of hand-editing appups
and relups
• Sometimes packages are not in a position to be
hot-upgraded (e.g., Cowboy)
• Sometimes f^@% you
So, What Now?
• Rolling upgrades are your best fallback
• Necessitates more than one server
• Write your code so that function signatures
don't change
• Above technique is good for DB migrations too!
Rolling Upgrade
• Build release
• Deploy release without --start-deploy
• Execute on each server:
cd $DELIVER_TO/your_app_name

releases/X.Y.Z/your_app_name.sh restart
Rollbacks
• Rollbacks are just upgrades
• If you could upgrade version X to Y, you can
rollback Y to X just as quickly
Database Migrations
• edeliver now has a migration feature
• http://blog.plataformatec.com.br/2016/04/
running-migration-in-an-exrm-release/
• I usually just log into the build server and:
cd $BUILD_AT/prod

MIX_ENV=prod mix ecto.migrate
Gotcha!
Gotcha! Ulimit
• a.k.a. EFILE, Too many open files
• Erlang rules at using file descriptors
• It rules so hard that Unix thinks something went
wrong and must be contained
• Be sure and set ulimit very high/infinite
• Set -env ERL_MAX_PORTS very high in vm.args
Gotcha! Exceptions
• Too many exceptions too fast, and the Erlang
VM will ragequit
• Band-aid Solution 1: -heart in vm.args
• Band-aid Solution 2: bin/myapp start in cron
• Real Solution: fix your shit
Gotcha! Segfaults
• The Erlang VM is not supposed to segfault
• How adorable
• Same instructions as previous slide
Gotcha! Cached Release
• Example: you build an upgrade from X to Z
• You then build an upgrade from Y to Z
• If you had copied X-to-Z to your servers, you
can't perform the upgrade Y-to-Z
• Solution: Blow away $DELIVER_TO/myapp/
releases/Z before building/deploying Y-to-Z
Gotcha! Websockets
• Unexplained client 400s can be due to load
balancer issues
• Amazon ELB: use "TCP"/"SSL" settings, not
"HTTP"/"HTTPS"
• Nginx:

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";
Gotcha! Git Problems
Finding a Git Solution
in edeliver/libexec/erlang
Another Summary
• Erlang and Elixir deployment shouldn't look like
less-powerful platforms'
• edeliver automates most of the deployment
process, mostly. Let's say 90% of the time
• Taken next to the platform's advantages, the
gotchas aren't so bad
• 2016 is early in the Elixir Deployment timeline
Questions?
Thanks!
https://twitter.com/gamache
https://engineering.appcues.com
http://www.slideshare.net/petegamache/real-world-elixir-deployment

Contenu connexe

Tendances

Akka.net versus microsoft orleans
Akka.net versus microsoft orleansAkka.net versus microsoft orleans
Akka.net versus microsoft orleansBill Tulloch
 
Open stack and_vagrant-os-meetup-2015
Open stack and_vagrant-os-meetup-2015Open stack and_vagrant-os-meetup-2015
Open stack and_vagrant-os-meetup-2015yfauser
 
Learning Elixir as a Rubyist
Learning Elixir as a RubyistLearning Elixir as a Rubyist
Learning Elixir as a RubyistAlex Kira
 
Debugging ansible modules
Debugging ansible modulesDebugging ansible modules
Debugging ansible modulesaleonhardt
 
NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...
NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...
NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...Frank van der Linden
 
Introduction to Phoenix Web Framework
Introduction to Phoenix Web FrameworkIntroduction to Phoenix Web Framework
Introduction to Phoenix Web FrameworkRiza Fahmi
 
Ansible Best Practices - July 30
Ansible Best Practices - July 30Ansible Best Practices - July 30
Ansible Best Practices - July 30tylerturk
 
ElasticBeanstalk で新規事業を爆速ローンチする
ElasticBeanstalk で新規事業を爆速ローンチするElasticBeanstalk で新規事業を爆速ローンチする
ElasticBeanstalk で新規事業を爆速ローンチするRyo Shibayama
 
Amazon inspector で自動セキュリティ診断
Amazon inspector で自動セキュリティ診断Amazon inspector で自動セキュリティ診断
Amazon inspector で自動セキュリティ診断Ryo Shibayama
 
App::RemoteCommand
App::RemoteCommandApp::RemoteCommand
App::RemoteCommandShoichi Kaji
 
Presentation about Overthere for J-Fall 2011
Presentation about Overthere for J-Fall 2011Presentation about Overthere for J-Fall 2011
Presentation about Overthere for J-Fall 2011Vincent Partington
 
Working Well Together: How to Keep High-end Game Development Teams Productive
Working Well Together: How to Keep High-end Game Development Teams ProductiveWorking Well Together: How to Keep High-end Game Development Teams Productive
Working Well Together: How to Keep High-end Game Development Teams ProductivePerforce
 
When Tools Attack
When Tools AttackWhen Tools Attack
When Tools AttackPerforce
 
Ansible training | redhat Ansible 2.5 Corporate course - GOT
Ansible training | redhat Ansible 2.5 Corporate course - GOTAnsible training | redhat Ansible 2.5 Corporate course - GOT
Ansible training | redhat Ansible 2.5 Corporate course - GOTkeerthi124
 
Introduction to Ansible - Jan 28 - Austin MeetUp
Introduction to Ansible - Jan 28 - Austin MeetUpIntroduction to Ansible - Jan 28 - Austin MeetUp
Introduction to Ansible - Jan 28 - Austin MeetUptylerturk
 
Symfony Live San Francisco 2017 - Symfony @ OpenSky
Symfony Live San Francisco 2017 - Symfony @ OpenSkySymfony Live San Francisco 2017 - Symfony @ OpenSky
Symfony Live San Francisco 2017 - Symfony @ OpenSkyPablo Godel
 
The Actor Model - Towards Better Concurrency
The Actor Model - Towards Better ConcurrencyThe Actor Model - Towards Better Concurrency
The Actor Model - Towards Better ConcurrencyDror Bereznitsky
 
Nice performance using Sf2 cache wrapping Sf1 application
Nice performance using Sf2 cache wrapping Sf1 applicationNice performance using Sf2 cache wrapping Sf1 application
Nice performance using Sf2 cache wrapping Sf1 applicationMarc Weistroff
 

Tendances (20)

Akka.net versus microsoft orleans
Akka.net versus microsoft orleansAkka.net versus microsoft orleans
Akka.net versus microsoft orleans
 
Open stack and_vagrant-os-meetup-2015
Open stack and_vagrant-os-meetup-2015Open stack and_vagrant-os-meetup-2015
Open stack and_vagrant-os-meetup-2015
 
Learning Elixir as a Rubyist
Learning Elixir as a RubyistLearning Elixir as a Rubyist
Learning Elixir as a Rubyist
 
Debugging ansible modules
Debugging ansible modulesDebugging ansible modules
Debugging ansible modules
 
NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...
NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...
NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (...
 
Introduction to Phoenix Web Framework
Introduction to Phoenix Web FrameworkIntroduction to Phoenix Web Framework
Introduction to Phoenix Web Framework
 
Ansible Best Practices - July 30
Ansible Best Practices - July 30Ansible Best Practices - July 30
Ansible Best Practices - July 30
 
ElasticBeanstalk で新規事業を爆速ローンチする
ElasticBeanstalk で新規事業を爆速ローンチするElasticBeanstalk で新規事業を爆速ローンチする
ElasticBeanstalk で新規事業を爆速ローンチする
 
Amazon inspector で自動セキュリティ診断
Amazon inspector で自動セキュリティ診断Amazon inspector で自動セキュリティ診断
Amazon inspector で自動セキュリティ診断
 
App::RemoteCommand
App::RemoteCommandApp::RemoteCommand
App::RemoteCommand
 
Presentation about Overthere for J-Fall 2011
Presentation about Overthere for J-Fall 2011Presentation about Overthere for J-Fall 2011
Presentation about Overthere for J-Fall 2011
 
Working Well Together: How to Keep High-end Game Development Teams Productive
Working Well Together: How to Keep High-end Game Development Teams ProductiveWorking Well Together: How to Keep High-end Game Development Teams Productive
Working Well Together: How to Keep High-end Game Development Teams Productive
 
When Tools Attack
When Tools AttackWhen Tools Attack
When Tools Attack
 
Phoenix Framework
Phoenix FrameworkPhoenix Framework
Phoenix Framework
 
Ansible training | redhat Ansible 2.5 Corporate course - GOT
Ansible training | redhat Ansible 2.5 Corporate course - GOTAnsible training | redhat Ansible 2.5 Corporate course - GOT
Ansible training | redhat Ansible 2.5 Corporate course - GOT
 
Introduction to Ansible - Jan 28 - Austin MeetUp
Introduction to Ansible - Jan 28 - Austin MeetUpIntroduction to Ansible - Jan 28 - Austin MeetUp
Introduction to Ansible - Jan 28 - Austin MeetUp
 
Symfony Live San Francisco 2017 - Symfony @ OpenSky
Symfony Live San Francisco 2017 - Symfony @ OpenSkySymfony Live San Francisco 2017 - Symfony @ OpenSky
Symfony Live San Francisco 2017 - Symfony @ OpenSky
 
The Actor Model - Towards Better Concurrency
The Actor Model - Towards Better ConcurrencyThe Actor Model - Towards Better Concurrency
The Actor Model - Towards Better Concurrency
 
Nice performance using Sf2 cache wrapping Sf1 application
Nice performance using Sf2 cache wrapping Sf1 applicationNice performance using Sf2 cache wrapping Sf1 application
Nice performance using Sf2 cache wrapping Sf1 application
 
Elixir intro
Elixir introElixir intro
Elixir intro
 

En vedette

Bottleneck in Elixir Application - Alexey Osipenko
 Bottleneck in Elixir Application - Alexey Osipenko  Bottleneck in Elixir Application - Alexey Osipenko
Bottleneck in Elixir Application - Alexey Osipenko Elixir Club
 
Build Your Own Real-Time Web Service with Elixir Phoenix
Build Your Own Real-Time Web Service with Elixir PhoenixBuild Your Own Real-Time Web Service with Elixir Phoenix
Build Your Own Real-Time Web Service with Elixir PhoenixChi-chi Ekweozor
 
Flowex: Flow-Based Programming with Elixir GenStage - Anton Mishchuk
Flowex: Flow-Based Programming with Elixir GenStage - Anton MishchukFlowex: Flow-Based Programming with Elixir GenStage - Anton Mishchuk
Flowex: Flow-Based Programming with Elixir GenStage - Anton MishchukElixir Club
 
Manchester Social Media Surgery Events: an Introduction
Manchester Social Media Surgery Events: an IntroductionManchester Social Media Surgery Events: an Introduction
Manchester Social Media Surgery Events: an IntroductionChi-chi Ekweozor
 
Talking to your organization about Elixir
Talking to your organization about ElixirTalking to your organization about Elixir
Talking to your organization about ElixirBrandon Richey
 
ELIXIR Webinar: Introducing TeSS
ELIXIR Webinar: Introducing TeSSELIXIR Webinar: Introducing TeSS
ELIXIR Webinar: Introducing TeSSNiall Beard
 
Spark as a distributed Scala
Spark as a distributed ScalaSpark as a distributed Scala
Spark as a distributed ScalaAlex Fruzenshtein
 
WEB MINING: PATTERN DISCOVERY ON THE WORLD WIDE WEB - 2011
WEB MINING: PATTERN DISCOVERY ON THE WORLD WIDE WEB - 2011WEB MINING: PATTERN DISCOVERY ON THE WORLD WIDE WEB - 2011
WEB MINING: PATTERN DISCOVERY ON THE WORLD WIDE WEB - 2011Mustafa TURAN
 
Magic Clusters and Where to Find Them 2.0 - Eugene Pirogov
Magic Clusters and Where to Find Them 2.0 - Eugene Pirogov Magic Clusters and Where to Find Them 2.0 - Eugene Pirogov
Magic Clusters and Where to Find Them 2.0 - Eugene Pirogov Elixir Club
 
나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발Changwook Park
 
Control flow in_elixir
Control flow in_elixirControl flow in_elixir
Control flow in_elixirAnna Neyzberg
 
Phoenix: Inflame the Web - Alex Troush
Phoenix: Inflame the Web - Alex TroushPhoenix: Inflame the Web - Alex Troush
Phoenix: Inflame the Web - Alex TroushElixir Club
 
GenStage and Flow - Jose Valim
GenStage and Flow - Jose Valim GenStage and Flow - Jose Valim
GenStage and Flow - Jose Valim Elixir Club
 
Distributed system in Elixir
Distributed system in ElixirDistributed system in Elixir
Distributed system in ElixirChangwook Park
 
Elixir & Phoenix 推坑
Elixir & Phoenix 推坑Elixir & Phoenix 推坑
Elixir & Phoenix 推坑Chao-Ju Huang
 
Proteome array - antibody based proteome arrays
Proteome array - antibody based proteome arrays Proteome array - antibody based proteome arrays
Proteome array - antibody based proteome arrays saraswathi rajakumar
 
Anatomy of an elixir process and Actor Communication
Anatomy of an elixir process and Actor CommunicationAnatomy of an elixir process and Actor Communication
Anatomy of an elixir process and Actor CommunicationMustafa TURAN
 

En vedette (20)

Bottleneck in Elixir Application - Alexey Osipenko
 Bottleneck in Elixir Application - Alexey Osipenko  Bottleneck in Elixir Application - Alexey Osipenko
Bottleneck in Elixir Application - Alexey Osipenko
 
Build Your Own Real-Time Web Service with Elixir Phoenix
Build Your Own Real-Time Web Service with Elixir PhoenixBuild Your Own Real-Time Web Service with Elixir Phoenix
Build Your Own Real-Time Web Service with Elixir Phoenix
 
Flowex: Flow-Based Programming with Elixir GenStage - Anton Mishchuk
Flowex: Flow-Based Programming with Elixir GenStage - Anton MishchukFlowex: Flow-Based Programming with Elixir GenStage - Anton Mishchuk
Flowex: Flow-Based Programming with Elixir GenStage - Anton Mishchuk
 
Manchester Social Media Surgery Events: an Introduction
Manchester Social Media Surgery Events: an IntroductionManchester Social Media Surgery Events: an Introduction
Manchester Social Media Surgery Events: an Introduction
 
Talking to your organization about Elixir
Talking to your organization about ElixirTalking to your organization about Elixir
Talking to your organization about Elixir
 
ELIXIR Webinar: Introducing TeSS
ELIXIR Webinar: Introducing TeSSELIXIR Webinar: Introducing TeSS
ELIXIR Webinar: Introducing TeSS
 
Spark as a distributed Scala
Spark as a distributed ScalaSpark as a distributed Scala
Spark as a distributed Scala
 
Big Data eBook
Big Data eBookBig Data eBook
Big Data eBook
 
WEB MINING: PATTERN DISCOVERY ON THE WORLD WIDE WEB - 2011
WEB MINING: PATTERN DISCOVERY ON THE WORLD WIDE WEB - 2011WEB MINING: PATTERN DISCOVERY ON THE WORLD WIDE WEB - 2011
WEB MINING: PATTERN DISCOVERY ON THE WORLD WIDE WEB - 2011
 
Magic Clusters and Where to Find Them 2.0 - Eugene Pirogov
Magic Clusters and Where to Find Them 2.0 - Eugene Pirogov Magic Clusters and Where to Find Them 2.0 - Eugene Pirogov
Magic Clusters and Where to Find Them 2.0 - Eugene Pirogov
 
나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
나프다 웨비너 1604: Elixir와 함수형 프로그래밍을 이용한 웹 개발
 
Control flow in_elixir
Control flow in_elixirControl flow in_elixir
Control flow in_elixir
 
Spring IO for startups
Spring IO for startupsSpring IO for startups
Spring IO for startups
 
Phoenix: Inflame the Web - Alex Troush
Phoenix: Inflame the Web - Alex TroushPhoenix: Inflame the Web - Alex Troush
Phoenix: Inflame the Web - Alex Troush
 
GenStage and Flow - Jose Valim
GenStage and Flow - Jose Valim GenStage and Flow - Jose Valim
GenStage and Flow - Jose Valim
 
Distributed system in Elixir
Distributed system in ElixirDistributed system in Elixir
Distributed system in Elixir
 
Elixir & Phoenix 推坑
Elixir & Phoenix 推坑Elixir & Phoenix 推坑
Elixir & Phoenix 推坑
 
Proteome array - antibody based proteome arrays
Proteome array - antibody based proteome arrays Proteome array - antibody based proteome arrays
Proteome array - antibody based proteome arrays
 
Anatomy of an elixir process and Actor Communication
Anatomy of an elixir process and Actor CommunicationAnatomy of an elixir process and Actor Communication
Anatomy of an elixir process and Actor Communication
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 

Similaire à Real World Elixir Deployment

What we talk about when we talk about DevOps
What we talk about when we talk about DevOpsWhat we talk about when we talk about DevOps
What we talk about when we talk about DevOpsRicard Clau
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to DockerAlan Forbes
 
Journey to Docker Production: Evolving Your Infrastructure and Processes - Br...
Journey to Docker Production: Evolving Your Infrastructure and Processes - Br...Journey to Docker Production: Evolving Your Infrastructure and Processes - Br...
Journey to Docker Production: Evolving Your Infrastructure and Processes - Br...Docker, Inc.
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
 
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...Gaetano Giunta
 
C# Async/Await Explained
C# Async/Await ExplainedC# Async/Await Explained
C# Async/Await ExplainedJeremy Likness
 
Eclipse OMR: a modern, open-source toolkit for building language runtimes
Eclipse OMR: a modern, open-source toolkit for building language runtimesEclipse OMR: a modern, open-source toolkit for building language runtimes
Eclipse OMR: a modern, open-source toolkit for building language runtimesDev_Events
 
Managing ejabberd Platforms with Docker - ejabberd Workshop #1
Managing ejabberd Platforms with Docker - ejabberd Workshop #1Managing ejabberd Platforms with Docker - ejabberd Workshop #1
Managing ejabberd Platforms with Docker - ejabberd Workshop #1Mickaël Rémond
 
An introduction to configuring Domino for Docker
An introduction to configuring Domino for DockerAn introduction to configuring Domino for Docker
An introduction to configuring Domino for DockerGabriella Davis
 
Using Apache Camel as AKKA
Using Apache Camel as AKKAUsing Apache Camel as AKKA
Using Apache Camel as AKKAJohan Edstrom
 
Working With Concurrency In Java 8
Working With Concurrency In Java 8Working With Concurrency In Java 8
Working With Concurrency In Java 8Heartin Jacob
 
Handling 1 Billion Requests/hr with Minimal Latency Using Docker
Handling 1 Billion Requests/hr with Minimal Latency Using DockerHandling 1 Billion Requests/hr with Minimal Latency Using Docker
Handling 1 Billion Requests/hr with Minimal Latency Using DockerMatomy
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchHoward Greenberg
 
CNIT 126 Ch 9: OllyDbg
CNIT 126 Ch 9: OllyDbgCNIT 126 Ch 9: OllyDbg
CNIT 126 Ch 9: OllyDbgSam Bowne
 
DSpace UI prototype dsember
DSpace UI prototype dsemberDSpace UI prototype dsember
DSpace UI prototype dsemberBram Luyten
 

Similaire à Real World Elixir Deployment (20)

What we talk about when we talk about DevOps
What we talk about when we talk about DevOpsWhat we talk about when we talk about DevOps
What we talk about when we talk about DevOps
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Journey to Docker Production: Evolving Your Infrastructure and Processes - Br...
Journey to Docker Production: Evolving Your Infrastructure and Processes - Br...Journey to Docker Production: Evolving Your Infrastructure and Processes - Br...
Journey to Docker Production: Evolving Your Infrastructure and Processes - Br...
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
 
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...
 
Stackato
StackatoStackato
Stackato
 
C# Async/Await Explained
C# Async/Await ExplainedC# Async/Await Explained
C# Async/Await Explained
 
Eclipse OMR: a modern, open-source toolkit for building language runtimes
Eclipse OMR: a modern, open-source toolkit for building language runtimesEclipse OMR: a modern, open-source toolkit for building language runtimes
Eclipse OMR: a modern, open-source toolkit for building language runtimes
 
Managing ejabberd Platforms with Docker - ejabberd Workshop #1
Managing ejabberd Platforms with Docker - ejabberd Workshop #1Managing ejabberd Platforms with Docker - ejabberd Workshop #1
Managing ejabberd Platforms with Docker - ejabberd Workshop #1
 
9: OllyDbg
9: OllyDbg9: OllyDbg
9: OllyDbg
 
An introduction to configuring Domino for Docker
An introduction to configuring Domino for DockerAn introduction to configuring Domino for Docker
An introduction to configuring Domino for Docker
 
Achieving Agility with Code Repositories
Achieving Agility with Code RepositoriesAchieving Agility with Code Repositories
Achieving Agility with Code Repositories
 
Using Apache Camel as AKKA
Using Apache Camel as AKKAUsing Apache Camel as AKKA
Using Apache Camel as AKKA
 
Working With Concurrency In Java 8
Working With Concurrency In Java 8Working With Concurrency In Java 8
Working With Concurrency In Java 8
 
Handling 1 Billion Requests/hr with Minimal Latency Using Docker
Handling 1 Billion Requests/hr with Minimal Latency Using DockerHandling 1 Billion Requests/hr with Minimal Latency Using Docker
Handling 1 Billion Requests/hr with Minimal Latency Using Docker
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
 
CNIT 126 Ch 9: OllyDbg
CNIT 126 Ch 9: OllyDbgCNIT 126 Ch 9: OllyDbg
CNIT 126 Ch 9: OllyDbg
 
Stackato v6
Stackato v6Stackato v6
Stackato v6
 
DSpace UI prototype dsember
DSpace UI prototype dsemberDSpace UI prototype dsember
DSpace UI prototype dsember
 

Dernier

How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 

Dernier (20)

How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 

Real World Elixir Deployment

  • 1. REAL WORLD ELIXIR DEPLOYMENT Empire City Elixir | 2016-05-21 pete gamache | pete@gamache.org | @gamache
  • 2. Hi!
  • 3. Summary • Elixir and Erlang make a rock-solid platform • Erlang excels at long-lived clusters • "Modern" deployment practices do not take advantage of Erlang core features • Deploying Elixir can be painful, but if you are taking advantage of platform, can be worth it
  • 4. Let's talk about an ideal platform
  • 5. Platform Desirables • Horizontal scalability • Fault tolerance • Zero-downtime upgrades and rollbacks • Stability and performance • Ease of administration and maintenance
  • 6. Let's talk about an average platform
  • 7. Devops 2010 • Fleets of ephemeral, stateless servers • Load-balancer or shared work queue • All message passing happens externally • All state held externally
  • 8. Devops 2010, cont. • Upgrade: Start new servers, add to pool, remove old servers from pool, kill old servers • Rollback: either same as above, or hot/cold a.k.a. blue/green deployment • Many moving parts -- provisioning, load balancer, connection draining
  • 9. Devops 2016 • Mostly like that • Something something Docker • Heavily automated • Far-out stuff: virtualized resource pools, e.g. Mesos
  • 10. Desirables Achieved? • Horizontal scalability and fault tolerance, check • Zero-downtime upgrades and rollbacks, mostly • Stability and performance, yeah sure • Ease of maintenance, not so sure
  • 11. Let's talk about the Erlang platform
  • 12. Things Erlang Does • Extreme fault tolerance • Simple scalability to dozens of server nodes • Zero-downtime upgrades/rollbacks (and fast) • Stability and performance
  • 13. Things Elixir Helps With • Ease of administration and maintenance
  • 14. Erlang Clustering • Designed for long-lived server clusters • Treat OTP apps like microservices, and you get a free resource pool • Postpone sharding • Postpone outboard message passing
  • 15. Erlang vs The World • Erlang doesn't look like Devops 2010, but delivers much of Devops 2016 • Go with the flow of the platform • Startups love time-to-market advantages
  • 16. Real Talk • Don't use Elixir in prod just because it's shiny • Evaluate advantages and disadvantages • If Elixir and Erlang have the features to get you to market faster or better, consider it • Also consider Erlang + Devops 2016 if that works for your use case • Nothing's free in the long run -- scale hurts
  • 17. Deployment • The sum of tools and topology • Topology is a big topic, so here I will abbreviate to "at least two of everything" • Now let's discuss deployment tools on the Erlang/Elixir platform
  • 18. In the Beginning... Source: http://learnyousomeerlang.com/relups
  • 19. exrm • Elixir Release Manager • Handles most of steps 1-25 in previous slide • Generates Erlang releases • Then you like, put them on servers or something? lol
  • 20. edeliver • Based on deliver, a bash-based deploy tool • Works with rebar, mix, relx, exrm • Handles builds, deployment, versioning • Actively developed • https://github.com/boldpoker/edeliver
  • 21. How to edeliver • Add edeliver as a dependency/app in mix.exs • Create and configure .deliver/config file • Set up servers, logins, dirs, and configs • Use git tags to mark mix.exs versions • Run mix tasks, make money
  • 22.
  • 23.
  • 24.
  • 25. edeliver Directories • Don't create $BUILD_AT, $TEST_AT, $DELIVER_TO yourself • config/*.secret.exs, etc. go in $CONFIG_AT • *.vm.args files handle node names, clustering • Normal Unix permissions rules apply
  • 26. How to Clustering • name and setcookie params in vm.args • sync_nodes_mandatory/sync_nodes_optional in :kernel config • http://erlang.org/doc/design_principles/ distributed_applications.html
  • 27.
  • 28.
  • 29. edeliver and Versions • edeliver has some new features around auto- versioning • I do not recommend using them (yet) • Just stick to git tags named exactly like the mix.env version (i.e., "0.0.1" not "v0.0.1")
  • 32.
  • 34.
  • 35.
  • 36. Build a hot upgrade
  • 37.
  • 38.
  • 39.
  • 40. Deploy a hot upgrade
  • 41.
  • 43.
  • 44.
  • 45. But they don't always work • Sometimes it's a matter of hand-editing appups and relups • Sometimes packages are not in a position to be hot-upgraded (e.g., Cowboy) • Sometimes f^@% you
  • 46. So, What Now? • Rolling upgrades are your best fallback • Necessitates more than one server • Write your code so that function signatures don't change • Above technique is good for DB migrations too!
  • 47. Rolling Upgrade • Build release • Deploy release without --start-deploy • Execute on each server: cd $DELIVER_TO/your_app_name
 releases/X.Y.Z/your_app_name.sh restart
  • 48. Rollbacks • Rollbacks are just upgrades • If you could upgrade version X to Y, you can rollback Y to X just as quickly
  • 49.
  • 50. Database Migrations • edeliver now has a migration feature • http://blog.plataformatec.com.br/2016/04/ running-migration-in-an-exrm-release/ • I usually just log into the build server and: cd $BUILD_AT/prod
 MIX_ENV=prod mix ecto.migrate
  • 52. Gotcha! Ulimit • a.k.a. EFILE, Too many open files • Erlang rules at using file descriptors • It rules so hard that Unix thinks something went wrong and must be contained • Be sure and set ulimit very high/infinite • Set -env ERL_MAX_PORTS very high in vm.args
  • 53. Gotcha! Exceptions • Too many exceptions too fast, and the Erlang VM will ragequit • Band-aid Solution 1: -heart in vm.args • Band-aid Solution 2: bin/myapp start in cron • Real Solution: fix your shit
  • 54. Gotcha! Segfaults • The Erlang VM is not supposed to segfault • How adorable • Same instructions as previous slide
  • 55. Gotcha! Cached Release • Example: you build an upgrade from X to Z • You then build an upgrade from Y to Z • If you had copied X-to-Z to your servers, you can't perform the upgrade Y-to-Z • Solution: Blow away $DELIVER_TO/myapp/ releases/Z before building/deploying Y-to-Z
  • 56. Gotcha! Websockets • Unexplained client 400s can be due to load balancer issues • Amazon ELB: use "TCP"/"SSL" settings, not "HTTP"/"HTTPS" • Nginx:
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection "upgrade";
  • 58. Finding a Git Solution in edeliver/libexec/erlang
  • 59.
  • 60.
  • 61. Another Summary • Erlang and Elixir deployment shouldn't look like less-powerful platforms' • edeliver automates most of the deployment process, mostly. Let's say 90% of the time • Taken next to the platform's advantages, the gotchas aren't so bad • 2016 is early in the Elixir Deployment timeline