一种基于消息传递且具有高度容错特性的一致性算法。解决在存在宕机或者网络异常的集群中对某个数据的值达成一致性,并且保证无论在发生以上任何异常都不会破坏整个系统的一致性,具有容错性。

Paxos算法实现的是分布式系统多个结点之上数据的一致性,这个算法有如下特性

1.基于消息传递,允许消息传输的丢失,重复,乱序,但是不允许消息被攥改

2.在结点数少于半数失效的情况下仍然能正常的工作,结点失效可以在任何时候发生而不影响算法正常执行。

1.paxos算法综述

在paxos算法中,分为三种角色:proposer  acceptor  learner,在该算法中,必须满足的三个条件:

P1:每个acceptor必须批准它收到的第一个提案

P2:如果编号为M0,值为V0的提案被批准,那么所有编号大于M0且被选定的提案的值都为V0

a:如果编号为M0,值为V0的提案被批准,那么多有编号为M0且被acceptor批准的提案的值都为V0

b:若编号为M0,值为V0的提案被批准,那么之后所有proposer提交的编号大于M0的提案,其值都为V0

C:对于任意的Mn与Vn,如果提案Mn与Vn被提出,那么肯定存在一个由半数以上的acceptor组成的集合S,满足以下两个条件之一:

1).S中不存在任何被批准过的编号小于Mn的提案acceptor

2).选取S中所有acceptor批准的编号小于Mn的提案,其中编号最大的提案的Value值为Vn。

2.整个过程

Proposer生成提案:

1.prepare请求:Proposer选择一个新的提案编号Mn,然后向超过一半acceptor的acceptor集合发送请求,要求该集合中的acceptor做出如下回应:

1).不能再批准任何编号小于Mn的提案

2).若果acceptor已经批准过任何提案,那向proposer反馈已批准过得提案中编号最大的提案的值

2.如果proposer收到了半数以上的acceptor的响应结果,则它可以产生编号为Mn,值为Vn的提案,这里的Vn是指的所有响应中编号最大的提案的值。若半数以上的acceptor未批准过任何的提案,则Vn的值又Proposer任意选择

在提案确定之后,proposer会向acceptor集合再次发送该提案,称此请求为accept请求。

Acceptor批准阶段:

Acceptor会收到来自proposer的两种请求:

Prepare请求:Acceptor可以在任何时候响应一个prepare请求

Accept请求: 若acceptor为响应过任何编号大于Mn的请求,那么它就可以接受这个编号为Mn的请求。

Paxos算法简单介绍的更多相关文章

  1. 算法笔记_071:SPFA算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 具体编码   1 问题描述 何为spfa(Shortest Path Faster Algorithm)算法? spfa算法功能:给定一个加权连通图,选取一个 ...

  2. Paxos算法简单陈述

    上文二段式和三段式提交协议是相对比较容易理解的.1990年Leslie Lamport 提出的Paxos算法是一种基于消息传递且具有高度容错特性的一致性算法.但是Paxos算法比较复杂,对于不能沉心学 ...

  3. Berlekamp-Massey算法简单介绍

    请阅读本文的同学们注意:之前这篇博客和所附代码有点问题,求的不一定是最短递推式,非常抱歉 看毛爷爷的论文大概断断续续看了一个月了,看得不是很懂,google了一波好像很快就看懂了,就先口胡一下这个算法 ...

  4. 垃圾回收算法简单介绍——JVM读书笔记<二>

    垃圾回收的过程主要包含两部分:找出已死去的对象.移除已死去的对象. 确定哪些对象存活有两种方式:引用计数算法.可达性分析算法. 方案一:引用计数算法 给对象中加入一个引用计数器.每当有一个地方引用它时 ...

  5. 算法笔记_068:Dijkstra算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 使用Dijkstra算法得到最短距离示例 2.2 具体编码   1 问题描述 何为Dijkstra算法? Dijkstra算法功能:给出加权连通图中一个顶点, ...

  6. 算法笔记_070:BellmanFord算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 具体编码   1 问题描述 何为BellmanFord算法? BellmanFord算法功能:给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶 ...

  7. 算法笔记_069:Floyd算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 使用Floyd算法得到最短距离示例 2.2 具体编码   1 问题描述 何为Floyd算法? Floyd算法功能:给定一个加权连通图,求取从每一个顶点到其它所 ...

  8. PrincetonUniversity-Coursera 算法:算法简单介绍

    Course Overview What is this course? Intermediate-level survey course. Programming and proble solvin ...

  9. 分布式理论:深入浅出Paxos算法

    前言 Paxos算法是用来解决分布式系统中,如何就某个值达成一致的算法.它晦涩难懂的程度完全可以跟它的重要程度相匹敌.目前关于paxos算法的介绍已经非常多,但大多数是和稀泥式的人云亦云,却很少有人能 ...

随机推荐

  1. JS中转义字符的处理

    //去掉html标签 1 2 3 function removeHtmlTab(tab) {  return tab.replace(/<[^<>]+?>/g,'');//删除 ...

  2. 【转】double-array trie 译文+心得

    原文:http://blog.csdn.net/zzran/article/details/8462002 概论 下面将呈现一种新的内部数组结构,它便是double-array.double-arra ...

  3. 利用GeneratedKeyHolder获得新增数据主键值

    Spring利用GeneratedKeyHolder,提供了一个可以返回新增记录所对应的主键值的方法: int update(PreparedStatementCreator psc, KeyHold ...

  4. springmvc+mybatis+spring 整合 SSM

    A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技 ...

  5. 二、mongo数据库

    官网:https://www.mongodb.com/ 进入官网 右上角有个下载按钮Download 1.完成安装后:运行--cmd(命令面板) 2.常用命令: 打开数据库 mongod –dbpat ...

  6. 解决,Incorrect table definition; there can be only one auto column and it must be defined as a key

    今天在迁移项目时,操作数据库报错: Incorrect table definition; there can be only one auto column and it must be defin ...

  7. 你确实应该学习并使用的 10 个 C# 特性

    1) async / await 使用 async / await 模式,可以在执行代码块操作的时候不会阻塞 UI 或者当前的线程.即使该操作被某些执行动作延迟了(比如一个 web 请求),async ...

  8. CreateMutex 创建一个有名字的互斥量的时候hMutex=CreateMutex(NULL,TRUE,"tickets")报错

    编译器报错: 不能将参数 3 从“const char [8]”转换为“LPCWSTR”,怎么改成LPCWSTR类型 更改方法: hMutex=CreateMutex(NULL,TRUE,L" ...

  9. 同时操作两个数据库:报错Illegal attempt to associate a collection with two open sessions

    今天我在一个操作两个数据库的SSH里 同时插入1条数据 报错 Illegal attempt to associate a collection with two open sessions 在这里有 ...

  10. [MFC] 编辑框 EditControl 输入数字范围限制

    在MFC中,项目需要对编辑框EditControl的数字输入范围进行限制,主要有以下实现方式,各有优缺点,个人推荐第三种. 第一种:添加变量 为编辑框添加int.float变量的时候,可以填写最大值与 ...