跳到主要内容

控制面与数据面的故障边界

控制面计算并分发实例、路由和策略,数据面使用已接收的状态处理真实请求。两者分离后,控制面短暂故障不应立刻中断已有流量,但数据面必须知道旧配置可以使用多久,以及何时应该拒绝风险操作。

1. 控制面负责生成期望状态

注册中心、配置中心、编排控制器和 service mesh 管理服务都属于控制面。它们维护资源版本、校验配置、计算目标实例或路由,并把结果下发给代理和应用。

控制面通常不经过每一个业务请求。若请求必须同步查询控制面才能路由,控制面延迟就会直接进入数据面,故障半径也会显著扩大。

2. 数据面执行本地决策

网关、sidecar、负载均衡器和服务进程根据本地实例表、路由、证书与策略转发请求。数据面需要低延迟和高可用,因此应把已验证配置保存在内存或本地持久快照中。

控制面连接断开时,数据面通常继续使用 last known good configuration。它还可以根据主动或被动健康检查临时调整实例,但不应自行创造无法与控制面合并的永久配置。

3. 配置分发需要确认和版本

一次安全更新包含:

  1. 控制面生成不可变版本。
  2. 数据面接收完整或增量资源。
  3. 在本地完成语法、引用和能力校验。
  4. 成功后原子切换并回报 ACK。
  5. 失败时 NACK,并继续使用旧版本。

控制面不能仅因为消息已发送,就认为所有实例已经生效。发布状态应显示版本分布、ACK/NACK、离线实例和收敛时间。

4. 控制面故障时优先保持已有流量

当注册或配置服务不可用时,可以保留已有实例和路由,并暂停高风险变更。与此同时:

  • 告警配置年龄和控制面连接状态。
  • 继续执行本地超时、限流和熔断。
  • 对已知失败实例做短期被动摘除。
  • 禁止依赖最新授权或撤销状态的操作进入不安全模式。

通用路由通常适合 fail-open 到旧配置;证书吊销、紧急封禁等安全策略可能需要 fail-closed。应按资源类型定义,而不是给整个系统一个统一答案。

5. 数据面故障由本地容量和隔离处理

控制面健康不能防止网关线程池、连接池或单个代理进程过载。数据面要有连接数、并发请求、pending queue、重试和内存上限,并通过水平扩展和故障域隔离降低单点影响。

中心化限流服务不可达时,本地限流仍应提供最低保护。中心熔断状态传播也可能滞后,每个数据面需要根据自身观察快速限制异常上游。

6. 陈旧配置需要明确有效边界

最后有效配置不能无限使用。证书会过期,实例地址会回收,租户权限和路由也会变化。每类资源应定义:

  • 版本产生时间和最大陈旧时长。
  • 到期后继续服务、降级还是拒绝。
  • 是否允许控制面下发 TTL。
  • 重新连接后如何获得完整快照。
  • 本地持久化是否包含敏感信息。

TTL 到期直接删除资源也可能造成全量中断。使用前要确认“资源不存在”确实比继续使用旧版本安全。

7. 启动过程是特殊故障点

运行中的实例可以使用旧快照,新实例首次启动时却可能没有任何配置。可以随镜像提供最小 bootstrap,或从本地持久快照恢复,再连接控制面更新。

bootstrap 只包含建立连接和最低安全策略,不能长期承载完整业务配置。新实例若无法确认路由与凭据有效,应保持未就绪,不能为了扩容速度盲目接流量。

8. 演练分别切断两类依赖

应单独演练控制面断连、错误配置、版本乱序、数据面过载和局部代理故障。观察已有请求是否继续、多久开始陈旧告警、新实例能否启动、错误更新是否被拒绝,以及控制面恢复后多久收敛。

只有一起关闭全部组件,无法确认真正的故障边界。

9. 常见问题

9.1 控制面高可用后,数据面还需要本地缓存吗

需要。网络分区、发布缺陷和控制面升级仍可能让单个数据面暂时无法访问它。本地快照还避免每次请求增加一次远程依赖。

9.2 数据面可以永久使用最后配置吗

不能一概而论。普通路由可以较长时间使用,证书、撤销列表和权限策略则有安全期限。每类资源都要给出最大陈旧时间和到期行为。

10. 面试题

10.1 治理控制面故障时,为什么已有调用仍应继续

出现公司:美团、阿里巴巴

考察重点

  • 控制面生成状态与数据面执行状态的分工。
  • 最后有效配置、版本 ACK/NACK 和陈旧边界。
  • 启动、运行和安全策略的不同降级方式。

相关内容:第 1 节“控制面负责生成期望状态”至第 8 节“演练分别切断两类依赖”。

参考回答

控制面负责计算并分发实例、路由和策略,数据面在本地执行请求转发。运行中的数据面应保留通过校验的最后有效配置,所以控制面短暂断连时,已有流量继续工作,并结合本地健康检查、超时和限流处理变化;直接清空状态会扩大故障。

配置要带版本,数据面校验后原子切换并 ACK,失败则 NACK 并保留旧版本。不同资源还要定义最大陈旧时长和到期行为:普通路由可以继续,过期证书或安全撤销策略可能必须拒绝。首次启动没有快照时则应使用最小 bootstrap,并在无法确认配置有效时保持未就绪。