1. 故障域概念

1.1 故障域定义

故障域(Failure Domain) 是指集群中一组共享同一故障风险边界的资源集合。当该边界内的任意组件(如电源、网络交换机、物理服务器、机架或数据中心)发生故障时,边界内的所有资源都会同时受到影响。故障域的本质是 故障传播的物理或逻辑隔离边界。

核心特征: 故障域内的资源具有 共因失效(Common Cause Failure) 特性——单一故障事件会导致域内全部或大部分服务实例不可用。

在分布式系统中,故障域通常按粒度从大到小划分为:

  • 区域级故障域:整个数据中心、可用区(Availability Zone)或地理区域。
  • 机架级故障域:共享同一电源分配单元(PDU)或 ToR(Top of Rack)交换机的服务器集合。
  • 节点级故障域:单台物理服务器或虚拟机。
  • 进程级故障域:单个容器、Pod 或操作系统进程。

1.2 故障域与可用区的关系

可用区(Availability Zone, AZ)是云服务商对故障域的一种标准化封装。下表清晰对比了两者的核心差异:

对比维度 故障域(Failure Domain) 可用区(Availability Zone)
定义粒度 任意级别的故障隔离边界(机架/节点/进程) 通常对应一个或多个数据中心,是云厂商定义的逻辑单元
故障隔离范围 由用户自行定义,可细可粗 AZ 之间物理隔离(独立电力、网络、制冷)
典型延迟 取决于层级,机架内 < 1ms,跨 AZ 1~5ms 跨 AZ 通常 1~2ms,跨 Region > 10ms
用户控制力 完全可控(通过标签、拓扑约束自定义) 由云平台预定义,用户只能选择部署到哪些 AZ
典型用途 精细化调度、成本优化、故障隔离策略 高可用部署、跨 AZ 容灾、SLA 保障
实践要点: 在 Kubernetes 集群中,topology.kubernetes.io/zone 标签通常映射到云厂商的可用区,而 topology.kubernetes.io/region 映射到地理区域。用户还可以通过自定义标签(如 failure-domain.beta.kubernetes.io/rack)定义更细粒度的故障域。

1.3 故障域在集群中的重要性

故障域划分直接决定了集群的 可用性上限 和 故障恢复速度。以下是故障域在集群架构中的三个关键作用:

  1. 避免单点故障(SPOF):将副本或分片分散到不同故障域,确保单个故障域失效时服务仍可用。
  2. 控制爆炸半径:限制故障影响范围,防止级联故障扩散到整个集群。
  3. 指导调度决策:调度器根据故障域约束将 Pod 或任务均匀分布,实现资源与风险的平衡。

下图展示了集群中不同粒度故障域的层级关系与故障传播路径:

集群故障域层级与故障传播示意图 区域级故障域(Region / AZ) 共享电力、网络、制冷基础设施 | 故障影响:整个数据中心或可用区 示例:AWS us-east-1a、阿里云 cn-hangzhou-b 机架级故障域(Rack) 共享 ToR 交换机、PDU | 故障影响:整机架服务器离线 示例:rack-01、rack-02 节点级故障域(Node) 单台物理机或虚拟机 | 故障影响:节点上所有 Pod 不可用 进程级故障域(Pod / Container) 单个容器或进程 | 故障影响:仅该进程不可用 故障向上传播 故障向上传播 故障向上传播 故障域粒度越细 爆炸半径越小,调度越灵活
常见误区: 许多团队将 Pod 副本部署到同一可用区的不同节点上,认为已经实现了高可用。但实际上,如果该可用区的网络或电力整体故障,所有副本仍会同时失效。真正的故障域隔离必须跨越可用区或机架层级。