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理解的更多相关文章

  1. 分布式:2PC,3PC,Paxos,Raft,ISR [转]

    本文主要讲述2PC及3PC,以及Paxos以及Raft协议. 两类一致性(操作原子性与副本一致性) 2PC协议用于保证属于多个数据分片上的操作的原子性.这些数据分片可能分布在不同的服务器上,2PC协议 ...

  2. 四:分布式事务一致性协议paxos通俗理解

    转载地址:http://www.lxway.com/4618606.htm 维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La" ...

  3. Paxos协议理解

    第三次报告: 理解Paxos协议 一. Paxos协议背景 什么是Paxos协议? 一般地,从客户端和服务器的角度,任何一个分布式系统都可以理解成由一个服务器集合和一个客户端集合组成,一个或多个客户端 ...

  4. 一致性算法—Paxos、Raft、ZAB

    一致性算法—Paxos.Raft.ZAB 2019年04月21日 20:35:09 bulingma 阅读数 64更多 分类专栏: 分布式概念   版权声明:本文为博主原创文章,遵循CC 4.0 BY ...

  5. 分布式理论系列(二)一致性算法:2PC 到 3PC 到 Paxos 到 Raft 到 Zab

    分布式理论系列(二)一致性算法:2PC 到 3PC 到 Paxos 到 Raft 到 Zab 本文介绍一致性算法: 2PC 到 3PC 到 Paxos 到 Raft 到 Zab 两类一致性算法(操作原 ...

  6. Raft

    http://thesecretlivesofdata.com/raft/ https://github.com/coreos/etcd   1 Introduction Consensus algo ...

  7. raft 一致性算法

    介绍: 过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑. 来自Stanford的新的分布式协议研 ...

  8. Raft协议实战之Redis Sentinel的选举Leader源码解析

    这可能是我看过的写的最详细的关于redis 选举的文章了, 原文链接 Raft协议是用来解决分布式系统一致性问题的协议,在很长一段时间,Paxos被认为是解决分布式系统一致性的代名词.但是Paxos难 ...

  9. MIT-6.824 Raft协议

    摘要 raft是一种比paxos容易理解的一致性算法,实现起来比paxos简单许多.本文前部分描述算法的细节,后部分尝试探讨下该算法的原理. 算法描述 raft算法之所以简单的原因之一是它将问题分解成 ...

随机推荐

  1. Msmq设计文档(赋源代码)

    Msmq设计文档(赋源代码)   Msmq设计文档     文件状态: [√] 草稿 [  ] 正式发布 [  ] 正在修改 文件标识: ECI-MSMQ v01 当前版本: 0.5 作    者: ...

  2. bat中的“多线程”处理代码

    大家都知道,批处理中运行的都是一步步单进程执行, 但如果进程执行比较慢,如PING一个不通的IP地址,那就会大大影响批处理程序的执行效率. 如下内容将简单举例,在WINDOWS下使用批处理做多进程并发 ...

  3. 整理开源协议问题 GPL APACHE

    整理开源协议问题 GPL APACHE APACHE 和 GPL 互相不兼容. APACHE 不可以使用 GPL 的代码. 但是 APACHE 可以调用 GPL 组件的接口. 比如 Linux 和 A ...

  4. tomcat源码阅读之StandardHost和StandardEngine

    StandardHost及UML类图: 1.StandardHost类是Host接口的默认实现:其继承自ContainerBase类,说明他也是一个容器类,既然是容器类,那肯定也有管道对象PipeLi ...

  5. Linux & Oracle目录说明

    /bin:存放着一百多个Linux下常用的命令.工具  /dev:存放着Linux下所有的设备文件!  /home:用户主目录,每建一个用户,就会在这里新建一个与用户同名的目录,给该用户一个自己的空间 ...

  6. 二分查找算法,java实现

    二分查找算法是在有序数组中用到的较为频繁的一种算法. 在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间复杂度为O(n),但二分查找算法则更优,因为其查找时间复杂度 ...

  7. linux 下git使用教程

    #添加所有新增文件 git add . #提交所有修改,包括删除,添加,修改 git add -A git add --all #查看状态 git status #添加一个文件 git add rea ...

  8. Python+VSCode+Git 学习总结

    稍等,先写个脑图... 继续,读完本文,你会学会: 1.如何在VSCode中写Python代码: 2.如何在VSCode中使用Git: 为什么写这篇总结 首先,我假设你是一名Python语言初学者,你 ...

  9. 捕获长时间不提交的SQL语句

    /* Formatted on 2014/5/19 17:16:16 (QP5 v5.240.12305.39476) */ SELECT s.sid, s.serial#, ss.sql_text ...

  10. PHP与MySqli

    一:链接数据库: $mysqli=@new mysqli("localhost","root","123456","msqldb& ...