美文网首页
分布式系统之 Quorum机制

分布式系统之 Quorum机制

作者: wayyyy | 来源:发表于2022-12-25 00:24 被阅读0次

    对于数据存储而言,为了提高可用性(Availability),采用了副本备份,比如对于HDFS,默认每块数据存三份。但是,问题来了,当需要修改数据时,就需要更新所有的副本数据,这样才能保证数据的一致性(Consistency)。

    我们先看这样一个机制:WARO机制。
    WARO(Write All Read one)是一种简单的副本控制协议,当Client请求向某副本写数据时(更新数据),只有当所有的副本都更新成功之后,这次写操作才算成功,否则视为失败。
    从这里可以看出来,写操作很脆弱,因为只要有一个副本更新失败,此次写操作就视为失败了。但是一旦成功,那么我们读只需要读取其中任何一个副本就可以读到最新的数据。

    Quorum机制,是一种权衡机制:

    1. 假设系统中有5个副本,W=3,R=3。初始时数据为(V1,V1,V1,V1,V1)--成功提交的版本号为1。


      image.png
    2. 某次更新操作在3个副本上成功后,就认为此次更新操作成功。数据变成:(V2,V2,V2,V1,V1)--成功提交后,版本号变成2。


      image.png
    3. 因此,最多只需要读3个副本,一定能够读到V2(此次更新成功的数据)。而在后台,可对剩余的V1 同步到V2,而不需要让Client知道。

    总结出来,就是:
    假设有N个副本,更新操作Wi只有在W个副本中更新成功之后,才认为此次更新操作Wi成功。而此刻对于读操作而言,至少需要读R个副本才能读到此次更新的数据。其中,W+R>N ,即W和R有重叠,一般,W+R=N+1

    Quorum机制无法保证强一致性

    Quorum机制无法保证强一致性,强一致性就是:任何时刻任何用户或节点都可以读到最近一次成功提交的副本数据。强一致性是程度最高的一致性要求,也是实践中最难以实现的一致性。

    仅仅通过Quorum机制无法确定最新已经成功提交的版本号。

    比如,上面的V2 成功提交后(已经写入W=3份),尽管读取3个副本时一定能读到V2,如果刚好读到的是(V2,V2,V2),则此次读取的数据是最新成功提交的数据,因为W=3,而此时刚好读到了3份V2。
    但是如果读到的是(V2,V1,V1),则无法确定是一个成功提交的版本,还需要继续再读,直到读到V2的达到3份为止,这时才能确定V2 就是已经成功提交的最新的数据。

    1. 如何读取最新的数据?
      在已经知道最近成功提交的数据版本号的前提下,最多读R个副本就可以读到最新的数据了。

    2. 如何确定 最高版本号 的数据是一个成功提交的数据?
      继续读其他的副本,直到读到的 最高版本号副本 出现了W次。


    参考资料
    1、https://zhuanlan.zhihu.com/p/61896391

    相关文章

      网友评论

          本文标题:分布式系统之 Quorum机制

          本文链接:https://www.haomeiwen.com/subject/mztwqdtx.html