Skip to content

多机房与异地多活面试题:单元化、RPO/RTO、切换与脑裂

本页只放标准回答和原理跳转,完整架构、Demo与Runbook见多机房与异地多活主线

高频问题

问题标准回答原理页
高可用和灾备区别HA处理局部组件故障并快速恢复;灾备面向地域级、误操作和重大故障,强调数据恢复、备用环境、RPO/RTO和演练。概念
主备、双活、多活区别主备只有主站承接业务;双活两站同时服务;多活多个地域服务。双活不意味着两边可无约束写同一数据。概念
RPO和RTO是什么RPO是最多允许丢多少数据,RTO是最多允许停多久;必须由业务风险倒推并通过演练测量。RPO/RTO
单元化是什么按tenantId/userId等稳定路由键把用户固定到包含应用、缓存、DB分片和MQ的业务单元,让主要业务本地闭环。单元化
为什么不让所有数据全球多主WAN延迟和网络分区会引入提交延迟、冲突和可用性代价;应区分单元事实、全局强约束、配置和派生数据。数据分类
同步复制一定RPO为0吗要问同步到接收、持久化还是Apply,需要几个ACK,超时是否降级;配置和切换错误仍可能造成风险。复制确认点
读己之写怎么保证短时间粘到写单元、携带写位点等副本追平、核心状态读归属主站,或按业务流水返回处理中。读取一致性
什么是脑裂网络分区后旧主仍可写,同时备站又被提升,两边产生冲突事实。脑裂
为什么切换前必须Fencing仅promote新主不能阻止旧主继续写;必须在存储或数据库等副作用端拒绝旧Epoch,保证单写所有权。Fencing
DNS切换为什么不即时权威、递归、OS/JVM和应用都有缓存,已有HTTP/2/gRPC/WebSocket连接也不会因DNS变化自动迁移。全局入口
跨机房MQ要注意什么复制会延迟、重复和乱序;消费者用eventId、业务版本和状态机幂等,切换前后记录位点并核对缺口。MQ
两个机房的Redis锁能全球互斥吗不能。各地域状态独立或异步复制,核心正确性应依赖数据归属、唯一约束、状态机和Fencing。锁边界
灾备集群为什么任务会双跑两个K8s CronJob或调度器都可能触发;任务需要单元归属、业务幂等和Epoch,而不是只靠平时关闭备站开关。任务
故障切换完整流程多证据确认、冻结高风险变更、Fencing旧主、记录位点、评估缺口、提升依赖、小流量验证、分批放量和业务核对。切换
为什么回切比切换复杂新站已产生新事实,旧站可能有分叉数据;要以新主追平旧站、对账、恢复复制方向、小流量验证再分批回切。回切
怎样证明灾备有效从真实入口完成可核对业务,测量检测、Fencing、切流、数据缺口和回切,得到实际RPO/RTO。演练

场景题:主站网络中断是否立即提升备站

不能只因心跳断开立即提升。先确认是主站故障还是控制链路分区,并证明旧主不能继续写;完成网络、存储、账号或Epoch Fencing后,记录复制位点和数据缺口,再提升备站。否则两个站都可能接受写入形成脑裂。

项目回答模板

我们按tenantId把业务归属到单元,应用、缓存、数据库分片和MQ尽量本单元闭环;全局配置有版本复制,ES和报表可重建。故障切换先记录数据库/MQ位点并Fencing旧主,再提升灾备Epoch,小流量验证支付、订单和采集续传后分批放量。恢复后以新主为事实源追平旧站,按金额、状态、eventId和sequence对账后回切。RPO/RTO以演练结果为准。

本章小结

多活面试的重点不是“用了两个机房”,而是数据所有权、复制窗口、Fencing、切换和回切能否闭环。