Paxos 和 ZAB

Paxos

多个Acceptor,多个Proposer。

提案

[M, V] 由编号M 和值 V 组成

Acceptor 规则
  1. 接受收到的第一个提案
  2. 如果收到的提案的编号比已接受的提案编号大,则接受新的提案
算法描述
Prepare阶段
  1. Proposer 生成提案编号 Mn, 向Quorum 广播该编号。
  2. Acceptor 收到Prepare Mn 之后
    1. 如果比已接受提案编号大,则接受Mn, 并承诺不再接受小于Mn 的提案,将已接收的编号最大提案通过返回ACK 给Proposer。
    2. 否则忽略Prepare Mn
  3. Proposer 收到Quorum 数量的ACK 之后,则进入提交阶段。否则重新开始Prepare 阶段。
Accept阶段
  1. Proposer 选取ACK 中编号最大的提案的Value 作为Vn, 向Quorum 广播 Accept [Mn, Vn]。
  2. Acceptor 收到Accept [Mn, Vn] 之后
    1. 若提案不违背承诺,则接受该提案,并返回ACK
    2. 否则忽略

Multi-Paxos

由于多个Proposer 同时提交提提案会竞争编号导致效率太低。

所以可以把提交提案的工作交给一个Leader Proposer。

由于Paxos并不限制Proposer 数量,该Leader 也不需要严格保证单一。所以可以由简单的心跳/租约机制来产生Leader。

ZAB

多个Follower。单个Leader,所有Proposal由leader发起,保证事务提交的顺序。

提交

类似二阶提交

  1. Leader 向多个Follower 提交提案
  2. Follower 收到后,如果可以执行则返回ACK
  3. Leader 收到超过半数的ACk, 则发送 COMMIT 消息给follower, follower 执行提案。本次提交成功。

Leader选举

  1. 每个参与者广播自己的选票 vote[zxid, sid, electionEpoch]。
  2. 收到其他参与者的选票 vote[zxid', sid', electionEpoch']
    1. 如果 electionEpoch' < electionEpoch, 忽略
    2. electionEpoch' > electionEpoch, 更新electionEpoch 进入下一轮选举
    3. zxid' > zxid, 则更新 sid := sid', zxid相等比较 sid' > sid, 则更新sid := sid'。投出更新的选票
  3. 某个参与者发现自己获得了超过半数的选票,且经过短暂等待,没有其他Leader 产生,则自己变成Leader

Leader同步

由于上述选举过程保证了 Leader 必然拥有最大zxid, Leader 只需要向Follower 同步自己的历史提案即可。

  1. 若Follower 拥有 Leader 没有的提案,则 truncat掉。
  2. 若落后则根据log, reply 历史transcation
  3. 若落后太多,则直接同步 snapshot,再replay transaction log.

附2PC 与 3PC

2PC

  1. 发起者向所有参与者提交事务。参与者执行并记录Undo log,返回ACK
  2. 发起者收到所有的ACK后,发送COMMIT, 参与者释放资源。
    2.1 否则发送ABORT, 参与者undo 事务。

缺点

  1. 同步阻塞,收到事务后需要阻塞直到事务完成或取消
  2. 单点,发起者单点
  3. 脑裂,部分节点可能没收到部分请求导致数据不一致。

3PC

  1. 先发送 canCommit 询问是否能执行事务。
  2. 可以则发出 preCommit,参与者执行事务,记录Undo log, 返回ACK
  3. 发起者收到所有ACK,发送COMMIT, 参与者释放资源。
    3.1 否则发送ABORT,参与者undo 事务。

如果参与者收到preCommit 后,超时未收到COMMIT 或 ABORT, 则继续执行事务。

优于2PC

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