介绍

在现代,软件通常作为服务交付:称为Web 应用程序软件即服务。十二要素应用程序是一种构建软件即服务应用程序的方法:

  • 使用声明式格式进行设置自动化,以最大限度地减少新开发人员加入项目的时间和成本;
  • 与底层操作系统有一个干净的契约,在执行环境之间提供最大的可移植性
  • 适合部署在现代云平台上,无需服务器和系统管理;
  • 最大限度地减少开发和生产之间的差异,实现持续部署以实现最大敏捷性;
  • 并且可以不对工具、架构或开发实践进行重大更改的情况下进行扩展

十二因素方法可以应用于用任何编程语言编写的应用程序,并使用任何支持服务(数据库、队列、内存缓存等)的组合。

背景

本文档的贡献者直接参与了数百个应用程序的开发和部署,并通过我们在Heroku平台上的工作间接见证了数十万个应用程序的开发、运行和扩展。
本文档综合了我们对各种软件即服务应用程序的所有经验和观察结果。它是对应用程序开发理想实践的三角测量,特别关注应用程序随着时间的推移有机增长的动态、开发应用程序代码库的开发人员之间的协作动态以及避免软件侵蚀的成本
我们的动机是提高对我们在现代应用程序开发中看到的一些系统性问题的认识,为讨论这些问题提供一个共享的词汇,并为这些问题提供一组广泛的概念解决方案,并附有术语。该格式的灵感来自 Martin Fowler 的书籍Patterns of Enterprise Application Architecture and Refactoring

谁应该阅读这份文件?

任何构建作为服务运行的应用程序的开发人员。部署或管理此类应用程序的运维工程师。

十二个因素

一、代码库

在修订控制中跟踪一个代码库,许多部署

二、依赖关系

显式声明和隔离依赖

三、配置

在环境中存储配置

四、后备服务

将后备服务视为附加资源

五、构建、发布、运行

严格分离构建和运行阶段

六、流程

将应用作为一个或多个无状态进程执行

七、端口绑定

通过端口绑定导出服务

八、并发

通过流程模型向外扩展

九、一次性

通过快速启动和正常关闭最大限度地提高稳健性

十、开发/产品平价

使开发、分阶段和生产尽可能相似

十一、日志

将日志视为事件流

十二、管理流程

将管理/管理任务作为一次性流程运行

参考

https://12factor.net/