十二个因素的应用程序
在现代,软件通常作为服务交付:称为Web 应用程序或软件即服务。十二要素应用程序是一种构建软件即服务应用程序的方法:
- 使用声明式格式进行设置自动化,以最大限度地减少新开发人员加入项目的时间和成本;
- 与底层操作系统有一个干净的契约,在执行环境之间提供最大的可移植性;
- 适合部署在现代云平台上,无需服务器和系统管理;
- 最大限度地减少开发和生产之间的差异,实现持续部署以实现最大敏捷性;
- 并且可以在不对工具、架构或开发实践进行重大更改的情况下进行扩展。
十二因素方法可以应用于用任何编程语言编写的应用程序,并使用任何支持服务(数据库、队列、内存缓存等)的组合。
背景
本文档的贡献者直接参与了数百个应用程序的开发和部署,并通过我们在Heroku平台上的工作间接见证了数十万个应用程序的开发、运行和扩展。
本文档综合了我们对各种广泛使用的软件即服务应用程序的所有经验和观察。它是对应用程序开发理想实践的三角测量,特别关注应用程序随着时间的推移有机增长的动态、开发应用程序代码库的开发人员之间的协作动态以及避免软件侵蚀的成本。
我们的动机是提高对我们在现代应用程序开发中看到的一些系统性问题的认识,为讨论这些问题提供一个共享的词汇,并为这些问题提供一组广泛的概念解决方案,并附有术语。该格式的灵感来自 Martin Fowler 的书籍Patterns of Enterprise Application Architecture and Refactoring。
谁应该阅读这份文件?
任何构建作为服务运行的应用程序的开发人员。部署或管理此类应用程序的运维工程师。
The Twelve Factors
I. Codebase
One codebase tracked in revision control, many deploys
II. Dependencies
Explicitly declare and isolate dependencies
III. Config
Store config in the environment
IV. Backing services
Treat backing services as attached resources
V. Build, release, run
Strictly separate build and run stages
VI. Processes
Execute the app as one or more stateless processes
VII. Port binding
Export services via port binding
VIII. Concurrency
Scale out via the process model
IX. Disposability
Maximize robustness with fast startup and graceful shutdown
X. Dev/prod parity
Keep development, staging, and production as similar as possible
XI. Logs
Treat logs as event streams
XII. Admin processes
Run admin/management tasks as one-off processes
参考连接:
https://12factor.net/