- 1 基准代码(code base)
- 一份代码,多份部署
- 2 依赖(dependences)
- 显式声明依赖
- 3 配置(config)
- 配置存储于环境变量中
- 环境变量粒度足够小,相对独立
- 4 后端服务(backing services)
- 后端服务作为附加资源, 与第三方服务不区别对待
- 5 分离构建、发布、运行(build, release, run)
- 构建: 代码转化到可执行包
- 发布: 可执行包结合配置
- 运行: 选定发布版本,按计划启动
- 6 进程(process)
- 多个无状态进程运行
- 7 端口(port binding)
- 网络服务通过端口绑定提供服务
- 完全自我加载不依赖网络服务器
- 8 并发(concurrency)
- 进程作为一等公民
- 通过进程模型扩展并发
- 9 易处理(disposability)
- 进程快速启动、优雅终止可最大化健壮性
- 追求最小启动时间, 收到SIGTERM优雅终止,突然死亡时保持健壮
- 10 环境等价(dev/prod parity)
- 开发环境等价线上环境
- 11 日志(logs)
- 日志作为事件流
- 应用本身使用stdout事件流,不考虑存储输出流,不管理日志
- 12 管理进程(admin processes)
- 管理进程不常驻, 一次性运行
- 使用同样环境、代码版本、配置、依赖隔离, 避免同步问题
- 提供REPL shell使一次性脚本变简单