• 分布式协议——Paxos、Raft和ZAB


    参考:分布式系统协议Paxos、Raft和ZAB

    Paxos算法是一种提高分布式系统容错率的一致性算法

    Paxos 算法的步骤是这样:

    1.首先有两种角色,一个是“提议者”,一个是“接受者”。提议者可以向接受者提出提议,然后接受者表达意见。

    2.因为存在多个提议者,如果同时表达意见会出现意见不一致的情况,所以首先需要尽快选出一个领导者,让意见统一。

    3.然后领导者会给接受者发出提议,如果一个提议被大多数接受者接纳,这个提议就通过了。

    Raft协议

    Raft 协议的每个副本都会处于三种状态之一:Leader、Follower、Candidate。

    Leader:所有请求的处理者,Leader 副本接受 client 的更新请求,本地处理后再同步至多个其他副本。

    Follower:请求的被动更新者,从 Leader 接受更新请求,然后写入本地日志文件。

    Candidate:如果 Follower 副本在一段时间内没有收到 Leader 副本的心跳,则判断 Leader 可能已经故障,此时启动选主过程,此时副本会变成 Candidate 状态,直到选主结束。

    每一个副本都会维护一个 term,类似于一个逻辑时钟,每发生一个动作就会递增,通过比较每个提议的 term,副本会默认使用最新的 term,防止发生冲突。如果一个 Leader 或者 Candidate 发现自己的 term 不是最新的了,就会自动降级到 Follower,而如果一个 Follower 接收到低于自己当前 term 的提议,就会直接抛弃。

    参考:从Paxos到Zookeeper分布式一致性原理与实践

    ZAB(Zookeeper Atomic Broadcast)协议是为分布式协调服务Zookeeper专门设计的一种支持奔溃恢复的原子广播协议。

    Zookeeper使用ZAB协议来保持集群中各副本之间数据的一致性。

    Zookeeper使用一个单一的主进程来接收并处理客户端的所有事物请求,并采用ZAB的原子广播协议,将服务器数据的状态变更以事务Proposal(事务提议)的形式广播到所有的副本进程上去。

    ZAB协议保证了:

    1.同一时刻集群中只有一个主进程来广播服务的状态变更,这样能够很好地处理客户端大量的并发请求

    2.在分布式环境中,顺序执行的状态变更前后会存在一定的依赖关系。因此,ZAB协议保证了一个全局的变更序列被顺序执行。

    ZAB协议包括了两种基本的模式:崩溃恢复消息广播

    崩溃恢复:1.如果leader服务器出现奔溃退出或机器重启,或者是集群中已经不存在过半的服务器与该leader服务器保持正常通信,那么在重新开始新一轮的原子广播操作之前,所有进程首先会使用奔溃恢复协议来使彼此达到一个一致的状态,此时整个ZAB流程就会从消息广播模式进入奔溃恢复模式。

    消息广播:2.ZAB协议中的消息广播使用的是一个原子广播协议,类似于一个二阶段提交的过程。在整个消息广播过程中,leader服务器会为每个事务请求生成对应的proposal来进行广播,每个follower服务器在接收到这个事务proposal之后,都会首先讲其以事务日志的形式写到磁盘中,并且在成功写入后反馈给leader服务器一个Ack响应。当leader服务器接收到超过半数follower的Ack响应后,就会广播一个Commit消息给所有的follower服务器以通知其进行事务提交,同时leader自身也会完成对事务的提交。

    在ZAB协议的事务编号ZXID设计中,ZXID是一个64位的数字。

    其中低32位是一个递增的计数器,对客户端的每个事务请求,leader服务器在产生一个新的事务proposal的时候,都会对该计数器进行+1

    其中高32位表示了leader周期的epoch编号,每选举一个新leader,就会从这个新的leader服务器中取得最大事务proposal的ZXID,从中解析出对应的epoch值,对其进行+1

  • 相关阅读:
    memcached-session-manager 教程实现session共享
    无锁编程实战演练
    关于找不到类org/apache/commons/lang/xwork/StringUtils的问题
    10 ref 和 out 之间的差别
    MongoDB---性能优化---(1)
    Ubuntu14.04+eclipse下cocos2d-x3.0正式版环境的搭建
    谈谈“一站式服务”
    串的堆分配存储表示
    cocos2d-x教程3:用php或DOS批处理命令来转换文件和解压缩zip
    为HttpStatusCodeResult加入customErrors
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/13331440.html
Copyright © 2020-2023  润新知