许吉友 - 运维

这十二要素是由业界大神共同总结而出的,易用易懂。

1. 基准代码

即为每个 app 都要建立一个 Git 库。

2. 依赖

App 应使用适当的工具来进行依赖显示声明,如 Maven、Gradle、NPM、Go Mudule 等。

3. 配置

随发布环境而变化的配置(如生产、测试、开发环境),应使用操作系统的环境变量注入。

4. 后端服务

后端服务,如数据库、消息中间件等应视为附加资源, 并在所有环境中同等看待

5. 构建、发布、运行

构建一个可部署的app组件并将它与配置绑定,根据这个组件/配置的组合来启动一个或者多个进程,这两个阶段是严格分离的。

6. 进程

一个或者多个无状态进程之间不需要共享任何状态信息。任何需要的状态都置于后端服务(例如cache、对象存储等)

7. 端口绑定

该应用程序是独立的,并通过端口绑定(包括HTTP、负载均衡)导出任何/所有服务。

8. 并发

并发通常通过水平扩展应用程序进程来实现。

9. 易处理

通过快速启动和优雅的终止进程,可以最大程度上的实现鲁棒性。这些方面允许快速弹性缩放、部署更改和从崩溃中恢复。

10. 开发/生产等价

通过保持开发环境、测试环境和生产环境尽可能的相同来实现持续交付和部署。

11. 日志

不管理日志文件,将日志视为事件流,允许执行环境通过集中式服务收集、聚合、索引和分析事件。

12. 管理进程

行政或管理类任务(如数据库迁移),应该在与app长期运行的相同的环境中一次性完成。