PacificA 一致性协议解读

标签: | 发表时间:2018-03-20 17:12 | 作者:
出处:https://zhuanlan.zhihu.com

公司数据库的一致性协议用的是 PacificA,相信更多人对 raft 比较了解(毕竟是许多大学钦定的教学算法,不曾了解过的可以看这里 快速理解一致性协议 raft),这篇文章写给懂 raft 的读者。


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

相关 [pacifica 一致性 协议] 推荐:

PacificA 一致性协议解读

- -
公司数据库的一致性协议用的是 PacificA,相信更多人对 raft 比较了解(毕竟是许多大学钦定的教学算法,不曾了解过的可以看这里. 快速理解一致性协议 raft),这篇文章写给懂 raft 的读者. PacificA 的 paper 在 08 年左右发出来的,比 Raft 早了 6,7 年. 在 PacificA 论文中,他们强调该算法使用范围是.

分布式一致性协议Raft原理与实例

- - zzm
分布式一致性协议Raft原理与实例. Raft是由Stanford提出的一种更易理解的一致性算法,意在取代目前广为使用的Paxos算法. 目前,在各种主流语言中都有了一些开源实现,比如本文中将使用的基于JGroups的Raft协议实现. 关于Raft的原理,强烈推荐 动画版Raft讲解. 在Raft中,每个结点会处于下面三种状态中的一种:.

深度解析 Raft 分布式一致性协议

- - 掘金后端本月最热
注:本文原创,转载请先通过公众号或掘金联系作者申请. 定期发送干货,实践经验、系统总结、源码解读、技术原理. 笔者期望通过一篇权威靠谱、清晰易懂的系统性文章,帮助读者深入理解 Raft 算法,并能付诸于工程实践中,同时解读不易理解或容易误解的关键点. 本文是 Raft 实战系列理论内容的整合篇,我们结合 Raft 论文讲解 Raft 算法思路,并遵循 Raft 的模块化思想对难理解及容易误解的内容抽丝剥茧.

分布式系统中的一致性协议之两阶段提交协议(2PC)

- - 断尘居
 两阶段提交协议是很常见的解决分布式事务的方式,他可以保证分布式事务中,要么所有参与的进程都提交事务成功,要么都取消事务,这样做可以在分布式环境中保持ACID中A(原子性).      在两阶段提交协议中,包含了两种角色:协调者与参与者. 参与者就是实际处理事务的机器,而协调者就是其中一台单独的处理分布式事务的机器.

一致性hash

- - 互联网 - ITeye博客
一致性hash算法 - consistent hashing. 分类:  算法艺术2010-02-02 09:19 69836人阅读  评论(97)  收藏  举报. 算法 cache object 服务器 存储 c. 一致性 hash 算法( consistent hashing ).

memcached协议

- - 开源软件 - ITeye博客
旧版: http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt. 新版: https://github.com/memcached/memcached/blob/master/doc/protocol.txt.

https协议

- - 互联网 - ITeye博客
SSL 协议的握手过程   .       为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议. SSL 协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,SSL对传输内容的加密是采用的对称加密,然后对对称加密的密钥使用公钥进行非对称加密. 这样做的好处是,对称加密技术比公钥加密技术的速度快,可用来加密较大的传输内容,公钥加密技术相对较慢,提供了更好的身份认证技术,可用来加密对称加密过程使用的密钥.

http2协议

- - 企业架构 - ITeye博客
http2协议的草案已经出来了,阅读了一下网上的中文版,http2尽可能的兼容http1.1. 改进了http1.1协议的不足. http1.0和http1.1的缺点:. 1.http1.0只允许在一个连接上建立当前未完成的请求. 2.http1.1管道只部分处理了请求并发和包头堵塞问题,客户端多建立TCP连接,减少延迟.

PPP协议

- - CSDN博客推荐文章
PPP(Point-to-Point Protocol点到点协议)是为在同等单元之间传输数据包这样的简单链路设计的链路层协议. 这种链路提供全双工操作,并按照顺序传递数据包.   PPP是目前使用最广泛的数据链路层协议,不管是低速的拨号猫连接还是高速的光纤链路,都适用PPP协议. 因特网用户通常都要连接到某个ISP 才能接入到因特网.

大数据的一致性

- - 阳振坤的博客
看到了一篇关于数据一致性的文章:下一代NoSQL:最终一致性的末日. (  http://www.csdn.net/article/2013-11-07/2817420 ),其中说到: 相比关系型数据库,NoSQL解决方案提供了shared-nothing、容错和可扩展的分布式架构等特性,同时也放弃了关系型数据库的强数据一致性和隔离性,美其名曰:“最终一致性”.