介绍
在现代时代,软件通常作为服务交付:称为Web应用程序,即软件即服务(SASS)。
十二要素应用程序是一种构建软件即服务应用程序的方法,该方法可以:
作用
使用声明性格式进行设置自动化,以最大程度地减少新开发人员加入项目的时间和成本;
与底层操作系统签订干净合同,在执行环境之间提供最大的可移植性;
适用于在现代云平台上进行部署,而无需服务器和系统管理;
最小化开发和生产之间的差异,实现连续部署以实现最大的敏捷性;
并且可以扩展而无需对工具,体系结构或开发实践进行重大更改。
十二因子方法可以应用于以任何编程语言编写的应用程序,并且可以使用支持服务(数据库,队列,内存缓存等)的任意组合。
背景
该文档的撰写者直接参与了数百个应用程序的开发和部署,并通过我们在Heroku平台上的工作间接见证了数十万个应用程序的开发,操作和扩展。
本文档综合了我们在野外的各种软件即服务应用程序中的所有经验和观察。
它是关于应用程序开发理想做法的三角剖分,尤其要注意应用程序随着时间的自然增长的动态变化,开发应用程序代码库的开发人员之间的协作动态变化以及避免软件侵蚀的成本。
我们的动机是提高人们对现代应用程序开发中遇到的一些系统性问题的认识,提供用于讨论这些问题的共享词汇,并为这些问题提供一系列广泛的概念性解决方案以及相应的术语。
该格式的灵感来自Martin Fowler的著作《企业应用程序体系结构和重构的模式》。
谁应该阅读此文档?
任何开发人员构建作为服务运行的应用程序的开发人员。
部署或管理此类应用程序的Ops工程师。
十二个因素
一,代码库
在修订控制中跟踪一个代码库,许多部署
二。 依存关系
明确声明和隔离依赖项
三, 设定档
将配置存储在环境中
IV。 支持服务
将支持服务视为附加资源
五,构建,发布,运行
严格分开的构建和运行阶段
VI。 工艺流程
将应用程序作为一个或多个无状态进程执行
七。 端口绑定
通过端口绑定导出服务
八。 并发
通过流程模型进行横向扩展
九。 一次性性
通过快速启动和正常关闭最大程度地提高鲁棒性
X.开发/产品奇偶校验
保持开发,登台和生产尽可能相似
十一。 日志
将日志视为事件流
十二。 管理流程
一次性运行管理/管理任务
参考资料
《Docker:容器与容器云》