文档章节

PacificA 一致性协议解读

黑客画家
 黑客画家
发布于 06/21 14:31
字数 1229
阅读 51
收藏 0

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,这里就不再赘述。

本文转载自:

共有 人打赏支持
黑客画家
粉丝 133
博文 200
码字总数 519380
作品 0
杭州
高级程序员
私信 提问
Pegasus — 小米开源的分布式 Key-Value 存储系统

小米云存储团队开发的一个分布式 Key-Value 存储系统,最初的动机是弥补 HBase 在可用性和性能上的不足。系统的 Server 端完全采用 C++ 语言开发,使用 PacificA 协议支持强一致性,使用 Ro...

局长
2017/10/23
48
0
架构设计:系统存储(26)——数据一致性与Paxos算法(终)

(接上文《架构设计:系统存储(25)——数据一致性与Paxos算法(下)》) 如上图所示,Server 2在宕机前正在对log7 、log8 、log9 进行Paxos,并且自身已经完成赋值过程(但是其它节点都还没...

yinwenjie
2017/03/26
0
0
Pegasus 1.11.0 发布,小米分布式 KV 储存系统

Pegasus 是小米云存储团队开发的一个分布式 Key-Value 存储系统,最初的动机是弥补 HBase 在可用性和性能上的不足。Pegasus 系统的 Server 端完全采用 C++ 语言开发,使用 PacificA 协议支持...

王练
09/08
1K
1
比传统事务快10倍?一张图读懂阿里云全局事务服务GTS

近日,阿里云全局事务服务GTS正式上线,为微服务架构中的分布式事务提供一站式解决方案。GTS的原理是将分布式事务与具体业务分离,在平台层面开发通用的事务中间件GTS,由事务中间件协调各服...

中间件小哥
05/28
0
0
蟑螂数据库首次meetup活动

蟑螂数据库中国首次meetup活动,主要是和业界同仁一同探讨蟑螂数据库的应用场景/系统设计/问题与优化及各种诉求等。 本次活动的结果将被传递到美国核心开发团队(12月份),与他们进行研讨,...

开源华为-程广卫
2014/11/07
5.5K
9

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
14
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
19
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
19
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
9
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部