题干与适用场景
一个全球服务已经把租户分配到多个 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。