云原生架构指南
12 因素应用原则
| # | 因素 | 关键点 |
|---|---|---|
| 1 | 基准代码 | 每个应用一个代码库,用 Git 跟踪;多次部署 |
| 2 | 依赖 | 显式声明并隔离(package.json、go.mod) |
| 3 | 配置 | 将配置存储在环境变量中,而非代码 |
| 4 | 后端服务 | 作为附加资源对待(数据库、缓存、队列) |
| 5 | 构建/发布/运行 | 严格分离构建、发布和运行阶段 |
| 6 | 进程 | 作为无状态进程执行;数据持久化到后端服务 |
| 7 | 端口绑定 | 通过端口绑定对外提供服务 |
| 8 | 并发 | 通过进程模型横向扩展 |
| 9 | 可丢弃性 | 快速启动,优雅关机 |
| 10 | 开发/生产对等 | 尽量保持开发、预发布、生产环境一致 |
| 11 | 日志 | 将日志视为事件流,写入标准输出 |
| 12 | 管理进程 | 以一次性进程运行管理任务 |
架构模式
| 模式 | 描述 | 权衡 |
|---|---|---|
| 微服务 | 小型、可独立部署的服务 | + 可扩展性,- 复杂度,分布式系统挑战 |
| 容器(Docker) | 将应用+依赖打包为可移植镜像 | + 一致性,- 镜像大小,仓库管理 |
| 无服务器(FaaS) | 事件触发的函数,无需管理服务器 | + 低运维,- 冷启动,供应商锁定 |
| 事件驱动 | 服务通过事件/消息通信 | + 松耦合,- 最终一致性,调试复杂 |
| 服务网格 | 服务间通信的基础设施层 | + 可观测性、mTLS,- 开销、复杂度 |