代表性面试主题

系统设计面试:如何验证 Cell-Based Architecture 的故障隔离?

系统设计困难
Offer.cc 编辑团队发布 更新

题干

一个系统已经按租户拆成多个 cell,却仍在发布和依赖故障时发生全局中断。你如何审计并验证这些 cell 是否形成真实的故障隔离边界?

题干与适用场景

一个全球服务已经把租户分配到多个 cell,但单次错误发布、共享依赖故障或容量耗尽仍会造成大范围中断。请审计现有架构,找出会跨 cell 扩散的路径,并设计可重复的故障注入与恢复验收,证明每个 cell 是真实的故障隔离边界。

面试官考察点

  • 是否把 cell 定义为可独立运行、扩展和回滚的完整副本。
  • 是否能解释故障半径、路由映射和新用户分配的一致性。
  • 是否能处理共享控制面、跨 cell 数据、容量倾斜和热点迁移。
  • 是否能把渐进发布、指标门禁和恢复演练落到具体流程。

回答前需要澄清的问题

  • 隔离键是用户、租户、地域还是业务分区?跨区访问是否允许?
  • 哪些数据必须全局一致,哪些数据可以 cell 内最终一致?
  • 目标是限制单次部署影响,还是应对区域级灾难?
  • 负载是否可预测,热点租户能否迁移,迁移期间如何保证幂等?

30 秒回答框架

我会先画出每个 cell 的计算、缓存、队列、数据和控制面依赖,标记所有共享路径;再为路由、容量、发布和跨 cell 任务定义隔离不变量。随后分别注入单 cell 过载、坏版本、数据依赖中断和控制面失联,确认健康 cell 的错误率与延迟不越过门槛。任何会扩散的共享依赖都要拆分、限额或提供本地快照降级,最后用恢复时间、受影响租户比例和演练证据判定隔离是否成立。

分步骤深入解答

1. Cell 的边界

Cell 是可独立部署、扩展和恢复的系统单元,通常包含服务实例、缓存、队列和专属数据分片。共享的 DNS、身份或配置服务应尽量保持低权限、低耦合,并定义它们故障时的降级行为。

2. 路由与映射

路由层根据用户或租户键查找映射,把请求转发到目标 cell。映射需要版本、校验和过期策略;迁移时先写入新映射,再等待旧请求排空,避免同一实体同时写入两个 cell。

3. 数据隔离

每个 cell 拥有本地写入边界,跨 cell 查询优先使用异步复制的只读投影。全局唯一约束应放到专门的协调服务,或改成分区内唯一加最终合并,避免把所有写入重新集中到单点。

4. 容量与热点

为每个 cell 设置请求、队列、数据库连接和存储配额,控制单 cell 的最大爆炸半径。监控租户分布和资源水位,热点租户可迁移到空闲 cell,但迁移必须支持双读、单写和可重放事件。

5. 共享控制面风险

控制面负责映射、版本和编排,不应承载所有业务数据。控制面不可用时,路由器应使用带 TTL 的本地快照继续服务;快照过期后只允许安全的读流量或返回可重试错误。

6. 发布与回滚

先选一个 cell 运行新版本,比较基线 cell 的错误率、尾延迟、资源饱和度和业务指标。达到门槛后按批次扩散;任何 cell 出现回归就暂停扩散并回滚该版本,不把健康 cell 一起降级。

7. 跨 cell 操作

跨 cell 报表、批处理和账户迁移应通过任务编排器执行,使用幂等键、租约和进度检查点。任务失败时只重试未完成分片,并把部分完成状态显式暴露给调用方。

8. 灾难恢复与演练

为每个 cell 备份数据和配置,定义恢复点与恢复时间目标。定期演练单 cell 隔离、控制面失联、区域故障和映射损坏,验证流量转移、数据恢复和回滚脚本,而不只依赖理论上的冗余。

高质量示范回答

“我不会因为服务被复制成多个 cell 就直接认定隔离成立。我先按租户请求画出完整依赖图,检查数据库、队列、缓存、身份、配置、路由和发布流水线是否仍共享故障域。然后定义三项不变量:单 cell 资源耗尽不能挤占其他 cell,坏版本只能进入一个发布批次,控制面短暂失联时数据面仍可用本地映射继续服务。

验证时,我会在预发布或隔离生产演练中依次注入单 cell 过载、数据库不可用、错误配置和路由目录失联,观察健康 cell 的错误率、P99 延迟与容量是否保持基线。若共享依赖会扩散故障,就按租户分区、设置独立配额,或使用带版本和 TTL 的本地快照降级。恢复阶段验证流量隔离、数据完整性和映射回滚,并把受影响租户比例、恢复时间和跨 cell 指标作为发布门禁。这样得到的是可重复的隔离证据,而不是架构图上的 cell 标签。”

常见错误

  • 只复制无状态计算层,却继续共享数据库、队列或连接池。
  • 只验证故障 cell 能否恢复,没有验证健康 cell 的错误率和尾延迟。
  • 把随机分流当作稳定租户映射,导致同一租户跨 cell 写入。
  • 演练只覆盖基础设施宕机,没有覆盖错误发布、热点租户和控制面失联。

追问及应对

如何判断共享控制面是否会破坏隔离?

让控制面在演练中失联,验证路由器能否使用带版本和 TTL 的本地映射继续服务;快照过期后必须进入明确的安全降级状态。

如何设定隔离验收门槛?

同时设定健康 cell 的错误率、P99 延迟、饱和度和受影响租户比例上限,并记录恢复时间。只看故障 cell 自身恢复不足以证明隔离。

Cell 数量越多,隔离一定越好吗?

不一定。Cell 越小,理论故障半径越低,但容量碎片、发布批次和跨 cell 运维成本会上升。应从目标受影响租户比例、单 cell 容量和可承受运维成本反推。

跨 cell 报表会不会重新引入共享故障?

会,因此报表应读取异步生成的只读投影,并设置独立配额与降级;不能让在线请求同步扇出到所有 cell。

公开来源

同类题目

相关面试工具

用 Solve 整理系统设计回答

从澄清需求开始,展开规模、架构、组件选择和取舍。

查看工具