Cloud Native Guide

12-Factor App Principles

#FactorKey Point
1CodebaseOne codebase per app, tracked in Git; many deploys
2DependenciesExplicitly declare and isolate (package.json, go.mod)
3ConfigStore config in environment variables, not code
4Backing ServicesTreat as attached resources (DB, cache, queue)
5Build/Release/RunStrictly separate build, release, and run stages
6ProcessesExecute as stateless processes; persist data in backing services
7Port BindingExport services via port binding
8ConcurrencyScale out via process model
9DisposabilityFast startup, graceful shutdown
10Dev/Prod ParityKeep dev, staging, prod as similar as possible
11LogsTreat logs as event streams, write to stdout
12Admin ProcessesRun admin tasks as one-off processes

Architecture Patterns

PatternDescriptionTrade-offs
MicroservicesSmall, 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-DrivenServices communicate via events/messages+ Loose coupling, - Eventual consistency, debug complexity
Service MeshInfrastructure layer for service-to-service communication+ Observability, mTLS, - Overhead, complexity