前置知识: 云计算

12要素应用

00:00
4 min Intermediate 2026/6/14

12-Factor App 方法论:构建云原生应用的十二个最佳实践详解。

1. 12-Factor 概述

1.1 起源

12-Factor App 由 Heroku 联合创始人 Adam Wiggins 于 2011 年提出,是构建 SaaS 应用的方法论。

1.2 核心目标

  • 可移植性
  • 云原生部署
  • 持续部署
  • 弹性伸缩

2. 十二个要素

2.1 Codebase — 代码库

一份代码库,多次部署。

一个应用 → 一个 Git 仓库
同一代码库 → 多个部署(dev/staging/prod)
不同应用 → 不同代码库
规则描述
单一代码库一个应用一个仓库
多次部署共享代码,不同配置
不共享代码不同应用不共享代码库

2.2 Dependencies — 依赖

显式声明并隔离依赖。

// package.json
{
  "dependencies": {
    "express": "^4.18.0",
    "lodash": "^4.17.21"
  }
}
规则描述
显式声明通过清单文件声明
隔离不依赖系统级包
锁定使用 lock 文件

2.3 Config — 配置

在环境中存储配置。

# 环境变量
export DATABASE_URL=postgres://user:pass@host:5432/db
export API_KEY=sk-xxx
export LOG_LEVEL=info
规则描述
不硬编码配置不写在代码中
环境变量通过 env 传入
严格分离代码与配置独立

配置判断标准:在不同部署间是否变化?变化 → 配置,不变 → 代码。

2.4 Backing Services — 后端服务

将后端服务当作附加资源。

应用 ←→ 数据库(可替换)
应用 ←→ 消息队列(可替换)
应用 ←→ 缓存(可替换)
规则描述
统一接口本地和远程服务无差别
可替换通过配置切换服务
松耦合不绑定特定实现

2.5 Build, Release, Run — 构建/发布/运行

严格分离构建和运行阶段。

构建:代码 → 可执行包
发布:可执行包 + 配置 → 发布版本
运行:启动发布版本
阶段输入输出
Build代码 + 依赖构建产物
Release构建 + 配置发布版本
Run发布版本运行进程

2.6 Processes — 进程

以无状态进程运行应用。

规则描述
无状态进程不存储状态
持久数据存入后端服务
可替换任何进程可随时停止

2.7 Port Binding — 端口绑定

通过端口绑定提供服务。

// 应用自包含 Web 服务器
const server = app.listen(process.env.PORT || 3000);
规则描述
自包含不依赖外部 Web 服务器
端口监听通过端口暴露服务
可寻址URL 即服务

2.8 Concurrency — 并发

通过进程模型进行扩展。

扩展方式:
- 横向扩展(增加进程数)
- 纵向扩展(增加资源)
进程类型描述
Web处理 HTTP 请求
Worker处理后台任务
Clock定时任务

2.9 Disposability — 易处理

快速启动和优雅终止。

规则描述
快速启动秒级启动
优雅关闭处理完当前请求退出
健壮性进程可随时被替换
// 优雅关闭
process.on('SIGTERM', () => {
  server.close(() => {
    process.exit(0);
  });
});

2.10 Dev/Prod Parity — 开发/生产一致

尽可能保持开发预发布生产环境一致。

差异传统12-Factor
时间数周小时
不同相同
工具不同相同

2.11 Logs — 日志

日志视为事件流

# 输出到 stdout/stderr
console.log("Request processed");
console.error("Database connection failed");
规则描述
管理日志应用不关心日志存储
事件流日志连续事件流
集中处理由外部系统收集

2.12 Admin Processes — 管理进程

管理任务作为一次性进程

# 一次性管理任务
rails db:migrate
python manage.py migrate
npx prisma migrate deploy
规则描述
一次性退出
同代码使用相同代码和配置
环境在相同环境中运

3. 现代扩展

3.1 超越 12-Factor

新要素描述
API FirstAPI 优先设计
Telemetry遥测与可观测性
Security安全左移
Container容器
CI/CD持续集成部署

3.2 与云原生的关系

12-Factor 是云原生的理论基础,CNCF 的很项目(Kubernetes、Istio)都是 12-Factor 的工程实现。

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式