Coursera 笔记

Module 01 · Introduction to Microservices

Twelve-Factor App Methodology十二要素应用方法论

Coursera ↗


 学习目标

通过本节课程,你将能够:

✅ 描述现代软件开发的特征
✅ 说明十二要素应用(Twelve-Factor App)的目标
✅ 识别并理解十二个要素,以及它们如何对应到软件交付生命周期的三个阶段:

🧱 编码阶段(Code)、🚀 部署阶段(Deploy)、⚙️ 运行阶段(Operate)


 现代软件开发的特征

在现代软件开发中,应用程序通常以 软件即服务(SaaS,Software-as-a-Service) 的形式交付。
这类软件通常:

  • 📡 集中托管(Centrally Hosted)
  • 🌍 通过互联网访问
  • 💻 以 Web 应用(Web App)形式呈现

举例来说:

当你在网上订餐、预订机票或在线报税时,你实际上就在使用 Web App。


 十二要素应用方法论简介

十二要素应用(Twelve-Factor App) 是专为 SaaS 类应用设计的一种开发规范。

⚠️ 虽然微服务(Microservices)不是实现十二要素的必要条件,但二者常常结合使用,以构建高可扩展、易维护的云原生应用。


 十二要素与软件交付生命周期的映射

阶段 对应要素 核心理念
Code(编码) 1️⃣ Codebase、2️⃣ Dependencies、5️⃣ Build/Release/Run、🔟 Dev/Prod Parity 代码管理与一致性
Deploy(部署) 3️⃣ Config、4️⃣ Backing Services、6️⃣ Processes、7️⃣ Port Binding 可移植性与配置独立性
Operate(运行) 8️⃣ Concurrency、9️⃣ Disposability、1️⃣1️⃣ Logs、1️⃣2️⃣ Admin Processes 稳定性、可扩展性与可观测性

 编码阶段(Code Phase)

Factor 1:Codebase(代码库)

  • 每个应用应有 单一代码库(one codebase per app),使用版本控制系统(如 Git)进行管理。
  • 一个代码库可对应多个部署实例(dev、test、prod 等),但其代码基线应保持一致。

Factor 2:Dependencies(依赖)

  • 应显式声明所有依赖,不能依赖于环境中已存在的工具或包。
  • 新开发者克隆代码后,无需手动安装未知依赖。

Factor 5:Build, Release, Run(构建、发布与运行)

  • 这三步应严格分离:
    • 🔨 Build:编译代码、收集依赖,生成可执行单元。
    • 🚀 Release:将构建版本与配置结合,生成可部署版本。
    • ▶️ Run:执行应用程序。

❗禁止在运行时更改代码,以免跳过构建阶段的验证。

Factor 10:Dev/Prod Parity(开发与生产环境一致性)

  • 尽量减少开发环境与生产环境的差异。
  • 保持一致的后端服务版本(例如在 dev 与 prod 均使用相同版本的 MySQL)。

这样可以提前发现问题,支持持续交付(Continuous Delivery)。


 部署阶段(Deploy Phase)

Factor 3:Config(配置)

  • 配置项包括数据库连接、凭证等。
  • 不应硬编码于代码中,应**通过环境变量(Environment Variables)**进行管理。

Factor 4:Backing Services(后端服务)

  • 不区分本地与第三方服务。
  • 所有服务均应通过 URL 或凭证访问。

💡 示例:数据库出现问题时,可替换新数据库而无需改动代码。

Factor 6:Processes(进程)

  • 应用由一个或多个无状态(Stateless)进程组成。
  • 所有持久化数据必须存储于外部服务(如数据库),而非内存或文件系统。

Factor 7:Port Binding(端口绑定)

  • Web 服务应自行绑定端口,而不是依赖外部注入的 Web 服务器。
  • 通常在代码中声明 Web 框架库(如 Flask、Express)来实现端口绑定。

绑定端口后,应用即可通过 URL 提供服务或作为其他应用的后端服务。


 运行阶段(Operate Phase)

Factor 8:Concurrency(并发)

  • 通过启动多个无状态进程实现水平扩展。
  • 每个进程互不依赖,可独立处理请求。

Factor 9:Disposability(可处置性)

  • 进程应快速启动、优雅退出。
  • 快速启动支持快速部署与弹性伸缩。

Factor 11:Logs(日志)

  • 应用不应负责日志的存储,而应将日志输出到标准输出(stdout)。
  • 执行环境负责收集与汇总日志流,并可转发至分析工具。

Factor 12:Admin Processes(管理进程)

  • 管理进程(如数据库迁移)应与主应用使用相同的代码库与配置。
  • 建议将管理脚本包含在代码中,保持同步性与一致性。

 总结回顾

你已经了解:

  • 🌍 现代软件多以 SaaS 形式交付
  • 🧩 十二要素方法论帮助开发者构建更高效、可扩展的 Web 应用
  • 🧱 十二要素分别对应 编码、部署与运行 三大阶段,形成完整的软件生命周期管理体系

✨ Twelve-Factor App = 高可维护 + 高可扩展 + 云原生友好!