12 要素 12 Factor

I. 基准代码

一份基准代码,多份部署

一个应用,一个基准代码git仓库,多个环境版本部署(prod,staging,develop)

II. 依赖

显式声明依赖关系

docker的dockerfile,php的composer.json,python的requirements.txt等依赖关系声明

III. 配置

在环境中存储配置

每个环境都有对应的env文件配置

IV. 后端服务

把后端服务当作附加资源

数据库(MySQL,CouchDB),消息/队列系统(RabbitMQ,Beanstalkd),SMTP 邮件发送服务(Postfix),以及缓存系统(Memcached)

V. 构建,发布,运行

严格分离构建和运行

  • 构建阶段  是指将代码仓库转化为可执行包的过程。构建时会使用指定版本的代码,获取和打包 依赖项,编译成二进制文件和资源文件
  • 发布阶段  配置 会将构建的结果和当前部署所需 配置 相结合,并能够立刻在运行环境中投入使用 
  • 运行阶段 (或者说“运行时”)是指针对选定的发布版本,在执行环境中启动一系列应用程序 进程



VI. 进程

以一个或多个无状态进程运行应用

12-Factor 应用的进程必须无状态且 无共享 。 任何需要持久化的数据都要存储在 后端服务 内,比如数据库

VII. 端口绑定

通过端口绑定提供服务

通过端口绑定来提供服务 ,并监听发送至该端口的请求

VIII. 并发

通过进程模型进行扩展

将不同的工作分配给不同的 进程类型 ,比如web任务,和常驻内存的worker,开发者可以根据类型进行构建扩容

IX. 易处理

快速启动和优雅终止可最大化健壮性

12-Factor 进程 无状态且 无共享,可以瞬间开启或停止。

X. 开发环境与线上环境等价

尽可能的保持开发,预发布,线上环境相同

12-Factor 应用的开发人员应该反对在不同环境间使用不同的后端服务,本地环境,测试环境,预发布环境与线上环境应尽可能的接近

XI. 日志

把日志当作事件流

通过统一的日志收集系统,日志进入大数据处理系统,索引系统,时序数据库进行存储并最后归档

XII. 管理进程

后台管理任务当作一次性进程运行

执行一些管理或维护应用的一次性任务,一次性管理进程应该和正常的 常驻进程 使用同样的环境,如项目中的Command命令

可参考:

The Twelve-Factor App (简体中文)

12 Factor App in Action (12 要素应用实战) - 知乎

你可能感兴趣的:(k8s)