订单系统在两个地域双活。地域A将收货地址改为新地址,几乎同时地域B将配送方式改为加急,但两个地域都覆盖写入整条订单记录。数据库采用Last-Writer-Wins解决冲突。下列判断正确的是()。
Last-Writer-Wins解决的是副本如何收敛,而不是两次业务意图如何同时成立。整条记录覆盖时,即便冲突最终消失,也可能悄悄丢掉其中一次更新。
选项分析
错误。副本一致只表示最后看到同一结果,不代表结果包含全部业务意图。
正确。应按数据语义选择合并、版本校验、归属写或显式冲突处理。
错误。时钟同步能减少时间判断误差,但不能消灭真实并发。
错误。版本、冲突率和复制延迟是双活运行的重要观测数据。
本题为什么容易错
“最后写入胜出”听起来像公平裁决,实际只是一个确定赢家的规则。对于余额、库存、订单状态等强业务语义数据,简单覆盖可能造成不可接受的损失。
简短答案
双活系统采用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保证副本最终选出一个结果,却可能覆盖并发业务更新,架构设计应依据数据语义选择更合适的冲突策略。