2019独角兽企业重金招聘Python工程师标准>>>

PacificA 的 paper 在 08 年左右发出来的,比 Raft 早了 6,7 年。

在 PacificA 论文中,他们强调该算法使用范围是 LAN (Local Area Network),讲白了就是对跨机房不友好。

不管是 ZAB,Raft,还是 PacificA,都是基于实用主义,把 log replication 和 leader election 分开,不像 paxos,把两个问题合在一起想。

log replication

日志复制流程与 raft 相似:每条日志具有一个序列号(serial number),primary 复制日志给 secondaries,secondary 接收到后返回 ack。

唯一不同的是,PacificA 要求收到所有节点的 ack 后,该请求才算提交,而在 raft 中,只需过半节点(quorum)即可提交。这也是该算法不利跨机房的原因,但这种限制很大程度上能够简化协议。

leader election

一般高可用系统会用 zk/etcd 选主,而 zk/etcd 作为管理者本身,则需要用复杂的一致性协议来选主。PacificA 作为一个一致性协议另辟蹊径,不守套路,选择直接用 zk/etcd(用论文的说法叫 global configuration manager)来做选主。

一个一致性协议实现选主的方法是使用另一个一致性协议,这算是一个亮点。因为 zk/etcd 更多是针对元数据存储做的系统,需要做普通数据分布式存储的时候,PacificA 就有其意义了。换句话说,PacificA 只是保障普通数据高可用的,不会抢占其他一致性协议的市场,它们是互补的关系。

PacificA 中 primary 与 secondaries 之间会使用心跳探活(论文里把 心跳 叫 Beacon )。与 Raft 类似的,secondary 探测不到 primary,就会向 configuration manager 申请换主

PacificA 的 leader election 以 membership reconfiguration (成员变更)的方式来进行,这点很不一样,因为 reconfiguration 在其他一致性协议里是一个比较难的事情,一般不轻易做。下面细讲。

reconfiguration

由于有 configuration manager 的帮助,reconfiguration 变得比较简单:向 zk 做一次 compare-and-swap 原子配置更新即可。

理论上这种方式可以轻松做到一次性变更多个成员(相比起 raft 要简单许多)。

上面说到,secondary 探测不到 primary,就会向 configuration manager 申请换主,做法就是要求让 primary 退群;而 primary 探测不到 secondary 时,日志复制无法进行下去,这时 primary 也会申请让 secondary 退群。

这里很显然的一个问题是 secondary 和 primary 互不相通的时候,会互相让对方退群,造成一败俱伤局面。PacificA 在这里做了一个约定:primary 总会先于 secondary 让对方退群。做法也很简单,让 primary timeout < secondary timeout 即可。

alternative

论文里虽然用组内心跳(primary 与 secondaries 之间的 heartbeat)来判活,但我们可以想,这不是必须的:

分布式系统里,每个节点通常会与一个中心资源管理器做心跳,一旦节点挂了,资源管理器就会找一台空闲机器新开节点。

在 PacificA,资源管理器可以作为 configuration manager,同时由于它能够做心跳探活,组内心跳则可以直接省去。换句话说:

资源管理器看到 primary 失活,则进行换主,看到 secondary 失活,则令其退群,primary 和 secondary 之间没有任何心跳。

在节点数较小的场景下,让资源管理器做成员心跳不存在什么压力。

group check

虽然 primary 和 secondaries 之间可以没有组内心跳,但是绝对不能没有状态同步

首先 commit point 需要同步。secondary 在收到 commit point 之后,才能够让这部分已提交日志被清理。

其次当前 term / ballot 和当前的 leader / primary 都需要同步。

另外事实上,需要组内同步的可能还包括一些应用相关的状态。在 XiaoMi/pegasus 中,这一负责组内同步的 rpc 被称为 group check。我们也用它同步热备份时的备份点。

在 Raft 中,group check 和 heartbeat 的功能被组合在一起,避免长时间无写请求时,节点间状态无法同步。

reconciliation

换主的时候一个问题是新 primary 需要把尚未提交的日志项提交了,算是完成旧 primary 的未竟之事。这个过程叫做 reconciliation

Implementation

众所周知 Raft 没有讲如何做日志存储的方案,尽管大家看了 logcabin 的 SegmentedLog 以后都知道大概怎么做了。PacificA 在论文里讲了这个问题,因为 PacificA 的 log 也需要考虑 overwriting,log compaction (checkpoint) 。不过一些相关点基本以前在 Raft 里讲过了,neverchanje/consensus-yaraft,这里就不再赘述。

转载于:https://my.oschina.net/fileoptions/blog/1833413

PacificA 一致性协议解读相关推荐

  1. 一致性协议raft详解(一):raft整体介绍

    一致性协议raft详解(一):raft介绍 前言 概述 raft独特的特性 raft集群的特点 raft中commit何意? raft leader election log replication ...

  2. CPU缓存一致性协议MESI

    吹剑出自<庄子>:"夫吹管也,犹有也:吹剑首者,而已矣." 吹剑只能发出小声,以示自谦."并发吹剑录",表达的是笔者斗胆讲一些并发编程有关的知识,由 ...

  3. Linux内存管理:ARM64体系结构与编程之cache(3):cache一致性协议(MESI、MOESI)、cache伪共享

    目录 为什么系统软件人员要深入了解cache? cache一致性协议 神马是MESI协议? MESI的操作 MESI状态图 演示:初始化状态为I的cache line 当本地CPU的缓存行状态为I时, ...

  4. 分布式一致性协议Raft,以及难搞的Paxos

    Raft这玩意,网上已经有好多解读文章了,大概比Paxos还要多一些,所以,这篇,不求细节,但求核心思想方面,追一下本源,然后,给自己做个笔记. Raft是什么,它想解决什么问题? 所以Raft是什么 ...

  5. DDS(Date-Distribution Service)协议解读和测试解决方案

    文章目录 1.DDS运行背景以及概述 2.DDS实现方案 3.DDS测试范围 4.DDS测试解决方案 1.DDS运行背景以及概述 通信的本质 在正确额时间内把正确的数据送达正确的地点 (1)数据在哪里 ...

  6. 超详细解析 | 一致性协议算法-2PC、3PC、Paxos、Raft、ZAB、NWR

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:r6d.cn/VMW9 背景 在常见的分布式系统中, ...

  7. 面试官问:ZooKeeper 一致性协议 ZAB 原理

    2019独角兽企业重金招聘Python工程师标准>>> 一致性协议有很多种,比如 Paxos,Raft,2PC,3PC等等,今天我们讲一种协议,ZAB 协议,该协议应该是所有一致性协 ...

  8. 一致性协议算法-2PC、3PC、Paxos、Raft、ZAB、NWR超详细解析

    背景 在常见的分布式系统中,总会发生诸如机器宕机或网络异常(包括消息的延迟.丢失.重复.乱序,还有网络分区)等情况. 一致性算法需要解决的问题就是如何在一个可能发生上述异常的分布式系统中,快速且正确地 ...

  9. 【Zookeeper】Zookeeper一致性协议——ZAB

    Zookeeper一致性协议--ZAB ZAB协议简介 Zookeeper通过ZAB保证分布式事务的最终一致性. ZAB全称Zookeeper Atomic Broadcast(ZAB,Zookeep ...

最新文章

  1. 视频编解码之理论概述 和即时通信
  2. 前端日报-20160527-underscore 源码解读
  3. linux自学(一)之vmware虚拟机安装
  4. Spring容器装饰者模式应用之实现业务类与服务类自由组合的解决方式
  5. oracle 添加监听地址,oracle批改监听地址为localhost
  6. Deep Learning基础--各个损失函数的总结与比较
  7. ​再现Bug?iPhone13 拍照翻车自带炫屏 网友:没想到我也“中奖”了
  8. centos7.2编译php,CentOS7.2编译安装PHP7.2.3之史上最详细步骤。
  9. PowerDesigner15下载安装
  10. SQLServer下载与安装
  11. 记录贴/阴阳师core loop
  12. NOI2022联合省选 题解
  13. Shell 掐头去尾法
  14. uni-app知识点整理
  15. 帮你学会webpack
  16. 2021蓝桥杯省赛b题解
  17. 微信小程序保留小数点
  18. Mac版Ps、AE、PR不能突然使用?Adobe全家桶关闭自动更新的方法
  19. 大宋王朝王国的命运——何辉著
  20. 微博API接口的调用

热门文章

  1. 基于Transformer的高效、低延时、流式语音识别模型
  2. 大国AI竞赛中国忙赶超,但美国仍主导全球AI芯片设计
  3. 重读图灵经典之作,九条反驳意见引人深思
  4. 人工检查,11 个类、97942 个标签,Roboflow 开源自动驾驶数据集可以使用啦
  5. SAP SD基础知识之现金销售
  6. Word2Vec揭秘: 这是深度学习中的一小步,却是NLP中的巨大跨越
  7. 机器学习系列19:将核函数应用于支持向量机
  8. 产品经理也能动手实践的AI(二)- 做个识别宠物的AI
  9. SAP MM MIGO界面里的'Delivery completed'标记
  10. SAP QM 采购货物收到第三方仓库,转库回工厂仓库之后质检之处理