系统架构设计师 · 高频练习

双活系统采用Last-Writer-Wins,为什么仍可能丢掉业务更新?

高级 单选题 第 1076 题 困难 系统架构设计师多地域双活Last-Writer-Wins数据冲突最终一致性
题目

订单系统在两个地域双活。地域A将收货地址改为新地址,几乎同时地域B将配送方式改为加急,但两个地域都覆盖写入整条订单记录。数据库采用Last-Writer-Wins解决冲突。下列判断正确的是()。

A 只要最终收敛到一条记录,两次业务修改就一定都被保留
B LWW可能用较后的整条记录覆盖另一地域的修改,应根据业务语义采用字段合并、条件版本或单一归属写等策略
C 把服务器时钟调快即可从根本上消除并发冲突
D 双活系统不需要记录版本和冲突指标
题目类型:原创高频练习题 用途:用于帮助理解系统架构设计师相关考点和答案解析,不等同于官方真题。
正确答案
B
答案解析

Last-Writer-Wins解决的是副本如何收敛,而不是两次业务意图如何同时成立。整条记录覆盖时,即便冲突最终消失,也可能悄悄丢掉其中一次更新。

选项分析

A

错误。副本一致只表示最后看到同一结果,不代表结果包含全部业务意图。

B

正确。应按数据语义选择合并、版本校验、归属写或显式冲突处理。

C

错误。时钟同步能减少时间判断误差,但不能消灭真实并发。

D

错误。版本、冲突率和复制延迟是双活运行的重要观测数据。

本题为什么容易错

“最后写入胜出”听起来像公平裁决,实际只是一个确定赢家的规则。对于余额、库存、订单状态等强业务语义数据,简单覆盖可能造成不可接受的损失。

先看结论

简短答案

双活系统采用Last-Writer-Wins,为什么仍可能丢掉业务更新,正确答案是 B(LWW可能用较后的整条记录覆盖另一地域的修改,应根据业务语义采用字段合并、条件版本或单一归属写等策略)。Last-Writer-Wins解决的是副本如何收敛,而不是两次业务意图如何同时成立。整条记录覆盖时,即便冲突最终消失,也可能悄悄丢掉其中一次更新。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
只要最终收敛到一条记录,两次业务修改就一定都被保留 本题干扰项 错误。副本一致只表示最后看到同一结果,不代表结果包含全部业务意图。 看到该词不要急着选,先判断是否真正解决题干问题
LWW可能用较后的整条记录覆盖另一地域的修改,应根据业务语义采用字段合并、条件版本或单一归属写等策略 本题正确答案 正确。应按数据语义选择合并、版本校验、归属写或显式冲突处理。 看到题干核心场景时优先联想到它
把服务器时钟调快即可从根本上消除并发冲突 本题干扰项 错误。时钟同步能减少时间判断误差,但不能消灭真实并发。 看到该词不要急着选,先判断是否真正解决题干问题
双活系统不需要记录版本和冲突指标 本题干扰项 错误。版本、冲突率和复制延迟是双活运行的重要观测数据。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 只要最终收敛到一条记录,两次业务修改就一定都被保留:错误。副本一致只表示最后看到同一结果,不代表结果包含全部业务意图。
  • 把服务器时钟调快即可从根本上消除并发冲突:错误。时钟同步能减少时间判断误差,但不能消灭真实并发。
  • 双活系统不需要记录版本和冲突指标:错误。版本、冲突率和复制延迟是双活运行的重要观测数据。
复习

知识点详解

多主复制允许多个地域接受写入,网络延迟下会出现并发版本。LWW按时间或内部顺序选择一个版本,容易实现最终收敛,但可能丢失另一版本。可选策略包括按字段合并、乐观版本条件、单一归属地域、可交换操作或需要人工介入的冲突工作流。

备考速记

LWW能让副本不吵架,却不保证每次修改都留下。

Last-Writer-Wins 在最终一致性场景中的作用

用户资料中的独立字段可按字段级合并;账户余额不宜直接LWW,可使用单一写入归属或可验证的账本操作;订单状态需按状态机规则拒绝非法回退。

拓展

同类题怎么考

  • 判断LWW在并发写场景中的数据丢失风险。
  • 根据业务语义选择多地域冲突解决策略。
Last-Writer-Wins 在系统架构设计师软考中的考法

选项若把最终一致写成不丢更新,通常是在偷换概念。优先选择能说明业务语义和冲突证据的方案。

解题思路

把两次修改摊开看:A改地址,B改配送方式,本来可以同时保留;但若双方都提交一份旧快照加一个新字段,后到的整条记录会把先到的字段改动带回旧值。因此 B 才抓住了LWW的真实风险。

考点定位

收敛性不等于业务正确性。冲突策略要看字段能否合并、操作能否交换、是否允许拒绝过期版本。

易错提醒

  • 所有字段共用一条LWW记录,扩大无关字段相互覆盖的范围。
  • 只测单地域故障切换,没有压测跨地域并发写。
  • 发现冲突后没有审计日志,无法还原被覆盖的业务操作。

备考提示

  • 遇到一致性题,分别问副本是否收敛、业务意图是否保留。
  • 记住不同数据可用不同策略,不必全库统一成一种冲突规则。

你可能还想了解

  • Last-Writer-Wins会丢更新吗?
  • 双活数据库并发写如何处理?
  • 最终一致和业务正确有什么区别?

本文小结

LWW保证副本最终选出一个结果,却可能覆盖并发业务更新,架构设计应依据数据语义选择更合适的冲突策略。