Twelve-Factor App
Jun 12, 2018 #saas
The Twelve-Factor App is a methodology for building software-as-a-service apps that:
- It uses declarative formats for setup automation;
- It works with a clean contract with the operating system for greater portability between environments;
- It limits the differences between development and production, for continuous deployment;
- And it allows for scaling up and down without major changes.
From clearlytech:
1. Codebase
- One codebase tracked in revision control, many deploys
2. Dependencies
- Explicitly declare and isolate dependencies
3. Config
- Store config in the environment
4. Backing services
- Treat backing servies as attached resources
5. Build, ship (release), run
- Strictly separate build and run stages
6. Processes
- Execute the app as one or more stateless process
- Store intermediate data in a database or persistent key-value store
7. Port binding
- Export services via port binding
- Interfaces to the world using a simple URL
8. Concurrency
- Scale out via the process model
9. Disposability
- Maximize robustness with fast startup and graceful shutdown
10. Dev/prod parity
- Keep development, staging, and production as similar as possible
11. Logs
- Treat logs as event streams
12. Admin processes
- Run admin/management tasks as one-off processes
(Don't run updates directly against a database, don't run tasks from local terminal)
Questions:
1. Why not multiple processes in one container?
- Scaling containers horizontally is much easier;
- Easier to be reused for other purposes;
- Easier to troubleshoot;
- Patching/upgrades can be done in a more isolated and controlled manner;
- The `Docker` way: One Concern Per Container