如何在分布式计算中保持强一致性?

时间:2015-08-31 03:06:21

标签: redis consistency

例如,我有Master(M)和Slave1(S1)和Slave2(S2)。如果我按如下所示进行同步复制,

  1. 更新Master,并锁定写入
  2. 复制Slave1和Slave2
  3. 解锁Master的写作。
  4. 但以上并不是很强的一致性。

    • 场景1,当S1和S2的两次重复都成功时,

    读取Slave1或Slave2的用户可以在某个时刻获得不同的值。

    • 场景2,复制S1成功,但复制到S2失败。

    在这种情况下,Master应取消对S1的写入。但是用户可能已经阅读过了。

    因此很难保持强大的一致性。因此,如果有必要,公司会使用哪些算法来保持强一致性? 如何使最终写入值在完全相同的时间对客户端可见? 感谢。

1 个答案:

答案 0 :(得分:3)

以最简单的形式放置东西;

有两种方法可以提供一致性

  • 首先是在将任何内容写入数据库之前获取锁定 缓存系统。这确保了读写锁定。这包括 主服务器也是。

    为了进一步增强锁定机制,密钥的分配是 保持这样,所以读取总是重新指向 一致的服务器(如果当时还添加了新的服务器)。

    此时锁定,操作也可以缓冲(超时) 所以当应用新值时。返回。

  • 其次,如果复制失败,则会添加复杂的图层 翻车。这确保了数据是否一致,如果不是那样的话 没有应用。