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 节点发通知告知该数据状态已提交。
转载于:https://www.cnblogs.com/it-worker365/p/4582142.html
PAXOS/RAFT理解相关推荐
- 分布式一致性(共识)算法(Paxos,raft,ZAB)的一些总结
文章目录 前言 CAP理论 C consistency 一致性 A availability 可用性 P partition tolerance 分区容错性 一致性模型 弱一致性 强一致性 强一致性算 ...
- 区块链共识之Paxos算法理解与实战
0.前言 本文记录笔者学习和理解区块链共识算法Paxos的点滴,文章比较长,需要耐心来细细琢磨,笔者也是苦战了一个周末才对此有那么一点初步了解,有问题的地方请不吝斧正! 1.初始是阅读本文后续内容的基 ...
- 一致性算法(paxos,raft,ZAB)——paxos算法(大概)
- 从paxos到raft zab,为何raft能够“独领风骚”
文章目录 RAFT出现的缘由 RAFT 的实现 STATE MACHINE Log Replicated State Machine Leader Election 基本角色 关键变量 基本选举过程 ...
- 【Raft】分布式一致性算法Raft和zab、paxos
目录 前言 Raft算法 Raft动画教程 Raft手动设置模拟 Raft协议说明 Raft和zab区别 paxos算法 前言 开发面试Zookeeper肯定要问,Zab协议逃不掉,那么和 Raft ...
- raft协议的一些理解
raft是工程上使用较为广泛的强一致性.去中心化.高可用的分布式协议.(类似的还有ZAB,GOSSIP) 大概理解一下,强一致性就是任意时刻客户端在不同机器读到的数据一致.注意跟最终一致性区别,比如数 ...
- 彻底理解 Raft 共识算法及 etcd/raft 源码解析
译者序 本文翻译自 USENIX 2014 论文 In Search of an Understandable Consensus Algorithm (Extended Version)[1] ,文 ...
- 分布式基石|最难 paxos 和最易 raft?
什么是一致性协议? 注意,今天是大白话随便聊聊,目的是直白的了解 raft 是什么,不用太抠理论定义. 什么是一致性协议? 字面理解就是让某些东西保持一致的协议嘛. 什么是一致? 大白话就是内容完 ...
- 分布式一致性算法Paxos,Zookeeper的ZAB协议,Raft算法
Paxos算法: Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑. 阶段一: 1.Proposer选择一 ...
最新文章
- 超级干货:3个性能监控和优化命令详解
- mysql 8小时问题_Mysql经典的“8小时问题”
- 读书笔记--Android Gradle权威指南(上)
- npm run report,打包,包资源 ,vue大小,vue资源大小
- Vs 2008 解决方案的目录结构设置和管理
- Android Bitmap 载入与像素操作
- python深度学习——案例讲解
- 服务器口令怎么修改,畅捷通不能连接到服务器怎么修改口令
- C# 使用Magick.NET进行图片格式转换,修改尺寸(.ico .jpg .png .gif .bmp),解决png转jpg透明变黑底问题
- 单纯技术背景已不吃香 MBA管理能力更被招聘者看好
- Java菜鸟逆袭之基础语法下
- firsthead学习笔记
- Arduino与Proteus仿真实例-LM75温度传感器驱动仿真
- 【奥斯卡理财星体系 第五章】丨手把手教你从零开始搭建资产配置
- ORACLE+SQL性能优化
- 国产数据库产品介绍以及实践
- Hello China操作系统在Virtual PC上的安装和使用
- python中声明变量注意要项_Python之变量、常量以及注释
- 6.selenium实际用法
- torch标准化_计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
热门文章
- 数据类型,运算符和表达式03 - 零基础入门学习C语言04
- 实体类,bean文件,pojo文件夹,model文件夹都一样
- 编译原理-First集和Follow集
- 【异步编程】Part3:取消异步操作
- ADB命令行控制界面开关
- 2018上C语言程序设计(高级)作业-第1次作业
- 经典排序算法 - 冒泡和快排总结
- jquery-$()函数的用法及一些常用的选择器
- Echart的angularjs封装
- Enterprise Library: Configuration Application Block应用向导篇, Part 1