distributed-system - 最终一致性是否保证任何时候副本机器具有相同的历史前缀
问题描述
我在 Stackoverflow 和谷歌中搜索了这个问题的答案,但我总是“只”得到最终的一致性承诺,即最终任何写入都会到达集群/仲裁中的所有节点。
如果它不能保证这一点,那么为什么它是一个如此流行的一致性方案?
如果节点 X 执行 op1、op2、op3,并且所有这些更新都传播到节点 Y,但按照 op3、op2、op1 的顺序,它并没有真正的帮助,不是吗?
在历史前缀中,我的意思是如果节点 X 当前操作历史是 op1,op2,op3,那么如果节点 Y 具有 op1 或 op1,op2 操作历史,那么它具有与节点 X 相同的前缀历史
解决方案
不,它不需要。
例如考虑:
op1 在时间 t1 执行 'set key-1=5'
op2 在时间 t2 执行 'set key-1=6'
op3 在时间 t3 执行 'set key-1=7'
大多数异步复制策略将使用某种形式的更改日志从主副本同步到辅助副本。现在,如果我要在我的数据库或分布式存储中实现“最终一致性”复制方案,我只需对上述步骤进行日志压缩并将最后一个操作 (key-1=7) 复制到辅助节点。另一方面,对于“一致前缀”方案,我需要以相同的顺序复制所有 3 个操作。
复制方案的选择取决于您的应用程序在从辅助副本读取时需要什么样的一致性。
推荐阅读
- python - 在充满文件的目录中递归搜索特定字符串
- c# - 用户“XX”登录失败
- laravel - Ioredis 与 Laradock redis 容器连接超时
- selenium-webdriver - 我很难为下面的代码构造 x 路径
- android - 没有从活动中获得片段的价值
- ruby-on-rails - 为什么我的辅助数据库不能在生产中连接?
- javascript - (节点:23) UnhandledPromiseRejectionWarning:错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头
- python - 如何在html和python中将文本向下追加
- audio - 如何在 Gstreamer 中动态交换左/右音频输出
- python - 如何根据类型分隔列表值 - Python