12因素是云原生应用的设计理念,用于指导开发者充分利用云平台提供的优势开发出易维护、高可靠和便于扩展的应用程序。具体内容如下:

  1. Codebase: 基准代码,一份基准代码多分部署。用一个代码长裤进行版本控制和应用程序的多次部署,胚子、初始化数据都应该纳入版本控制进行管理,在统一的代码库中为代码配置、测试和部署脚本都建立独立的项目和模块
  2. Dependencies:依赖,显式生命依赖的关系。医用程序通过适当的工具(如:NPM、Cargo、Composer)隔离依赖,目的不依赖部署环境
  3. Config:配置,在环境中存储配置。通过操作系统的环境变量将配置信息或其他可能存在不同的信息应用到各个部署环境中
  4. Backing services:后端服务,把后端服务当做附加资源。数据库、消息队列、邮件发送服务器或缓存系统等均被当做附加资源在不同环境中被同等地调用,每个不同的后端服务都是一份资源
  5. Build、release、run:构建、发布、运行。严格分离构建和运行;基准代码转化为部署(非开发环境)需要如下三个阶段:
  • 构建阶段:是指将代码仓库转化为可执行包的过程。构建时会使用指定版本的代码,获取和打包依赖项,编译成二进制文件和资源文件
  • 发布阶段:会将构建的结果和当前部署环境所需的配置相结合,并能够立刻在运行环境中使用
  • 运行阶段:是指针对选定的发布版本在执行环境中启动一系列应用程序的进程
  1. Processes:进程,以一个或多个无状态的进程运行应用。在运行环境中,应用程序作为一个或多个无共享的无状态进程来执行,任何需要持久化的数据都要存储在后端服务内(如:缓存、对象存储等)
  2. Port bindings:端口绑定,通过端口绑定提供服务。具有12因素的应用程序能够实现完全自我加载,不依赖与任何网络服务就可以创建基于网络的服务。互联网应用可以通过端口绑定来提供服务并随时监听所有发送至该端口的请求。
  3. Concurrency:并发,通过进程模型进行扩展,一般而言,由水平向外扩展应用程序进程(必要时进程也可通过内部管理线程多路传输工作)来实现
  4. Dispossiability:易处理,快速启动和优雅终止可最大化健壮性。这包括了快速而有弹性的扩展、对变更的部署以及宕机恢复能力
  5. Dev/prod parity:开发与线上环境等价,尽可能的保持开发,预发布,线上环境的相似性来实现持续交付与部署
  6. Logs:日志,把日志当做事件流,允许执行环境通过集中式服务来收集、聚合、检索和分析日志,而非仅仅管理日志文件
  7. Admin Process:管理进程,后台管理任务当做一次进程执行。当环境等同于应用程序长时间运行的进程时,管理任务(如:数据库迁移)会被作为一次进行而执行