1. IDP 故障域概念
1.1 故障域定义
在内部开发者平台(IDP)中,故障域(Failure Domain) 是指一组共享单一故障点的计算、存储或网络资源集合。当该故障点失效时,集合内的所有组件将同时不可用。故障域是 IDP 基础设施韧性设计的核心抽象单元,决定了平台在遭遇物理或逻辑故障时的爆炸半径。
核心原则:故障域边界越细,爆炸半径越小;但跨域编排的复杂度与成本也越高。
1.2 故障域与可用区的关系
可用区(Availability Zone, AZ)是云提供商对故障域的标准实现。下表梳理了二者的映射关系与关键差异:
| 维度 | 故障域(Failure Domain) | 可用区(Availability Zone) |
|---|---|---|
| 定义层级 | 逻辑抽象,可跨物理或逻辑边界 | 云厂商定义的物理隔离单元 |
| 故障隔离 | 单点电源、网络、冷却或软件故障 | 独立数据中心或独立电力/网络区域 |
| 包含关系 | 一个可用区可包含多个故障域 | 一个区域(Region)包含多个可用区 |
| IDP 视角 | 开发者定义的工作负载分布边界 | 云资源调度的最小隔离单位 |
| 典型粒度 | 机架、交换机、电源域、K8s 节点组 | AZ-1 / AZ-2 / AZ-3 |
实践要点:在 Terraform 中,故障域通常通过
availability_zone 参数或自定义 failure_domain 标签实现。IDP 平台应至少跨 3 个可用区部署关键控制面组件。
1.3 故障域对关键路径的影响
关键路径(Critical Path)是指 IDP 中用户请求必须经过的组件链,例如:
Ingress → 服务网格 → 应用 Pod → 数据库 → 缓存。
故障域对关键路径的影响体现在三个层面:
- 单域故障 → 整条路径中断:若关键路径的所有组件部署在同一故障域,该域失效将导致全链路不可用。
- 跨域延迟与一致性:跨故障域部署可提升韧性,但引入网络延迟与数据一致性开销。
- Terraform 编排复杂度:故障域数量增加时,资源声明、依赖管理、状态追踪的复杂度呈指数上升。
常见陷阱:仅将计算层跨域部署,但数据库或消息队列仍为单域架构——此时关键路径的故障域未真正解耦,单点故障依然存在。
1.4 故障域与关键路径关系图
下图展示了一个典型 IDP 关键路径在三个故障域中的分布情况:
1.5 故障域设计对 Terraform 追踪的启示
在 IDP 中,故障域设计直接影响 Terraform 资源声明的组织方式:
- 模块化拆分:每个故障域应封装为独立的 Terraform 模块,便于隔离状态与变更。
- 依赖图显式化:跨故障域的依赖关系(如 App Pod → 数据库)必须在 Terraform 的
depends_on或data中显式声明。 - 状态文件分区:建议每个故障域使用独立的 Terraform 状态文件(
terraform.tfstate),避免全局锁竞争。 - 样本抽检锚点:故障域边界是抽检的关键锚点——抽检应覆盖每个故障域内的核心资源及其跨域依赖。