Paxos算法与Zookeeper分析,zab (zk)raft协议(etcd) 8. 与Galera及MySQL Group replication的比较
mit 分布式论文集 https://github.com/feixiao/Distributed-Systems
raft 和 zab 是类似的,都是1.先选举,2.然后再对客户端的消息进行投票. 其实是 simple paxos 的一种变化.
和 原生paxos 的区别在于: 选举的阶段其实是 prepare 的阶段. 选举允许多个主出现.
1. 读原文
paxos-simple-Copy [ https://www.microsoft.com/en-us/research/wp-content/uploads/2016/12/paxos-simple-Copy.pdf ]
读译文
悟出一点和zk的区别.
文献例子中:
- leader可以两个, 所有投票还是两阶段. prepare预锁[预锁是最好的理解方式]+ 提交 所以在fast paxos中再次强调不关心leader如何选举[The Progress Property 一节中,i will not discuss how to select leader]. 在此文中有提及方法,timeout.[paxos-simple-Copy原文Progress 一节末尾]
- 顺序性有序号保证,接受不一定立即执行. 故没有135 ,就不能执行149. 可以先设置一个nop
- 可以批量决议议题,第x-x+10个命令,是否采用对应的命令.
- instance 就是没个决议. 笔者注:instance可以细化到到单个账户的投票上,对应着zk为各个路径.增加并发能力.
zk和raft中leader的作用:
1. 作为所有paxos instance的prepare阶段. [phil注: 一般人悟不到这点]
2. 统筹所有的请求,方便进行并发控制
3. 选择日志最多的节点,能够快速从失败中恢复.
zk和raft中leader是否可能有多个?
zk:
可能的. 虽然zk在得到半数同意后, 再等待了ms, 远小心节点之间心跳超时时间. 也避免不了leader被抢走的尴尬. 案例说明: 共5台机器, 比如 1,2,3 都选择了1. 1 变成leader 然后2 还没得到3的通知, 此时5发出请求,得到了2,3,4,5的同意.
raft:
选自己,然后通知所有人. 各自等待. 先唤醒的再选择自己,通知所有人.
zk:
和raft共同点:
- 有选举轮次,来源于simple paxos 的prepare的概念
- 都是选自己,通知所有人.
和raft不同点:
- 对返回的结果不理睬,直接睡眠 [4]
- leader排他,有效的只能是一个.
- 顺序性有命令队列保证.
- 接受了立即执行
- 日志不是顺序的
- 加入新节点会阻塞 [1]
- 更换leader会阻塞 [1]
http://blog.csdn.net/xhh198781/article/details/10949697 前半部分是对simple faxos的很好总结.
raft:
和zk共同点:
- 有选举轮次,来源于simple paxos 的prepare的概念
和raft不同点:
- 对返回的结果理睬.
- 日志是连续的 [1] [3]
- 加入新节点不阻塞
- 其他区别见下图[6]

笔者注解: 之前的可靠性都是
1. 通过备份,切换的方式. 对应的监听切换器又需要热备. 热备无穷尽也.
2. 客户端多ip 适用于无状态服务器.
paxos的选举机制很好的解决了这个问题.3台机器即可. 客户端配置x个ip.
paxos之Multi-Paxos 这个没找到原文献. 和simple中思想差别较大.但是和zk区别较大,见[2]
- FastPaxos 有原文献.
- 趣事Paxos在大型系统中常见的应用场景
“Leslie Lamport也是用了长达9年的时间来完善这个算法的理论”–
这个故事其实是这样的:
Lamport大牛在他Paxos的第一个版本早在1990年就提交给ACM TOCS Jnl.的评审委员会了 但是当时没有人理解他的算法 主编回执他的稿子建议他用数学而不是神话描述他的算法 他们才会考虑接受这篇paper
Lamport大牛很生气 他有次就在一个会议上说:”为什么搞理论的这群人一点幽默感也没有呢?” 他拒绝修改 而且withdraw了这篇文章
1996年微软的Butler Lampson在WDAG96上提出了重新审视这篇文章 因为他读懂了
1997年MIT的Nancy Lynch在WDAG97上 根据原文重新改写了这篇文章 叫做 在本文中她们”代替”Lamport用数学形式化的定义并证明了Paxos
于是在1998年的ACM TOCS上 这篇迟到了9年的paper终于被接受了
后来2001年 Lamport大牛也作出了让步 他用简单的语言而不是神话故事 重述了原文 这就是 但是通篇还是没有数学符号 L大牛甚为固执 据他自己说 他检查过了自己的语言并没有歧义 不需要数学来描述
Paxos可以说是Theory of CS领域被流传最广泛的一则趣事~
- 实现:
phxsql)是腾讯开源的mysql主备集群多副本管理系统,除了mysql源码之外,还包含了一系列外部的组件(phxsqlproxy、phxbinlogsvr)和内部插件(phxsync),借助paxos协议,实现了主备数据的强一致。
阿里云企业三节点版本,在alisql内核中引入raft协议,不借助任何外部依赖,通过mysqld自身的简单配置,实现整个集群的构建,架构简单、实现优雅。
分布式基础通信协议:paxos,totem和gossip canssandra.
核心是对应的画图能力,模块分解能力. 数据流图.
别人的文章 图解zookeeper FastLeader选举算法. 要学会画无职责的流程图(含循环+ 节点批注). 然后再理解模块,带上职责. 甚至是角色.
http://blog.csdn.net/zhxdick/article/details/50886638
[1] Raft对比ZAB协议 总结了两个经典区别: 1. 日志的连续性问题 2.加入过程是否阻塞整个请求 .具体详见文献3
[2] Multi Paxos http://www.cnblogs.com/fei33423/p/7990190.html wiki上也有,但是没有对应的文献.
[3] Raft算法赏析 核心: 当前term的leader不能“直接”提交之前term的entries . 导致了日志是连续的
有一张例子图 
[5] 很有深度的文章 分布式系统理论进阶 - Raft、Zab
[6] Vive La Difference: Paxos vs. Viewstamped Replication vs. Zab, Robbert van Renesse, Nicolas Schiper and Fred B. Schneider, 2014
Paxos算法与Zookeeper分析,zab (zk)raft协议(etcd) 8. 与Galera及MySQL Group replication的比较的更多相关文章
- Paxos算法与Zookeeper分析
1 Paxos算法 1.1 基本定义 算法中的参与者主要分为三个角色,同时每个参与者又可兼领多个角色: ⑴proposer 提出提案,提案信息包括提案编号和提议的value; ⑵acceptor 收到 ...
- 基于案例分析 MySQL Group Replication 的故障检测流程
故障检测(Failure Detection)是 Group Replication 的一个核心功能模块,通过它可以及时识别集群中的故障节点,并将故障节点从集群中剔除掉.如果不将故障节点及时剔除的话, ...
- Zookeeper笔记(二)Paxos算法与Zookeeper的工作原理
Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目, 它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管 ...
- Paxos、ZAB、RAFT协议
这三个都是分布式一致性协议,ZAB基于Paxos修改后用于ZOOKEEPER协议,RAFT协议出现在ZAB协议之后,与ZAB差不多,也有很大区别. 1. Paxos 分布式节点分为3种角色, Prop ...
- 区块链知识博文1: 共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)
注:这是本人读到的关于共识算法最全和最好的分享博文,系统的介绍了拜占庭容错技术以及共识算法的原理和常用共识算法,原文链接请见后. 目录 一.拜占庭容错技术(Byzantine Fault Tolera ...
- Raft协议实战之Redis Sentinel的选举Leader源码解析
这可能是我看过的写的最详细的关于redis 选举的文章了, 原文链接 Raft协议是用来解决分布式系统一致性问题的协议,在很长一段时间,Paxos被认为是解决分布式系统一致性的代名词.但是Paxos难 ...
- 分布式技术专题-分布式协议算法-带你彻底认识Paxos算法、Zab协议和Raft协议的原理和本质
内容简介指南 Paxo算法指南 Zab算法指南 Raft算法指南 Paxo算法指南 Paxos算法的背景 [Paxos算法]是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息 ...
- Zookeeper协议篇-Paxos算法与ZAB协议
前言 可以自行去学习一下Zookeeper中的系统模型,节点特性,权限认证以及事件通知Watcher机制相关知识,本篇主要学习Zookeeper一致性算法和满足分布式协调的Zab协议 Paxos算法 ...
- Paxos算法之旅(四)zookeeper代码解析--转载
ZooKeeper是近期比较热门的一个类Paxos实现.也是一个逐渐得到广泛应用的开源的分布式锁服务实现.被认为是Chubby的开源版,虽然具体实现有很多差异.ZooKeeper概要的介绍可以看官方文 ...
随机推荐
- CodeForces 644B【模拟】
题意: 查询数 和 最大的队列容量+1: 按时间顺序 ti代表,第i个出线的时间: di代表,第i个需要处理的时间: 对于第i个输出他所需要的时间完成,或者拒绝进入输出-1: 思路: 真是MDZZ了, ...
- 5 天 4000 star 的一个爆款开源项目
今天早上起来浏览 GitHub 的时候,在周热门趋势排行榜上看到了这么一个开源项目,仅仅 5 天时间,爬到了周排行榜的第一名的位置.而在每天的排行榜上,今天一早也高高位居排行榜的第二位. 这个开源项目 ...
- AOP 应用
AOP 的核心:解耦 1. 权限认证2. 事务3. 日志4. Lazy loading 懒加载5. Context Process 上下文处理6. Error Handler 错误追踪(异常捕获)7. ...
- 网络请求方法(SDK封装可以替换afn)
//个人觉得 sdk开发时候 最好不要用第三方 最好可以用最原始的方法 替换 此处仅做sdk封装使用 留存+(void)GET:(NSString *)urlStr params:(NSDiction ...
- linux 打开FTP 功能
http://blog.csdn.net/jay285979220/article/details/62216622 今天在linux上安装完了vsftpd后,使用root账号一直无法登陆到服务器上. ...
- Script to Monitor Current User Activity in the Database
Execution Environment: SQL, SQL*Plus, iSQL*Plus Access Privileges: Requires select privileges on vie ...
- 537 Complex Number Multiplication 复数乘法
详见:https://leetcode.com/problems/complex-number-multiplication/description/ C++: class Solution { pu ...
- Linux--NiaoGe-Service-04
操作系统版本:CentOS 6.10 x86_64 查看内核所获取到的网卡信息 [root@xueji ~]# dmesg | grep -in eth :e1000 ::-bit) :0c::6b: ...
- Java微信公众平台开发(九)--微信自定义菜单的创建实现
自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我们进入开发模式之后我们的自定义菜单就需要自己用代码实现,所以对于刚开始接触的人来说可能存在一定的疑惑,这里我说下平时我们在开发 ...
- 一个页面有相同ID元素的情况分析
经常会遇到一个页面中有相同定义相同id的情况,从道理上来说,id应该是这个页面中某个元素的唯一标识,所以不应该出现有相同id的情况,否则会产生意想不到的结果.而且各个浏览器的表现也是不一样的.我只做了 ...