Module 01 · Introduction to Microservices
Twelve-Factor App Methodology十二要素应用方法论
学习目标
通过本节课程,你将能够:
✅ 描述现代软件开发的特征
✅ 说明十二要素应用(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 = 高可维护 + 高可扩展 + 云原生友好!