分布式一致性算法

前言

依据CAP理论,分布式系统中可用性、一致性、分区容错三者不可兼得,工程上一般会对一致性作出妥协,而一致性算法所为者:保证可用性、分区容错前提下通过算法上精妙设计将妥协区间缩小,使其尽量向真正一致性靠近。ps: 这篇只是个人理解,可能存在错误,望指出感谢

具体算法

  1. paxos(协议详细说明)
    paxos是一致性算法的鼻祖,它采用议会制度,可由多个提案人提出议案,投票人通过信使(通信协议)对提案进行投票,最终只有一个议案获得大多数同意,确定为法令(达成共识确定一个值),为保证法令(值)在全范围一致,提出了三点安全限制:
    a) 只有已提出的议案(值)才有可能被选定为法令
    b) 只有一个议案(值)能被最终选定为法令
    c) 追随者(未参与确定过程的集群节点)无从得知这个议案,直到它被选定为法令
    paxos核心功能是确定一个值,其中关键点是:
    a) 投票人必须通过第一个接收到的议案
    b) 议案由议案编号、业务值构成,议案编号全局唯一且按时序原子递增
    c) 如果一个具有业务值v的议案被选定,所有编号高于它的新议案其业务值也必须为v
    详情见段首链接,其中有一个很好例子,在此贴出:
    多提议交叉

    另外,paxos相关论文中也为分布式系统数据一致性实现提供了一些很好思路:
    • 基于heartbeat通信进行内容扩充
    • 多角色设定:提案人(Proposer)、投票人(Acceptor)、追随者(Learner)
    • 采用预审、定案两阶段提交方式,议案包括{议案编号,业务值}
    • 预审采用一定规则进行投票,多数同意(n/2+1)则通过,进入定案阶段
    • 采用状态机机制,通过复制日志在本地运行来推进状态更新达到数据一致
  1. zab(详情说明)
    zab是zookeeper采用的一致性算法,它是paxos变体,通过加强约束来降低工程实现难度:
    a) 集群同一时刻只存在一个提案人(leader)
    b) 保有最新议案(议案编号最大,无论是否已定案)的候选人才可能成为提案人
    c) 提案人确定新议案之前必须保证节点之前已有议案都已完成定案(同步至大多数节点)
    算法其他一些设定:
    • 角色:leader(提案人,提供读写功能,负责写入数据,复制日志条目至追随者),follower(追随者,具备投票职能,提供只读功能,基于日志条目实现数据一致)
    • 议案编号:zxid——全局范围议案唯一标识,为64位数字,高序32位记录leader任期;低序32位为当前任期内议案计数器,从0开始进行递增;
    • 最终成为leader的候选人必定具有最新数据,新议案的zxid:leader任期数值加一,议案计数器复位为0重新计数
  1. raft(详细说明)
    因paxos协议较难理解,以易理解、易工程化为目标的raft协议诞生了。raft采用分而治之策略将一致性问题拆分为三个子问题:领导人选举、日志复制、安全性保证,个人感觉同zab有很多相似之处,一些设定说明:
    • 角色:leader(领导者,提供读写功能,复制日志条目至其他节点)、follower(追随者,提供只读功能)、candidate(候选人,选举期间临时角色);
      角色转换
    • 任期(term):每个节点都存储当前任期号,随着每次参与选举递增,任期从参与选举开始,若选举成功则任期直到不再担任leader
    • 投票规则: 1.相同任期只能投票一次 2.候选人任期大于节点则投票,相同比对日志条目下标 3.候选人选举超时时间随机
    • 安全性约束:1、类似zab存在选举限制,候选人需包含所有之前已经提交的日志条目;2、之前任期未提交日志条目,当前任期leader需要完成提交
    • 新leader肯定跟大多数节点的数据一样新(如果前任只复制少部分节点最后日志条目,这个日志可能会被覆盖,除非这少部分节点成为leader)

具体场景

  • 选举


    paxos 选举master
    raft 选举leader
  • 集群成员变化
    1. raft
      raft集群成员变化采用分段决策方式进行平滑过渡;节点变化使用日志条目复制给所有节点分两阶段提交,第一阶段:提交包括新、旧节点的配置C old-new,第二阶段:提交只包括新节点的配置C new;在切换过程中集群决策包含节点信息如下:


      成员平滑变化
    2. paxos
      mysql innerDB clustor 底层采用 paxos变体进行数据一致性保证,新节点引入增加view change日志条目,下图很好解释了工程实现(详情):

      增加节点,追进度

      完成节点增加

你可能感兴趣的:(分布式一致性算法)