分布式一致性算法

前言

依据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日志条目,下图很好解释了工程实现(详情):

      增加节点,追进度

      完成节点增加

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容