Cloud Native Guide
12-Factor App Principles
| # | Factor | Key Point |
|---|---|---|
| 1 | Codebase | One codebase per app, tracked in Git; many deploys |
| 2 | Dependencies | Explicitly declare and isolate (package.json, go.mod) |
| 3 | Config | Store config in environment variables, not code |
| 4 | Backing Services | Treat as attached resources (DB, cache, queue) |
| 5 | Build/Release/Run | Strictly separate build, release, and run stages |
| 6 | Processes | Execute as stateless processes; persist data in backing services |
| 7 | Port Binding | Export services via port binding |
| 8 | Concurrency | Scale out via process model |
| 9 | Disposability | Fast startup, graceful shutdown |
| 10 | Dev/Prod Parity | Keep dev, staging, prod as similar as possible |
| 11 | Logs | Treat logs as event streams, write to stdout |
| 12 | Admin Processes | Run admin tasks as one-off processes |
Architecture Patterns
| Pattern | Description | Trade-offs |
|---|---|---|
| Microservices | Small, independently deployable services | + Scalability, - Complexity, distributed systems challenges |
| Containers (Docker) | Package app + deps in portable image | + Consistency, - Image size, registry management |
| Serverless (FaaS) | Functions triggered by events, no server management | + Low ops, - Cold start, vendor lock-in |
| Event-Driven | Services communicate via events/messages | + Loose coupling, - Eventual consistency, debug complexity |
| Service Mesh | Infrastructure layer for service-to-service communication | + Observability, mTLS, - Overhead, complexity |