• zab协议与paxos协议为什么只保证超过半数的机器保持同步?那剩下的机器是不是会出现不一致的问题?


    zab协议为什么只保证超过一半的机器保持数据同步?这样有什么好处,会造成什么影响,还有剩下的没保证同步的机器,后来是怎么重新进入数据同步状态的?paxos也有类似的问题

    举个例子。假设一个集群系统中就存储着一条数据(比如这条数据代表所有人支付宝的总额,所有人都秉承共产主义理念往这个账户里存钱取钱)。这个系统可能有多个客服姑娘(client) 对外服务,响应外部对数据的读写请求(读:看看现在总额多少呀;写:转入或转出资金),而系统内部则是一个个真正干活的工人(host),负责接受客服姑娘的对数据的询问和按照姑娘的指示修改数据。假设在某个时间点,有几个客户同时打电话询问现在总额多少啊。每个客服在完成服务的过程中,需要询问若干个工人才能得到答案来作出判断,最终反馈给客户;并且每个客服在此过程中使用到若干工人非常可能是不一样的。比如,客服1用到了工人1,工人2,工人3;客服2用到了工人1,工人4,工人5;而且每个工人可能知道的数据也是不一样(比如工人5在某个时间点去上厕所了,没有听到把总额加100的要求)。但是尽管可能有部分工人拥有的数据是过时的(就当前情况来看是错误的),但是客服1和客服2通过获取这些工人的回应后判断出来的结果是一样的,这是一致性的一个基本要求(读一致性)。所以你看到,怎么能够保证客服1 客服2的判断出来的是一样的呢?最低要求就是有工人总数一半以上的工人回复的结果是一样的可以,也就是说集群中保证有一半以上的数据是一致的就可以,这样就能满足响应对外读取服务的一致性。至于内部的不一致的工人,通过一定机制同步一下就可以达到一致(比如在某个时间点互相广播一下当前最新记录的时间戳,落后的自动去跟别人获取落下的这段时间的增量日志,然后按照增量日志对自己的记录进行更新)

    参考:zab协议与paxos协议为什么只保证超过半数的机器保持同步?那剩下的机器是不是会出现不一致的问题?

  • 相关阅读:
    day06.2-软链接与硬链接
    day06.1-磁盘管理
    day05.3-Linux进程管理
    day05.2-Vim编辑器
    day05.1-文件归档与压缩
    day04-Linux系统中用户控制及文件权限管理方法
    day03-Linux操作系统目录结构
    day02.2-常用Linux命令整理
    BST_traverse(中序遍历,前序遍历,后序遍历)
    JS_DOM_practice with Pokemon
  • 原文地址:https://www.cnblogs.com/aspirant/p/13571949.html
Copyright © 2020-2023  润新知