• 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使一次性脚本变简单