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理解相关推荐

  1. 分布式一致性(共识)算法(Paxos,raft,ZAB)的一些总结

    文章目录 前言 CAP理论 C consistency 一致性 A availability 可用性 P partition tolerance 分区容错性 一致性模型 弱一致性 强一致性 强一致性算 ...

  2. 区块链共识之Paxos算法理解与实战

    0.前言 本文记录笔者学习和理解区块链共识算法Paxos的点滴,文章比较长,需要耐心来细细琢磨,笔者也是苦战了一个周末才对此有那么一点初步了解,有问题的地方请不吝斧正! 1.初始是阅读本文后续内容的基 ...

  3. 一致性算法(paxos,raft,ZAB)——paxos算法(大概)

  4. 从paxos到raft zab,为何raft能够“独领风骚”

    文章目录 RAFT出现的缘由 RAFT 的实现 STATE MACHINE Log Replicated State Machine Leader Election 基本角色 关键变量 基本选举过程 ...

  5. 【Raft】分布式一致性算法Raft和zab、paxos

    目录 前言 Raft算法 Raft动画教程 Raft手动设置模拟 Raft协议说明 Raft和zab区别 paxos算法 前言 开发面试Zookeeper肯定要问,Zab协议逃不掉,那么和 Raft ...

  6. raft协议的一些理解

    raft是工程上使用较为广泛的强一致性.去中心化.高可用的分布式协议.(类似的还有ZAB,GOSSIP) 大概理解一下,强一致性就是任意时刻客户端在不同机器读到的数据一致.注意跟最终一致性区别,比如数 ...

  7. 彻底理解 Raft 共识算法及 etcd/raft 源码解析

    译者序 本文翻译自 USENIX 2014 论文 In Search of an Understandable Consensus Algorithm (Extended Version)[1] ,文 ...

  8. 分布式基石|最难 paxos 和最易 raft?

    ​ 什么是一致性协议? 注意,今天是大白话随便聊聊,目的是直白的了解 raft 是什么,不用太抠理论定义. 什么是一致性协议? 字面理解就是让某些东西保持一致的协议嘛. 什么是一致? 大白话就是内容完 ...

  9. 分布式一致性算法Paxos,Zookeeper的ZAB协议,Raft算法

    Paxos算法: Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑. 阶段一: 1.Proposer选择一 ...

最新文章

  1. 超级干货:3个性能监控和优化命令详解
  2. mysql 8小时问题_Mysql经典的“8小时问题”
  3. 读书笔记--Android Gradle权威指南(上)
  4. npm run report,打包,包资源 ,vue大小,vue资源大小
  5. Vs 2008 解决方案的目录结构设置和管理
  6. Android Bitmap 载入与像素操作
  7. python深度学习——案例讲解
  8. 服务器口令怎么修改,畅捷通不能连接到服务器怎么修改口令
  9. C# 使用Magick.NET进行图片格式转换,修改尺寸(.ico .jpg .png .gif .bmp),解决png转jpg透明变黑底问题
  10. 单纯技术背景已不吃香 MBA管理能力更被招聘者看好
  11. Java菜鸟逆袭之基础语法下
  12. firsthead学习笔记
  13. Arduino与Proteus仿真实例-LM75温度传感器驱动仿真
  14. 【奥斯卡理财星体系 第五章】丨手把手教你从零开始搭建资产配置
  15. ORACLE+SQL性能优化
  16. 国产数据库产品介绍以及实践
  17. Hello China操作系统在Virtual PC上的安装和使用
  18. python中声明变量注意要项_Python之变量、常量以及注释
  19. 6.selenium实际用法
  20. torch标准化_计算pytorch标准化(Normalize)所需要数据集的均值和方差实例

热门文章

  1. 数据类型,运算符和表达式03 - 零基础入门学习C语言04
  2. 实体类,bean文件,pojo文件夹,model文件夹都一样
  3. 编译原理-First集和Follow集
  4. 【异步编程】Part3:取消异步操作
  5. ADB命令行控制界面开关
  6. 2018上C语言程序设计(高级)作业-第1次作业
  7. 经典排序算法 - 冒泡和快排总结
  8. jquery-$()函数的用法及一些常用的选择器
  9. Echart的angularjs封装
  10. Enterprise Library: Configuration Application Block应用向导篇, Part 1