知识卡片
仅有时间戳排序还不够:全序需要知道何时尘埃落定
内容
[[兰伯特时间戳用计数器节点ID构造与因果一致的全序]]虽然给出了一个与因果一致的全序,却解决不了实时判定唯一性约束这类问题:想象要保证用户名全局唯一,理论上可以约定”时间戳更小者胜出”,但这只在事后(收集完所有创建请求后)比较才可行——当某节点当下就要决定”这次注册是成功还是失败”时,它并不知道其他节点是否正在并发创建同一个用户名、更不知道那个操作最终会拿到什么时间戳。若要现场确认没有更小时间戳的同名操作,就必须逐一询问其他每个节点,一旦某节点故障或不可达,整个决策就会被拖住,这正是要极力避免的不容错设计。根本原因在于:操作的全序只有在所有相关操作都被收集齐之后才会最终确定,而这一点在决策发生的当下无法保证。发散:这条洞见把问题从”如何排序”重新定向到”如何知道排序已经不会再变”,这正是下一步引出全序广播的关键动机。
参考来源
- 位置:《数据密集型应用系统设计》第九章《一致性与共识》"光有时间戳排序还不够"(源文件:_epub-src/ch9_split_000.html)
- 结论依据:原文以用户名唯一性约束为例,说明事后比较时间戳可行、但实时决策时节点无法确认是否存在更小时间戳的并发操作,指出问题根源是全序只有在所有操作收集完毕后才会出现,直接支撑本卡片结论。
- 原始内容:只有在所有的操作都被收集之后,操作的全序才会出现……为了确保没有其他节点正在使用相同的用户名和较小的时间戳并发创建同名账户,你必须检查其它每个节点……