文档章节

PacificA 一致性协议解读

黑客画家
 黑客画家
发布于 06/21 14:31
字数 1229
阅读 17
收藏 0
点赞 0
评论 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,这里就不再赘述。

本文转载自:

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

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

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

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

yinwenjie
2017/03/26
0
0
小米分布式 Key-Value 存储系统--Pegasus

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

匿名
2017/10/19
4.9K
6
比传统事务快10倍?一张图读懂阿里云全局事务服务GTS

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

中间件小哥
05/28
0
0
Waymo旧金山重启自动驾驶汽车实地测试,意欲何为?

近日,谷歌旗下自动驾驶公司Waymo的克莱斯勒Pacifica车辆现身旧金山,在公共道路上进行测试。 虽然在旧金山测试自动驾驶车辆并不是什么新鲜事,但是Waymo的克莱斯勒Pacifica车辆再次现身让人...

雷锋网
01/16
0
0
向FCA采购62000辆厢式车,与Uber商谈无人车运营,Waymo开启无人驾驶时代

继软银 22.5 亿美元投资通用旗下无人车公司 Cruise Automation,助力其无人车商用落地之后,无人驾驶先行者 Waymo 也开启了大步走模式。 财大气粗,向 FCA 采购 62000 辆厢式车 雷锋网新智驾...

张伟
06/01
0
0
Waymo向捷豹路虎下单2万辆I-Pace,组建庞大高端服务车队

雷锋网(公众号:雷锋网)·新智驾按:美国东部时间3月27日一早,Waymo在纽约宣布了一条重大消息。Waymo将向捷豹路虎采购2万台高端电动SUV I-Pace,两家合作组建的这个车队将是全球第一支高端电...

大壮旅
03/28
0
0
英特尔自动驾驶阵营再迎新成员,菲亚特克莱斯勒宣布加入

缺乏自主研发的菲亚特克莱斯勒,此前也曾和Waymo有过合作。 最近,英特尔的自动驾驶阵营又迎来了一位新成员——菲亚特克莱斯克(以下简称FCA)。 在完成对Mobileye的收购之后,英特尔在自动驾...

行者武松
03/07
0
0
菲亚特克莱斯勒CTO访谈:并不认为Waymo比其他自动驾驶技术更安全

(Harald Wester) 雷锋网(公众号:雷锋网)按:安全对于每个人来说都是“不可或缺的先决条件”,只有我们完全解决了安全与风险问题,自动驾驶服务才能起飞。 今年年初,菲亚特克莱斯勒与Way...

Misty
06/18
0
0
自动驾驶壕杰多,Voyage二代自动驾驶出租车接上了Velodyne128线的激光雷达

6月14日,自动驾驶公司Voyage公布了自己的第二代L4级(SAE)自动驾驶出租车G2,G2采用的车型与Waymo目前所使用的车型为同一款——克莱斯勒的Pacifica。但是与Waymo不同的是,其车顶的激光雷达...

彭赛琼
06/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java日志框架-logback配置文件多环境日志配置(开发、测试、生产)(原始解决方法)

说明:这种方式应该算是最通用的,原理是通过判断标签实现。 <!-- if-then form --> <if condition="some conditional expression"> <then> ... </then> </if> ......

浮躁的码农
22分钟前
1
0
FTP传输时的两种登录方式和区别

登录方式 匿名登录 用户名为: anonymous。 密码为:任何合法 email 地址。 授权登录 用户名为:用户在远程系统中的用户帐号。 密码为:用户在远程系统中的用户密码。 区别 匿名登录 只能访问...

寰宇01
23分钟前
0
0
plsql developer 配置监听(不安装oracle客户端)

plsql developer 配置监听(不安装oracle客户端)

微小宝
30分钟前
0
0
数据库(分库分表)中间件对比

本人的宗旨就是,能copy的,绝对不手写。 分区:对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm。 根据一定的规则把数据文件(MYD)和索...

奔跑吧代码
34分钟前
2
0
Netty与Reactor模式详解

在学习Reactor模式之前,我们需要对“I/O的四种模型”以及“什么是I/O多路复用”进行简单的介绍,因为Reactor是一个使用了同步非阻塞的I/O多路复用机制的模式。 I/O的四种模型 I/0 操作 主要...

hutaishi
40分钟前
1
0
【2018.07.16学习笔记】【linux高级知识 20.16-20.19】

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

lgsxp
46分钟前
0
0
用 D3.js 画一个手机专利关系图, 看看苹果,三星,微软间的专利纠葛

用 D3.js 画一个手机专利关系图, 看看苹果,三星,微软间的专利纠葛 前言 本文灵感来源于Mike Bostock 的一个 demo 页面 原 demo 基于 D3.js v3 开发, 笔者将其使用 D3.js v5 进行重写, 并改为...

ssthouse_hust
50分钟前
19
0
oracle查看表空间大小及表数量

一,查看数据库表空间大小 select tablespace_name ,sum(bytes) / 1024 / 1024 as MB from dba_data_files group by tablespace_name; 二,查看数据库中表的总数 select count(*) from use......

源哥L
今天
0
0
debian 9 下 MySQLdb mysql_config not found

需要说明的是debian9 下MySQL 变成了mariadb. apt install libmariadbd18 apt install libmariadbd-dev apt install mysql-community-client...

idoz
今天
0
0
中介者设计模式

1、用一个中介者对象封装一系列的对象交互 中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互 中介者模式又称为调停者模式 2、为什么要使用中介者模式...

职业搬砖20年
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部