SlideShare a Scribd company logo
1 of 72
Download to read offline
1 2 FA C T O R A P P
S O F T WA R E E N G I N E E R I N G PA T T E R N S
A B O U T M E
• Docker, 12 Factor Apps, Massive Cloud Scaling is a bit
new to me.
• Discovered this over the last 3 months through
researching new workflows with Docker.
• Know a thing or two but am no Linux guru.
1 2 FA C T O R A P P ?
C O N C E P T S
C L O U D S C A L A B I L I T Y
C L O U D S C A L A B I L I T Y =
H O R I Z O N TA L S C A L A B I L I T Y
… A A S M O D E L S
… A S A S E R V I C E M O D E L S
AS A SERVICE MODELS
AS A SERVICE MODELS
– 1 2 FA C T O R A P P M A N I F E S T O
http://12factor.net
W H AT A R E T H E 1 2 FA C T O R S ?
• They are guidelines for writing scalable SaaS apps
W H AT I S A 1 2 FA C T O R A P P ?
• Manifesto written around 2012
• by Adam Wiggins
• Heroku ( Early cloud PaaS )
http://12factor.net
W H Y S H O U L D I C A R E ?
W H Y S H O U L D I C A R E ?
• Many start up apps get written quickly
• Limited scalability
• Tangled dependencies
• Need a rewrite to scale easily
O H A N D …
If you use docker in production you probably
already have a 12 factor app!
I W I S H I K N E W T H I S B E F O R E
I S TA R T E D W I T H D O C K E R !
L E S S O N S L E A R N T
T H E FA C T O R S
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
1 . C O D E B A S E
O N E C O D E B A S E M A N Y D E P L O Y S
C O D E B A S E
• codebase = repo
• one repo - many deploys
• app != many repos
• many repos = distributed
system
2 . D E P E N D E N C I E S
E X P L I C I T LY D E C L A R E A N D I S O L A T E
D E P E N D E N C I E S
Explicitly declare and isolate dependencies
1. Declare dependencies in a manifest
2. Use isolation tools
3. Specific versions are important
4. Avoid shelling to unbundled system tools.
D E P E N D E N C I E S
Examples:
Dependency Manifest = Gemfile
Isolation tools = bundle exec
gem "redis-rails", "~> 3.2.3"
3 . C O N F I G
S T O R E I N T H E E N V I R O N M E N T
C O N F I G
• Config is the specific information required to host a
deployment of your codebase
• Does not include things like routes etc.
• Mainly database credentials, paths, resource urls etc.
C O N F I G
Store config in the environment.
• Keep your config outside the app
• No config in git
• Open source test
C O N F I G
Use environment vars
Can you make your repo open source
today?
ENV[‘DATABASE_URL’]
4 . B A C K I N G S E R V I C E S
A S A T TA C H E D R E S O U R C E S
4 . B A C K I N G S E R V I C E S
Treat backing services as attached resources
What’s a backing service?
• Datastore
• SMTP
• Caching systems
• Amazon S3
Make no distinction between local and third party
services
5 . B U I L D R E L E A S E R U N
S T R I C T LY S E PA R A T E B U I L D & R U N S TA G E S
B U I L D , R E L E A S E , R U N
BUILD = codebase + dependencies + assets
RELEASE = BUILD + config
RUN = run process against RELEASE
B U I L D ,
R E L E A S E , R U N
B U I L D R E L E A S E R U N
• Strict separation between stages
• Cannot change code at runtime
• Rollback = just use the last release instead.
• Release has unique release ID
6 . P R O C E S S E S
E X E C U T E T H E A P P A S O N E O R M O R E
S TA T E L E S S P R O C E S S E S
P R O C E S S E S
• Does the running of the release
• Is stateless
• Shares nothing with other processes
• Uses single transaction only caches
• Session db storage …over sticky sessions
• Asset pre-compilation …over runtime calculation
7 . P O R T B I N D I N G
E X P O R T S E R V I C E S V I A P O R T B I N D I N G
P O R T B I N D I N G
http://192.168.123.45 : 5555
The contract with the executive environment is
binding to a port to serve requests.
P O R T B I N D I N G
E-Commerce System:
http:// 192.168.123.45 : 5555
Booking System:
http:// 23.123.65.48 : 3306
8 . C O N C U R R E N C Y
S C A L E O U T V I A T H E P R O C E S S M O D E L
C O N C U R R E N C Y
• Scale out via the process model
• Processes are first class citizens.
• Assign work to a process type (web, db, worker etc.)
• Can then handle own multiplexing
• Processes don’t daemonize or write PID files.
• Instead, use system process manager
C O N C U R R E N C Y
Scale out by running multiple
processes of different types
9 . D I S P O S A B I L I T Y
M A X I M I S E R O B U S T N E S S W I T H FA S T S TA R T U P A N D
G R A C E F U L S H U T D O W N
D I S P O S A B I L I T Y
Processes are disposable
• Start quickly
• Shut down gracefully
• Be robust against sudden death
D I S P O S A B I L I T Y
Example: Worker Process
• Return the current job to the job queue
• All jobs are reentrant
• Or at least idempotent
1 0 . D E V P R O D PA R I T Y
K E E P D E V E L O P M E N T, S TA G I N G , A N D P R O D U C T I O N
A S S I M I L A R A S P O S S I B L E
D E V P R O D PA R I T Y
Gaps exist between development and production:
• Time (days to push)
• Personnel (dev vs ops)
• Tools
D E V P R O D PA R I T Y
Need to shorten the gaps!
• CI & deploy ASAP after writing code
• Get Developers involved in Operations
• Environments should be as similar as possible:
• Eg. Resist the urge to use different backing
services between development and production
1 1 . L O G S
T R E A T L O G S A S E V E N T S T R E A M S
L O G S
Within your app treat logs as event streams
• Don’t route or store logs in files
• Stream to stout instead and be captured and handled
by the environment
1 2 . A D M I N P R O C E S S E S
R U N A D M I N / M A N A G E M E N T TA S K S A S
O N E - O F F P R O C E S S E S
A D M I N P R O C E S S E S
One-off admin tasks include:
• Database migrations
• Console
• One-time scripts
A D M I N P R O C E S S E S
• Run as separate process
• Run against the same release
• Admin code ships with app code
T H E FA C T O R S
1. Codebase
2. Dependencies
3. Config
4. Backing Services
5. Build, Release Run
6. Processes
7. Port Binding
8. Concurrency
9. Disposability
10. Dev/Prod Parity
11. Logs
12. Admin Processes
W H AT M I G H T T H I S A L L
L O O K L I K E ?
T H A N K Y O U
Q U E S T I O N S ?

More Related Content

What's hot

What's hot (20)

Monitoring with prometheus
Monitoring with prometheusMonitoring with prometheus
Monitoring with prometheus
 
12 factor apps
12 factor apps12 factor apps
12 factor apps
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetes
 
Building Microservices with the 12 Factor App Pattern on AWS
Building Microservices with the 12 Factor App Pattern on AWSBuilding Microservices with the 12 Factor App Pattern on AWS
Building Microservices with the 12 Factor App Pattern on AWS
 
GitOps is the best modern practice for CD with Kubernetes
GitOps is the best modern practice for CD with KubernetesGitOps is the best modern practice for CD with Kubernetes
GitOps is the best modern practice for CD with Kubernetes
 
Introduction to helm
Introduction to helmIntroduction to helm
Introduction to helm
 
Creating AWS infrastructure using Terraform
Creating AWS infrastructure using TerraformCreating AWS infrastructure using Terraform
Creating AWS infrastructure using Terraform
 
Kubernetes Architecture and Introduction
Kubernetes Architecture and IntroductionKubernetes Architecture and Introduction
Kubernetes Architecture and Introduction
 
Prometheus design and philosophy
Prometheus design and philosophy   Prometheus design and philosophy
Prometheus design and philosophy
 
Observability
ObservabilityObservability
Observability
 
Build CICD Pipeline for Container Presentation Slides
Build CICD Pipeline for Container Presentation SlidesBuild CICD Pipeline for Container Presentation Slides
Build CICD Pipeline for Container Presentation Slides
 
Docker & kubernetes
Docker & kubernetesDocker & kubernetes
Docker & kubernetes
 
Getting Started with Infrastructure as Code
Getting Started with Infrastructure as CodeGetting Started with Infrastructure as Code
Getting Started with Infrastructure as Code
 
Open shift 4 infra deep dive
Open shift 4    infra deep diveOpen shift 4    infra deep dive
Open shift 4 infra deep dive
 
Azure Container Apps
Azure Container AppsAzure Container Apps
Azure Container Apps
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
Prometheus monitoring
Prometheus monitoringPrometheus monitoring
Prometheus monitoring
 
Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Introduction to Kubernetes
Introduction to KubernetesIntroduction to Kubernetes
Introduction to Kubernetes
 

Similar to The 12 Factor App

RubiOne: Apache Spark as the Backbone of a Retail Analytics Development Envir...
RubiOne: Apache Spark as the Backbone of a Retail Analytics Development Envir...RubiOne: Apache Spark as the Backbone of a Retail Analytics Development Envir...
RubiOne: Apache Spark as the Backbone of a Retail Analytics Development Envir...
Databricks
 

Similar to The 12 Factor App (20)

Using MongoDB to Build a Fast and Scalable Content Repository
Using MongoDB to Build a Fast and Scalable Content RepositoryUsing MongoDB to Build a Fast and Scalable Content Repository
Using MongoDB to Build a Fast and Scalable Content Repository
 
MongoDB Europe 2016 - Using MongoDB to Build a Fast and Scalable Content Repo...
MongoDB Europe 2016 - Using MongoDB to Build a Fast and Scalable Content Repo...MongoDB Europe 2016 - Using MongoDB to Build a Fast and Scalable Content Repo...
MongoDB Europe 2016 - Using MongoDB to Build a Fast and Scalable Content Repo...
 
200,000 Lines Later: Our Journey to Manageable Puppet Code
200,000 Lines Later: Our Journey to Manageable Puppet Code200,000 Lines Later: Our Journey to Manageable Puppet Code
200,000 Lines Later: Our Journey to Manageable Puppet Code
 
Building a Data Ingestion & Processing Pipeline with Spark & Airflow
Building a Data Ingestion & Processing Pipeline with Spark & AirflowBuilding a Data Ingestion & Processing Pipeline with Spark & Airflow
Building a Data Ingestion & Processing Pipeline with Spark & Airflow
 
Using React for the Mobile Web
Using React for the Mobile WebUsing React for the Mobile Web
Using React for the Mobile Web
 
Deployments in one click!
Deployments in one click!Deployments in one click!
Deployments in one click!
 
SOA Latam 2015
SOA Latam 2015SOA Latam 2015
SOA Latam 2015
 
So Your OpenStack Cloud is Built... Now What's Next - Walter Bentley - OpenSt...
So Your OpenStack Cloud is Built... Now What's Next - Walter Bentley - OpenSt...So Your OpenStack Cloud is Built... Now What's Next - Walter Bentley - OpenSt...
So Your OpenStack Cloud is Built... Now What's Next - Walter Bentley - OpenSt...
 
Microservices Delivery Platform. Tips & Tricks
Microservices Delivery Platform. Tips & TricksMicroservices Delivery Platform. Tips & Tricks
Microservices Delivery Platform. Tips & Tricks
 
So Your OpenStack Cloud is Built...Now What?
So Your OpenStack Cloud is Built...Now What? So Your OpenStack Cloud is Built...Now What?
So Your OpenStack Cloud is Built...Now What?
 
Rundeck's History and Future
Rundeck's History and FutureRundeck's History and Future
Rundeck's History and Future
 
RubiOne: Apache Spark as the Backbone of a Retail Analytics Development Envir...
RubiOne: Apache Spark as the Backbone of a Retail Analytics Development Envir...RubiOne: Apache Spark as the Backbone of a Retail Analytics Development Envir...
RubiOne: Apache Spark as the Backbone of a Retail Analytics Development Envir...
 
High quality Front-End
High quality Front-EndHigh quality Front-End
High quality Front-End
 
1 sysadmin vs 250 clusters de stockage
1 sysadmin vs 250 clusters de stockage1 sysadmin vs 250 clusters de stockage
1 sysadmin vs 250 clusters de stockage
 
Java 20
Java 20Java 20
Java 20
 
The Angular road from 1.x to 2.0
The Angular road from 1.x to 2.0The Angular road from 1.x to 2.0
The Angular road from 1.x to 2.0
 
Cloud Native Development
Cloud Native DevelopmentCloud Native Development
Cloud Native Development
 
Meteor WWNRW Intro
Meteor WWNRW IntroMeteor WWNRW Intro
Meteor WWNRW Intro
 
Containers: Don't Skeu Them Up (LinuxCon Dublin)
Containers: Don't Skeu Them Up (LinuxCon Dublin)Containers: Don't Skeu Them Up (LinuxCon Dublin)
Containers: Don't Skeu Them Up (LinuxCon Dublin)
 
API Security: Assume Possible Interference
API Security: Assume Possible InterferenceAPI Security: Assume Possible Interference
API Security: Assume Possible Interference
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 

The 12 Factor App

  • 1. 1 2 FA C T O R A P P S O F T WA R E E N G I N E E R I N G PA T T E R N S
  • 2. A B O U T M E • Docker, 12 Factor Apps, Massive Cloud Scaling is a bit new to me. • Discovered this over the last 3 months through researching new workflows with Docker. • Know a thing or two but am no Linux guru.
  • 3. 1 2 FA C T O R A P P ?
  • 4. C O N C E P T S
  • 5. C L O U D S C A L A B I L I T Y
  • 6.
  • 7. C L O U D S C A L A B I L I T Y = H O R I Z O N TA L S C A L A B I L I T Y
  • 8. … A A S M O D E L S … A S A S E R V I C E M O D E L S
  • 9. AS A SERVICE MODELS
  • 10. AS A SERVICE MODELS
  • 11. – 1 2 FA C T O R A P P M A N I F E S T O http://12factor.net
  • 12. W H AT A R E T H E 1 2 FA C T O R S ? • They are guidelines for writing scalable SaaS apps
  • 13. W H AT I S A 1 2 FA C T O R A P P ? • Manifesto written around 2012 • by Adam Wiggins • Heroku ( Early cloud PaaS ) http://12factor.net
  • 14. W H Y S H O U L D I C A R E ?
  • 15. W H Y S H O U L D I C A R E ? • Many start up apps get written quickly • Limited scalability • Tangled dependencies • Need a rewrite to scale easily
  • 16. O H A N D …
  • 17.
  • 18. If you use docker in production you probably already have a 12 factor app!
  • 19. I W I S H I K N E W T H I S B E F O R E I S TA R T E D W I T H D O C K E R ! L E S S O N S L E A R N T
  • 20. T H E FA C T O R S
  • 21. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 22. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 23. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 24. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 25. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 26. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 27. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 28. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 29. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 30. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 31. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 32. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 33. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 34. 1 . C O D E B A S E O N E C O D E B A S E M A N Y D E P L O Y S
  • 35. C O D E B A S E • codebase = repo • one repo - many deploys • app != many repos • many repos = distributed system
  • 36. 2 . D E P E N D E N C I E S E X P L I C I T LY D E C L A R E A N D I S O L A T E
  • 37. D E P E N D E N C I E S Explicitly declare and isolate dependencies 1. Declare dependencies in a manifest 2. Use isolation tools 3. Specific versions are important 4. Avoid shelling to unbundled system tools.
  • 38. D E P E N D E N C I E S Examples: Dependency Manifest = Gemfile Isolation tools = bundle exec gem "redis-rails", "~> 3.2.3"
  • 39. 3 . C O N F I G S T O R E I N T H E E N V I R O N M E N T
  • 40. C O N F I G • Config is the specific information required to host a deployment of your codebase • Does not include things like routes etc. • Mainly database credentials, paths, resource urls etc.
  • 41. C O N F I G Store config in the environment. • Keep your config outside the app • No config in git • Open source test
  • 42. C O N F I G Use environment vars Can you make your repo open source today? ENV[‘DATABASE_URL’]
  • 43. 4 . B A C K I N G S E R V I C E S A S A T TA C H E D R E S O U R C E S
  • 44. 4 . B A C K I N G S E R V I C E S Treat backing services as attached resources What’s a backing service? • Datastore • SMTP • Caching systems • Amazon S3 Make no distinction between local and third party services
  • 45.
  • 46. 5 . B U I L D R E L E A S E R U N S T R I C T LY S E PA R A T E B U I L D & R U N S TA G E S
  • 47. B U I L D , R E L E A S E , R U N BUILD = codebase + dependencies + assets RELEASE = BUILD + config RUN = run process against RELEASE
  • 48. B U I L D , R E L E A S E , R U N
  • 49. B U I L D R E L E A S E R U N • Strict separation between stages • Cannot change code at runtime • Rollback = just use the last release instead. • Release has unique release ID
  • 50. 6 . P R O C E S S E S E X E C U T E T H E A P P A S O N E O R M O R E S TA T E L E S S P R O C E S S E S
  • 51. P R O C E S S E S • Does the running of the release • Is stateless • Shares nothing with other processes • Uses single transaction only caches • Session db storage …over sticky sessions • Asset pre-compilation …over runtime calculation
  • 52. 7 . P O R T B I N D I N G E X P O R T S E R V I C E S V I A P O R T B I N D I N G
  • 53. P O R T B I N D I N G http://192.168.123.45 : 5555 The contract with the executive environment is binding to a port to serve requests.
  • 54. P O R T B I N D I N G E-Commerce System: http:// 192.168.123.45 : 5555 Booking System: http:// 23.123.65.48 : 3306
  • 55. 8 . C O N C U R R E N C Y S C A L E O U T V I A T H E P R O C E S S M O D E L
  • 56. C O N C U R R E N C Y • Scale out via the process model • Processes are first class citizens. • Assign work to a process type (web, db, worker etc.) • Can then handle own multiplexing • Processes don’t daemonize or write PID files. • Instead, use system process manager
  • 57. C O N C U R R E N C Y Scale out by running multiple processes of different types
  • 58. 9 . D I S P O S A B I L I T Y M A X I M I S E R O B U S T N E S S W I T H FA S T S TA R T U P A N D G R A C E F U L S H U T D O W N
  • 59. D I S P O S A B I L I T Y Processes are disposable • Start quickly • Shut down gracefully • Be robust against sudden death
  • 60. D I S P O S A B I L I T Y Example: Worker Process • Return the current job to the job queue • All jobs are reentrant • Or at least idempotent
  • 61. 1 0 . D E V P R O D PA R I T Y K E E P D E V E L O P M E N T, S TA G I N G , A N D P R O D U C T I O N A S S I M I L A R A S P O S S I B L E
  • 62. D E V P R O D PA R I T Y Gaps exist between development and production: • Time (days to push) • Personnel (dev vs ops) • Tools
  • 63. D E V P R O D PA R I T Y Need to shorten the gaps! • CI & deploy ASAP after writing code • Get Developers involved in Operations • Environments should be as similar as possible: • Eg. Resist the urge to use different backing services between development and production
  • 64. 1 1 . L O G S T R E A T L O G S A S E V E N T S T R E A M S
  • 65. L O G S Within your app treat logs as event streams • Don’t route or store logs in files • Stream to stout instead and be captured and handled by the environment
  • 66. 1 2 . A D M I N P R O C E S S E S R U N A D M I N / M A N A G E M E N T TA S K S A S O N E - O F F P R O C E S S E S
  • 67. A D M I N P R O C E S S E S One-off admin tasks include: • Database migrations • Console • One-time scripts
  • 68. A D M I N P R O C E S S E S • Run as separate process • Run against the same release • Admin code ships with app code
  • 69. T H E FA C T O R S 1. Codebase 2. Dependencies 3. Config 4. Backing Services 5. Build, Release Run 6. Processes 7. Port Binding 8. Concurrency 9. Disposability 10. Dev/Prod Parity 11. Logs 12. Admin Processes
  • 70. W H AT M I G H T T H I S A L L L O O K L I K E ?
  • 71.
  • 72. T H A N K Y O U Q U E S T I O N S ?