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 → 数据库 → 缓存。

故障域对关键路径的影响体现在三个层面:

  1. 单域故障 → 整条路径中断:若关键路径的所有组件部署在同一故障域,该域失效将导致全链路不可用。
  2. 跨域延迟与一致性:跨故障域部署可提升韧性,但引入网络延迟与数据一致性开销。
  3. Terraform 编排复杂度:故障域数量增加时,资源声明、依赖管理、状态追踪的复杂度呈指数上升。
常见陷阱:仅将计算层跨域部署,但数据库或消息队列仍为单域架构——此时关键路径的故障域未真正解耦,单点故障依然存在。

1.4 故障域与关键路径关系图

下图展示了一个典型 IDP 关键路径在三个故障域中的分布情况:

IDP 关键路径跨故障域部署示意 故障域 A(AZ-1) Ingress Gateway 服务网格 Sidecar App Pod 主副本 故障域 B(AZ-2) App Pod 从副本 Redis 缓存主节点 消息队列(Kafka) 故障域 C(AZ-3) 数据库主节点(PG) 数据库从节点 Redis 缓存从节点 关键路径说明: 1. 请求从故障域 A 的 Ingress 进入,经服务网格路由到 App Pod 主副本。 2. App Pod 跨域调用故障域 B 的 Redis 主节点和故障域 C 的数据库主节点。 3. 任一故障域失效,关键路径仍可通过其他域的副本继续服务(需 Terraform 状态感知)。

1.5 故障域设计对 Terraform 追踪的启示

在 IDP 中,故障域设计直接影响 Terraform 资源声明的组织方式:

  • 模块化拆分:每个故障域应封装为独立的 Terraform 模块,便于隔离状态与变更。
  • 依赖图显式化:跨故障域的依赖关系(如 App Pod → 数据库)必须在 Terraform 的 depends_on 或 data 中显式声明。
  • 状态文件分区:建议每个故障域使用独立的 Terraform 状态文件(terraform.tfstate),避免全局锁竞争。
  • 样本抽检锚点:故障域边界是抽检的关键锚点——抽检应覆盖每个故障域内的核心资源及其跨域依赖。