PAXOS/RAFT理解
PAXOS学习记录
前提: 信息准确无篡改,通信环境可信
目的: 解决多结点间一致性问题(集群中一个修改或者申请成为主结点的提议)
主要角色:
Proposer :提出议案(同时存在一个或者多个,他们各自发出提案)
Acceptor: 收到议案后选择是否接受
Learner: 酱油
提案: Value{编号,决议}
过程描述:
A 准备 Proposer首先选择一个提议序号n给其他的Acceptor结点发出prepare消息。Acceptor收到prepare消息后,如果提议的序号大于他已经回复的所有prepare消息,则Acceptor将自己上次接受的提议回复给Proposer,并且承诺不再回复小于n的提议
B 批准 Proposers收到Acceptor中的多数派对prepare的回复后,进入准备阶段。如果在之前的prepare阶段Acceptor回复了上次接受的提议,那么Proposers选择其中序号最大的提议发送给Acceptor批准,否则,Proposers生成一个新的提议值发送给Acceptor批准,Acceptor在不违背之前在Prepare的承诺的前提下,接受这个请求。
C 确认 如果超过一半的Acceptor接受,提议值生效。Proposers发送acknowledge消息通知所有的Acceptor提议生效
每个议员包含:
LastTried[p]:由p试图发起的最后一个议案的编号,没有为负无穷
PreviousVote[p]:由P投票的所有表决中,编号最大的表决对应的投票,没有为负无穷
NextBallot[p]:由p发出的所有LastVote(b,v)消息中,表决编号b的最大值
流程:
A. 议员p选择一个比LastTried[p]大的表决编号b,设置LastTried[p]=b,然后将NextBallot[p]消息发送给某些议员
B. q从P收到一个b大于NextBallot[q]的nextBallot(b)消息后,q将NextBallot[q]=b,然后发送LastVote(b,v)给p,其中v=PreviousVote[q](b<=NextBallot[q]的NextBallot[b]消息被忽略)
C. 在某个多数集合Q中的每个成员都收到一个LastVote(b,v)消息后,p发起一个编号为b,法定人数为Q,议案为d的新表决。给Q中每一个牧师发送一个BeginBallot(b,d)消息
D. 在收到b=NextBallot[q]的BeginBallot(b,d)消息后,q在编号为b的表决中投出他的一票,设置PreviousVote[p]为这一票,然后向p发送Voted(b,q)消息
E. p收到Q中每个q的Voted(b,q)消息中,将d(这轮表决的法令)记下,然后发送一条Success(d)消息给每个q
F. 一个议员在接受到Success(d)后,将决议d记录
原则:少数服从多数原则 如果同时有人提出议案,出现碰撞,双方都需要增加议案的编号再提交,活锁正确,可终止
http://www.cnblogs.com/endsock/p/3480093.html 这边文章例子非常好。
Raft
http://thesecretlivesofdata.com/raft/
leader election:
发出投票提议选自己,得到大多数投票则成功
Log replicaition:
master/slave系统中,客户端请求到master,写log entry uncommited,复制分发给slave,slave自己写log,告诉master,master commit,通知slave commit
https://www.cnblogs.com/mindwind/p/5231986.html
Raft 协议强依赖 Leader 节点的可用性来确保集群数据的一致性。数据的流向只能从 Leader 节点向 Follower 节点转移。当 Client 向集群 Leader 节点提交数据后,Leader 节点接收到的数据处于未提交状态(Uncommitted),接着 Leader 节点会并发向所有 Follower 节点复制数据并等待接收响应,确保至少集群中超过半数节点已接收到数据后再向 Client 确认数据已接收。一旦向 Client 发出数据接收 Ack 响应后,表明此时数据状态进入已提交(Committed),Leader 节点再向 Follower 节点发通知告知该数据状态已提交。
PAXOS/RAFT理解的更多相关文章
- 分布式:2PC,3PC,Paxos,Raft,ISR [转]
本文主要讲述2PC及3PC,以及Paxos以及Raft协议. 两类一致性(操作原子性与副本一致性) 2PC协议用于保证属于多个数据分片上的操作的原子性.这些数据分片可能分布在不同的服务器上,2PC协议 ...
- 四:分布式事务一致性协议paxos通俗理解
转载地址:http://www.lxway.com/4618606.htm 维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La" ...
- Paxos协议理解
第三次报告: 理解Paxos协议 一. Paxos协议背景 什么是Paxos协议? 一般地,从客户端和服务器的角度,任何一个分布式系统都可以理解成由一个服务器集合和一个客户端集合组成,一个或多个客户端 ...
- 一致性算法—Paxos、Raft、ZAB
一致性算法—Paxos.Raft.ZAB 2019年04月21日 20:35:09 bulingma 阅读数 64更多 分类专栏: 分布式概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...
- 分布式理论系列(二)一致性算法:2PC 到 3PC 到 Paxos 到 Raft 到 Zab
分布式理论系列(二)一致性算法:2PC 到 3PC 到 Paxos 到 Raft 到 Zab 本文介绍一致性算法: 2PC 到 3PC 到 Paxos 到 Raft 到 Zab 两类一致性算法(操作原 ...
- Raft
http://thesecretlivesofdata.com/raft/ https://github.com/coreos/etcd 1 Introduction Consensus algo ...
- raft 一致性算法
介绍: 过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑. 来自Stanford的新的分布式协议研 ...
- Raft协议实战之Redis Sentinel的选举Leader源码解析
这可能是我看过的写的最详细的关于redis 选举的文章了, 原文链接 Raft协议是用来解决分布式系统一致性问题的协议,在很长一段时间,Paxos被认为是解决分布式系统一致性的代名词.但是Paxos难 ...
- MIT-6.824 Raft协议
摘要 raft是一种比paxos容易理解的一致性算法,实现起来比paxos简单许多.本文前部分描述算法的细节,后部分尝试探讨下该算法的原理. 算法描述 raft算法之所以简单的原因之一是它将问题分解成 ...
随机推荐
- 调用webserver时出现:请求因 HTTP 状态 401 失败: Unauthorized。
请求因 HTTP 状态 401 失败: Unauthorized 今天在调用webserver时出现了上述标题的错误,开始认为是由于端口的问题,我把端口恢复80默认端口后,但是问题并没有解决!后来我自 ...
- nyoj 数独
数独 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一 ...
- Socket-Vs-WebSocket-TestTool
项目地址 : https://github.com/kelin-xycs/Socket-Vs-WebSocket-TestTool Socket-Vs-WebSocket-TestTool 一个用 ...
- python 网络编程要点
From http://www.zhihu.com/question/19854853 Python网络编程是一个很大的范畴,个人感觉需要掌握的点有:1. 如何使用Python来创建socket, 如 ...
- 打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
If you installed CRM 4.0 on box where you also have SQL and used a domain account as service account ...
- Microsoft Dynamics CRM 2011 Plugin中PluginExecutionContext.InputParameters["Target"]中的Target是从哪来的?
图 1 如图1,CRM编程是一个请求响应模型,任何操作都是通过一个Request发起,一个Response返回结果,这个模型简单实用.所有请求类都是继承OrganizationRequest,所有响应 ...
- java 网络编程TCP
客户端 服务端
- C/C++基础----变量和基本类型
变量和基本类型 不同平台下基本类型的字节数 类型 16位平台 32位平台 64位平台 char 1 1 1 short 2 2 2 int 2 4 4 long 4 4 8 long long / 8 ...
- 软件-分布式:Kylin (apache开源分布式分析引擎软件)
ylbtech-软件-分布式:Kylin (apache开源分布式分析引擎软件) Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以 ...
- 杂项:SQLite
ylbtech-杂项:SQLite SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是 ...