想象你是张老板,在市中心开了一家网红奶茶店,生意火爆。你准备在城东再开一家分店。你心里很清楚:主店万一着了火、被停水停电,顾客会立刻涌向分店——但分店若招牌还没挂、原料还没备、账本还没同步,你还能撑住吗?容灾设计,就是回答这一连串“万一”的问题。它不是“买几台备用服务器”那么简单,而是一整套关于如何扛住灾难的系统工程。在这个篇章里,我们要解决三个关键问题:灾难发生时,数据能丢多少(RPO)?业务能停多久(RTO)?用怎样的架构来承接(主备、双活还是多活)?数据怎么同步、故障怎么切换、演练怎么验证、成本怎么控制?这就像张老板决定:分店要保持什么状态的经营、账本怎么抄送、应急预案怎么演练、备多少料花多少钱。把这些想透了,你就能在系统设计面试中交出漂亮的答卷。
系统设计面试中,容灾设计是高频考点。掌握 RTO/RPO 权衡、架构选型与故障切换逻辑,能直接证明你具备大型系统的全局观,是通往高级工程师与架构师的关键能力。
目录
可视化演示
动态演示容灾设计系统设计的核心机制,通过入门/进阶/实战/优化四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
容灾设计系统设计:容灾核心 容灾核心指标RTO与RPO 主备模式与双活模式对比 核心机制可视化 容灾设计系统设计整体架构与关键组件
容灾核心指标:顾客能等多久,配方能丢多少
张老板最关心两件事:一是主店着火后,顾客在门口排队最多能等多久?等半小时就散了,等两小时就彻底不来了。二是做奶茶的独门配方和会员充值记录,能承受多大的损失?配方丢了可以重写但味道变了,充值记录丢了顾客就要闹退款。这两个问题,正是容灾设计的灵魂——RTO 和 RPO。RTO(Recovery Time Objective)是恢复时间目标,即灾难发生后业务必须恢复的最长时间上限;RPO(Recovery Point Objective)是恢复点目标,即灾难发生时最多允许丢失多少数据。通俗讲,RTO 回答“要停多久”,RPO 回答“要丢多少”。
理解了这两个指标,再看系统可用性就顺理成章了。可用性(Availability)是对系统整体“健康时间占比”的度量,它和 RTO/RPO 共同构成容灾设计的量化目标。RTO 越短,意味着 MTTR(平均修复时间)越短,系统需要投入更强的自动切换和备用资源;RPO 越短,意味着数据复制越频繁、同步链路越可靠。在面试中,把这三个指标串起来讲,面试官能立刻看出你有量化思维,而不是只会背概念。
1. 分子 MTBF:平均无故障时间,衡量系统“健康期”的平均长度。设备越可靠、软件越健壮,这个值越大。
2. 分母 MTBF+MTTR:一个完整周期的总时间等于正常时间加上故障时间。故障修复越快,MTTR 越小。
3. 整体计算:用正常时长除以总周期,得到正常运行所占比例,再乘以 100 转为百分比。
回到奶茶店的账本:RTO 是顾客排队等待的心理底线,RPO 是配方和账本可接受的损失边界。两者一旦确定,整个容灾架构的方向就定了。面试中不要急于抛方案,先量化这两个数字,后面所有设计都会显得有理有据。
架构模式选型:分店该保持什么经营状态
确定了“能等多久、能丢多少”,张老板就要决定:分店平时保持什么状态?如果分店天天开门营业、随时能顶替主店,那是“热备”;如果白天开门晚上关门,那是“温备”;如果平时大门紧锁、只有主店出事了才连夜布置开业,那是“冷备”。在系统设计里,这三种状态分别对应主备、双活、多活等架构模式的关键差异。主备模式(Active-Standby)下,主节点负责全部读写流量,备节点实时同步数据但不对外服务;一旦主节点故障,备节点接管。双活模式(Active-Active)下,两个节点同时对外服务,流量负载均衡,资源利用率高。多活模式(Multi-Active)则是多个节点分布在多个地域,每个节点都能独立服务。
架构选型不是越高级越好,而是匹配业务目标。金融支付要求 RPO=0,只能选同步复制下的主备或双活;内容平台容忍分钟级不一致,用异地多活换取低延迟;创业公司预算有限,冷备加定期备份就够了。选型时要画一张“需求-代价”对照表:RTO/RPO 要求越严,架构复杂度与投入成本就越高。
1. C主(主节点成本):核心服务持续运行所需的服务器、存储、带宽和运维投入,这是无论是否做容灾都要花的钱。
2. N 与 C备(备节点数量与单价):按冗余策略决定,例如 1+1 部署时 N=1。备节点硬件规格通常与主节点相当。
3. α(运行系数):体现备节点保持的“热度”。冷备几乎不耗电不耗人,α 接近 0.1;热备常驻运行,α 接近 1.0。
选型本质是“用钱换时间,用复杂度换数据安全”。面试官想听的不是你背出多少种模式,而是你能不能根据业务场景,权衡出最合适的架构并说出代价——就像张老板根据客流量和预算决定分店是天天开门、白天开门还是只在大事时才开门。
数据复制与备份:账本怎么抄给分店
账本同步是容灾的地基。张老板有两个办法把总店账本共享给分店:每来一笔订单就立刻打电话告诉分店,分店记下才挂电话,这叫同步复制,账本分毫不差,但每笔业务都要等一通电话,效率低;或者打烊后把一天的账本拍照发过去,这叫异步复制,平时痛快,但若主店中午着火,下午的账就来不及抄了。同步复制(Synchronous Replication)保证主节点写入成功后,数据一定也写入了备节点,RPO≈0,代价是每次写入增加一次往返延迟。异步复制(Asynchronous Replication)则让主节点写入立即返回,后台批量同步,性能好但故障时可能丢失尚未复制的数据。
除了实时复制,备份策略同样关键。全量备份(Full Backup)定期完整复制全部数据,恢复最简单但耗时长;增量备份(Incremental Backup)只备份变更部分,节省空间但恢复时需要按序回放;日志备份(Log Backup)则实时记录每次操作,是最细粒度的保险。无论哪种备份,数据校验(Checksum/Hash)都必不可少——磁盘坏道、网络位翻转、软件 bug 都可能让备份数据静默损坏,定期比对源端与备端的校验值才能确保备份可用。
1. 写入速率:单位时间内写入主节点的数据量,例如每秒 1000 条订单。业务越繁忙,这个值越大,数据丢失风险越高。
2. 复制延迟:从主节点写入到备节点确认之间经过的时间差。同步复制下这个值很小,异步复制下取决于批量同步周期。
3. 乘积语义:延迟窗口内“正在路上”的数据量,就是故障时可能丢失的量,也是 RPO 的估算基础。
同步与异步的选择,本质是“一致性”和“性能”的拔河。张老板的账本如果每晚拍照同步(异步),速度快但损了账;如果每笔实时确认(同步),账全但效率低。面试时把这条线讲清楚,就能展示你对分布式系统核心矛盾的理解深度。
故障转移与恢复:应急预案与演习
再好的账本同步,关键时刻切不过去也白搭。张老板给两家店写了应急预案:每 5 秒检查一次店内烟雾报警器(健康检查),报警触发后自动断电并呼叫消防(告警),同时启动分店接管流程(自动切换)。健康检查(Health Check)是容灾的哨兵,常见手段有心跳检测(Heartbeat)、HTTP 探活、TCP 端口探测;当检测到主节点连续多次无响应,系统不能立刻认定故障,还要避免“脑裂”——即主节点其实还活着,只是网络分区了。自动切换(Failover)通过 DNS 修改、VIP(虚拟 IP)漂移、负载均衡器摘除节点等方式,把流量导向备节点。
切换完成后,数据可能需要回滚恢复(Rollback):备节点追平复制落后的数据,回到最近一次一致快照,再继续提供新服务。恢复的全流程时间就是 RTO 的核心构成。为了确保这套流程真实可用,容灾演练(Disaster Recovery Drill)必不可少——定期模拟机房断电、网络分区、主节点宕机等故障场景,验证预案每个环节是否可执行。不做演练的容灾,本质是纸面容灾:脚本可能权限失效、备节点可能数据不一致、告警可能没配好,只有演练才能把这些“雷”挖出来。
1. T检测:从故障发生到系统确认故障的时间。健康检查间隔越短、超时判定越灵敏,这段越短。
2. T切换:负载均衡摘除故障节点、把流量切到备节点所需的时间。DNS 生效慢,VIP 漂移快。
3. T数据追平:备节点补齐复制落后数据的时间,异步复制下可能较长,同步复制下近似为零。
4. T验证:对新节点做健康探测并确认可对外服务的时间,通常包含数次请求探活。
张老板每个月都会搞一次“突然断电”演习,把消防流程、备用电源、分店接管全走一遍。系统同理——故障转移不是写好脚本就万事大吉,必须靠演练形成肌肉记忆。面试中主动提到容灾演练的重要性,是加分项。
容量规划与成本:备多少料,花多少钱
张老板每天都要盘算:珍珠、牛奶、杯子各备多少?备多了积压资金,备少了高峰期断货。容灾的资源规划是同一道算术题。容量规划(Capacity Planning)要基于业务峰值而非平均值来设计——电商大促、春节抢票这类场景的峰值可能是平时的 10 倍以上。资源冗余(Redundancy)的策略常见有三种:1+1 是一主一备,省钱但切换后容量减半;N+1 是 N 台工作加 1 台备用,兼顾成本与安全;N+M 是 N 台工作加 M 台备用,适合对可用性要求极高的场景。冗余度越高,系统越稳,成本也越高。
做方案时还要考虑性能优化(Performance Optimization)来降低成本:数据传输可以压缩、去重,复制链路可以用专线降低延迟,冷却备节点的资源可以降配运行。关键是把“冗余度—成本—风险”的关系想清楚:预算有限时先保住 RPO(数据不丢),再尽量压缩 RTO(尽快恢复),用最小成本满足最主要的容灾目标。
1. 峰值需求:业务高峰期所需的资源上限,经验做法是取历史 99 分位值避开头尾毛刺。
2. 冗余率:额外预留的资源比例,例如冗余率 0.2 表示多准备 20% 的容量。
3. 乘法结果:最终部署量 = 峰值 ×(1 + 冗余率),确保故障切换后单节点也能扛住全部流量。
张老板清楚:分店原料备 120% 才能在突发客流时游刃有余,但备 200% 就是浪费。系统容灾同理——冗余不是越多越好,而是“刚好能托住最坏情况”。面试时用这套量化逻辑说明成本决策,会让你的回答告别空谈。
面试实战要点:交出你的答卷
面试官就是最挑剔的投资人,他会问张老板:“你怎么证明你的连锁体系扛得住一家店出事的冲击?”张老板的答卷,就是一套完整的容灾设计流程:第一步澄清需求,明确 RTO、RPO 和预算;第二步评估现状,梳理数据量、流量模型、依赖组件;第三步选择架构,根据需求确定主备/双活/多活;第四步设计数据复制与备份策略;第五步规划故障转移与演练机制;最后量化成本与收益,给出结论。这套流程本身就是面试答题的骨架。
案例分析能展示实战经验:支付系统需要 RPO=0,用同城主备 + 同步复制;内容平台需要低延迟,用异地多活 + 异步复制,容忍秒级不一致;创业初期预算紧,冷备 + 每日备份已经足够。表达时记住“权衡优先”原则——每个方案都先说代价:双活虽好,但引入分布式事务、数据冲突、脑裂风险;冷备虽便宜,但恢复时间是小时级。最忌一上来就喊“全双活”,那是缺乏成本意识的表现。
1. P(灾难):灾难发生的年概率,如某可用区故障约 0.5%/年。数据可从云厂商 SLA 或行业报告获得。
2. T_RTO + T_RPO:业务中断的总时长。RPO 可换算为时间:丢失数据量除以写入速率。
3. 单位时间损失:中断每分钟造成的业务损失,电商大促每分钟可能损失数万元。
张老板最终用一张表格打动了投资人:左边是各种灾难的概率和损失期望,右边是容灾方案的投入成本,结论一目了然。面试也如此——从需求到方案,从量化到验证,每一步都扎实,你交出的就是一份让人信服的“容灾答卷”。
AI 应用场景
电商大促的容灾设计
阶段:系统设计阶段(容灾架构设计)
解决的问题:传统单体应用在主流量机房故障时只能干等机房恢复,而双 11 大促期间每宕机 1 分钟都意味着巨额损失。通过“同城双活 + 异步复制 + 自动切换”设计,故障时流量可在几十秒内切到备中心,保证大促核心链路不中断。
具体案例:某电商平台大促期间一个可用区发生网络抖动,负载均衡自动摘除故障节点,同城双活中心无缝承接订单流量,核心交易服务 RTO 约 30 秒、RPO 接近 0,用户几乎无感知。
金融支付系统的两地三中心
阶段:容灾方案设计阶段
解决的问题:支付系统对数据一致性要求极高(RPO=0),普通主备架构无法满足“零丢失”和“快速恢复”的双重要求。采用“同城双活 + 异地灾备”布局:同城同步复制保证零丢失,异地异步复制 + 定期数据校验防范区域性灾难。
具体案例:某支付公司在 A 市建设同城双活生产中心(同步复制),在 B 市部署异地灾备节点(异步复制 + 月度演练)。主中心整体断电时,RTO 控制在 2 分钟以内,RPO 严格为 0,通过监管部门的容灾合规审计。
短视频推荐系统的异地多活
阶段:架构演进阶段
解决的问题:推荐系统用户分布全国,单一地域部署会导致远处用户请求延迟高,体验差。采用异地多活后,各区域独立服务,用户行为数据通过异步复制汇总到总部分析平台,容忍秒级数据不一致换取极低的访问延迟。
具体案例:某短视频平台在 3 个可用区多活部署推荐服务,任一可用区故障时,DNS 与负载均衡在分钟级完成切换,其他区继续正常服务,推荐效果损失极小,同时降低了跨地域专线带宽成本。
Python 演示
#!/usr/bin/env python3"""容灾设计模拟器:演示同步复制 vs 异步复制的 RTO/RPO 差异""" import random class DRSimulator: """容灾模拟器:用奶茶店分店账本同步类比数据复制""" def __init__(self, mode='async'): self.mode = mode # 'sync' 或 'async' self.primary_orders = [] # 主店订单(主节点数据) self.backup_orders = [] # 备店订单(备节点数据) self.lost_orders = [] # 灾难中丢失的订单 self.detect_time = 0.3 # 故障检测耗时(秒) self.failover_time = 0.7 # 切换耗时(秒) def place_order(self, order_id, amount): """新订单写入主节点""" self.primary_orders.append((order_id, amount)) if self.mode == 'sync': self.backup_orders.append((order_id, amount)) def batch_sync(self): """异步模式:批量将新订单同步到备节点""" if self.mode == 'async': self.backup_orders = list(self.primary_orders) def disaster(self): """模拟灾难:主节点故障,触发切换""" rpo_count = len(self.primary_orders) - len(self.backup_orders) rto_time = self.detect_time + self.failover_time print('灾难发生!数据丢失 = {} 条订单'.format(rpo_count)) print('故障检测 {:.1f}s + 切换 {:.1f}s = RTO {:.1f}s'.format( self.detect_time, self.failover_time, rto_time)) # 切换后主节点用备节点数据顶替 self.primary_orders = list(self.backup_orders) if rpo_count > 0: self.lost_orders = [(i + 1, 0) for i in range(rpo_count)] return rpo_count, rto_time def run_scenario(mode, order_count=30): """运行一种复制模式下的容灾表现""" sim = DRSimulator(mode) for i in range(order_count): sim.place_order(i + 1, random.randint(10, 99)) if mode == 'async': sim.batch_sync() print('--- {} 复制模式 ---'.format(mode)) rpo, rto = sim.disaster() passed = rpo <= 2 and rto <= 2.0 print('结果:RPO={},RTO={:.1f}s,{}'.format( rpo, rto, '成功达标' if passed else '未达标')) print() if __name__ == '__main__': print('容灾设计模拟:主店 vs 备店') print() run_scenario('sync') run_scenario('async')
if self.mode == 'sync':判断当前是否为同步复制模式,决定每笔订单是否立即抄送给备店self.backup_orders.append((order_id, amount))同步复制:主店每收一笔订单,立刻写入备店账本self.backup_orders = list(self.primary_orders)异步复制:把主店全部订单批量复制给备店,有滞后窗口rpo_count = len(self.primary_orders) - len(self.backup_orders)主备两本账的差额,就是灾难中丢失的订单数rto_time = self.detect_time + self.failover_time恢复时间由故障检测耗时与切换耗时相加得到self.primary_orders = list(self.backup_orders)切换后主节点用备节点数据顶替,业务继续运转passed = rpo <= 2 and rto <= 2.0用预设目标(RPO≤2 条、RTO≤2 秒)判断容灾方案是否达标
常见误区
误区以为 RPO=0 意味着系统永远不会丢数据,任何灾难发生后都能恢复所有数据,包括人为误删和软件 bug 导致的变更。
正解RPO=0 只表示在预设的容灾场景(如机房断电、主节点宕机)下,数据不会丢失——主备复制链路完整,故障前所有已确认的写入都已在备节点落地。但如果是机房物理损毁、数据被恶意删除、软件本身有缺陷,RPO=0 也无法兜底。它针对的是“复制是否及时”这个目标,而非“数据是否绝对安全”。
为何常见:把“容灾指标”误解为“绝对能力”,忽略了 RPO 定义中隐含的前提条件——只有复制链路健康的常规故障场景下才成立。
误区以为只要给数据库做主从复制(Master-Slave),就算完成了容灾设计,应用、缓存、消息队列都不需要额外处理。
正解数据复制只是容灾体系中的一个环节。完整的容灾还涉及应用层无状态化(Session 外置)、DNS/负载均衡切换、配置中心同步、消息队列复制、缓存预热、对象存储跨区域同步等多个组件。只复制数据库,应用恢复时可能因为缓存没建好、配置对不上、消息丢失而继续不可用。
为何常见:数据库是系统中最容易被感知的“数据源”,主从复制也最容易看到效果,让人误以为它就是容灾的全部。
误区面试时觉得双活/多活听起来更高级、更“现代”,于是不管业务需求直接选多活架构。
正解多活节点间需要解决写冲突、分布式事务、脑裂检测、全局时钟对齐等难题,复杂度呈指数级上升,建设和运维成本也远高于主备。如果业务 RTO 允许分钟级恢复,主备架构成本更低、链路更简单、更稳定可靠。正确的顺序是:先量化 RTO/RPO 目标和预算,再选架构,而不是反过来用“技术先进性”倒推需求。
为何常见:混淆了“技术能力”和“方案匹配度”,把架构选型当成了炫技,忽略了需求分析才是设计的起点。
误区系统上线时做了一次故障切换测试,验证能切过去,就觉得容灾已经万无一失,后续不再演练。
正解容灾系统的故障切换路径平时并不承载真实业务,很多问题只有在实战或定期演练中才会暴露:备节点数据悄悄不一致、切换到脚本权限过期、DNS 缓存未及时刷新、监控告警漏报、下游依赖未同步变更等。定期容灾演练才能验证预案可执行、流程可落地、人员可响应。不做演练的容灾,本质上是“纸面容灾”。
为何常见:演练要占用资源、协调时间,还可能影响线上,短期看不到收益,容易让人产生“之前测过就行”的侥幸心理。
误区认为用了同步复制,RTO 自然比异步复制更大,因为每次写入都要等待备节点确认,太慢了。
正解RPO 由复制方式决定(同步复制 RPO≈0),但 RTO 由故障检测、切换、数据追平、验证四段耗时的总和决定,与复制方式没有直接绑定关系。同步复制甚至可能让 RTO 更小——备节点数据总是最新的,切换后无需追平数据。但跨地域同步复制会显著增加写入时延,这是性能上的代价,不应与 RTO 混为一谈。
为何常见:将“写入性能下降”与“恢复时间变长”两个概念混为一谈,忽略了 RPO 和 RTO 是两个相互独立的评估维度。
面试题
Q1. 在容灾设计中,RTO(恢复时间目标)最准确的定义是什么?
- A.系统最多可容忍的数据丢失量
- B.故障发生到业务恢复的最长时间← 正确答案
- C.系统每年正常运行的时长比例
- D.数据备份任务执行的频率
答案:B。RTO 关注“时间”——业务能中断多久,而不是“数据量”。A 是 RPO 的定义;C 是可用性指标;D 是备份策略参数。用奶茶店的话说,RTO 是顾客最多愿意排队等多久,而不是等的时候丢了多少杯配方。
Q2. 若某支付系统声明 RPO=0,则意味着什么?
- A.系统永远不会发生任何故障
- B.系统恢复无需任何时间
- C.数据备份只需在夜间执行
- D.灾难恢复后数据零丢失← 正确答案
答案:D。RPO=0 表示在容灾场景下,恢复到故障点之前所有已确认的数据,数据量零丢失。它不保证系统不故障(A),也不代表恢复速度快(B)。就像奶茶店每笔账都即时抄给分店,主店烧毁后分店的账本仍然是完整的。
Q3. 主备模式下,备节点最核心的职责是什么?
- A.实时同步数据并待命切换← 正确答案
- B.承担一半读流量以便分流
- C.独立对外提供完整服务
- D.只做离线数据分析任务
答案:A。主备模式下备节点不对外服务,核心是同步数据、随时准备接管。B 是双活/读写分离的职责;C 是双活的职责;D 是数据仓库的用途。备节点就像平时不开门的分店,但账本时刻保持同步,主店出事立刻顶上。
Q4. 异步复制模式最大的风险是什么?
- A.复制的硬件成本会过高
- B.完全无法进行故障切换
- C.主节点故障可能丢失数据← 正确答案
- D.无法支持多可用区部署
答案:C。异步复制中,主节点写入后立即返回,备节点滞后同步。若主节点在同步完成前故障,滞后窗口内的数据就丢了。A 通常异步更省成本;B、D 说反了,异步复制是多可用区部署的常见做法。就像分店账本每天抄一次,主店中午着火,下午的账就丢了。
Q5. 为什么说数据校验是容灾体系中必不可少的一环?
- A.提高数据库写入并发性能
- B.确保备份与源数据一致性← 正确答案
- C.缩短跨区域复制网络延迟
- D.减少备份所需存储空间
答案:B。备份和复制过程中,数据可能因磁盘坏道、网络位翻转、软件 bug 等发生静默损坏,数据校验(Checksum/Hash)能周期性比对源端与备端,确保备份可用。A、C、D 分别对应性能、延迟、存储优化,都不是校验的目标。就像张老板定期核对总店与分店的账本,确保抄送过程没抄错。
Q6. 定期进行容灾演练的主要目的是什么?
- A.降低生产环境副本成本
- B.提升业务系统在线并发
- C.替代日常监控告警体系
- D.验证应急预案可落地执行← 正确答案
答案:D。演练能暴露备节点数据不一致、切换脚本失效、权限过期、告警漏报等“纸面预案”问题,验证从故障发现到恢复的全链路。A、B 是其他优化目标;C 说反了,演练是监控告警的补充而非替代。
Q7. 以下哪些手段可以有效降低系统的 RTO?
- A.增加全量备份执行频率
- B.引入自动故障切换机制← 正确答案
- C.预热备节点加速接管← 正确答案
- D.减少健康检查探针数量
答案:BC。B 自动切换去掉人工决策时间,直接压缩 RTO;C 预热备节点让备节点处于随时可服务状态,显著减少切换耗时。A 全量备份频率与恢复速度没有直接关系,恢复时仍要回放数据;D 减少探针反而会拖慢故障发现。
Q8. 以下哪些属于常见的容灾架构模式?
- A.主备(Active-Standby)← 正确答案
- B.无状态(Stateless)
- C.双活(Active-Active)← 正确答案
- D.多活(Multi-Active)← 正确答案
答案:ACD。主备、双活、多活是经典三大容灾架构模式。B 无状态更多是一种应用设计范式(让应用层不带本地状态),它是提升容灾能力的手段,但不是独立的容灾架构模式。
Q9. 哪些场景下选择冷备方案是合理的?
- A.预算有限且业务处于早期← 正确答案
- B.允许数小时甚至一天中断← 正确答案
- C.秒级切换是刚性需求
- D.数据量巨大且可批量恢复← 正确答案
答案:ABD。冷备成本低,但恢复需要拉起环境、追平数据,耗时可达小时级。A、B、D 都符合“低成本 + 长恢复时间”的评估框架;C 需要秒级恢复,必须热备或双活,冷备不适用。就像一家生意冷清的小分店,没必要天天开门,主店真出事再连夜布置也能接受。
Q10. 某双活系统跨两个可用区部署,两区间网络单程延迟为 50ms。若采用同步复制方式写入,一次写请求的理论最小延迟是多少?
- A.约 0 ms
- B.约 25 ms
- C.约 50 ms
- D.约 100 ms← 正确答案
答案:D。同步复制要求主节点写入后等待备节点确认,一次确认需要“主→备”和“备→主”两段单向传输,即 2 倍单程延迟 ≈ 100ms。这是同步复制在跨地域场景中最核心的代价。距离越远延迟越大,这也是“强一致 + 异地多活”难以两全的根本原因。