The Twelve-Factor App
如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor 为构建如下的 SaaS 应用提供了方法论。这套理论适用于任意语言和后端服务(数据库. 消息队列. 缓存等)开发的应用程序。
一. 概述总结:
- 使用标准化流程自动配置,降低加入成本;
- 保证最大的系统可移植性 ;
- 部署在云计算平台,节省资源;
- 将开发环境和生产环境的差异降至最低,基于 **CI/CD **实施敏捷开发;
- 保证在最低成改动本下实现高扩展性;
二. 12个因素:
- 基准代码:使用版本控制系统管理代码,每个应用只对应一份基准代码,但可以同时进行多份部署(本地,线上)。
- 依赖:应用需要的所有依赖一定需要通过 依赖清单 ,确切完整的声明出来。
- 配置:配置文件在各部署环境间存在大幅差异,但配置项却应该完全一致。推荐将应用的配置存储于 环境变量 中。
- 后端服务:应用与后端服务应该保持“松耦合”,后端服务(数据库,消息队列等)可以 随时替换,而不用修改应用本身的代码。
- 构建,发布,运行:按照特定的流程进行发布,整个发布的流程不可逆。发布版本号不可逆。
- 进程:以一个或多个无状态进程运行应用,不可使用粘性 session(将用户 session 中的数据缓存至某进程的内存中,并将同一用户的后续请求路由到同一个进程)。需要持久化的数据放到后端服务中。
- 端口绑定:应用完全自我加载 而不依赖于任何网络服务器就可以创建一个面向网络的服务。互联网应用 通过端口绑定来提供服务 ,并监听发送至该端口的请求。
- 并发:进程结构基于 Unix 守护进程模型,进程间无共享,水平分区。意味着添加并发会变得简单而稳妥。这些进程的类型以及每个类型中进程的数量就被称作 进程构成。
- 易处理:应用应该是可以被 快速启动和停止 的。同时在面对突然死亡时 保持健壮。
- 开发环境与线上环境等价:应用想要做到持续部署(CD)就必须 缩小本地与线上环境差异,应用的开发人员应该反对在不同环境间使用不同的后端服务。
- 日志:将日志输出 当作事件流来处理,而不是直接存入文档。比如将日志输入到日志索引及分析系统等。
- 管理进程:后台管理任务(定时脚本等)当作一次性进程运行,使用同“常驻进程”一样的环境和配置。
评论 | Comments