首页 > 其他分享 > 分布式一致性协议 之 Paxos协议

分布式一致性协议 之 Paxos协议

时间:2023-10-16 10:36:26浏览次数:30  
标签:协议 Proposer 算法 basic 一致性 提案 Paxos 分布式

1、什么是Paxos

        Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。

        Paxos由 莱斯利·兰伯特(Leslie Lamport)于1998年在《The Part-Time Parliament》论文中首次公开,最初的描述使用希腊的一个小岛Paxos,描述了Paxos小岛中通过决议的流程,并以此命名这个算法,但是这个描述理解起来比较有挑战性。后来在2001年,莱斯利·兰伯特重新发表了朴实的算法描述版本《Paxos Made Simple》,自Paxos问世以来就持续垄断了分布式一致性算法,Paxos这个名词几乎等同于分布式一致性。

        Google的很多大型分布式系统都采用了Paxos算法来解决分布式一致性问题,如Chubby、Megastore以及Spanner等。开源的ZooKeeper,以及MySQL 5.7推出的用来取代传统的主从复制的MySQL GroupReplication等纷纷采用Paxos算法解决分布式一致性问题。然而,Paxos的最大特点就是难,不仅难以理解,更难以实现。

2、Paxos 解决了什么问题

        在常见的分布式系统中,总会发生诸如机器宕机或网络异常(包括消息的延迟、丢失、重复、乱序,还有网络分区)等情况。Paxos算法需要解决的问题就是如何在一个可能发生上述异常的分布式系统中,快速且正确地在集群内部对某个数据的值达成一致,并且保证不论发生以上任何异常,都不会破坏整个系统的一致性。

    注:这里某个数据的值并不只是狭义上的某个数,它可以是一条日志,也可以是一条命令(command)。。。根据应用场景不同,某个数据的值有不同的含义。

        在之前讲解2PC 和 3PC的时候在一定程度上是可以解决数据一致性问题的. 但是并没有完全解决就是协调者宕机的情况.

如何解决2PC和3PC的存在的问题呢?

步骤1-引入多个协调者

步骤2-引入主协调者,以他的命令为基准

     其实在引入多个协调者之后又引入主协调者.那么这个就是最简单的一种Paxos 算法.
    Paxos的版本有: Basic Paxos , Multi Paxos, Fast-Paxos, 具体落地有Raft 和zk的ZAB协议

 
3、Basic Paxos相关概念
角色介绍

    Client:客户端

        客户端向分布式系统发出请求,并等待响应。例如,对分布式文件服务器中文件的写请求。

    Proposer:提案发起者

        提案者提倡客户端请求,试图说服Acceptor对此达成一致,并在发生冲突时充当协调者以推动协议向前发展

    Acceptor: 决策者,可以批准提案

        Acceptor可以接受(accept)提案;并进行投票, 投票结果是否通过以多数派为准, 以如果某个提案被选定,那么该提案里的value就被选定了

    Learner: 最终决策的学习者

        学习者充当该协议的复制因素(不参与投票)

决策模型

basic paxos流程

basic paxos流程一共分为4个步骤:

    Prepare:Proposer提出一个提案,编号为N, 此N大于这个Proposer之前提出所有提出的编号, 请求Accpetor的多数人接受这个提案
    Promise:如果编号N大于此Accpetor之前接收的任提案编号则接收, 否则拒绝
    Accept:如果达到多数派, Proposer会发出accept请求, 此请求包含提案编号和对应的内容
    Accepted:如果此Accpetor在此期间没有接受到任何大于N的提案,则接收此提案内容, 否则忽略

4、Basic Paxos流程图
1. 无故障的basic Paxos

2. Acceptor失败时的basic Paxos

在下图中,多数派中的一个Acceptor发生故障,因此多数派大小变为2。在这种情况下,Basic Paxos协议仍然成功。

3. Proposer失败时的basic Paxos

Proposer在提出提案之后但在达成协议之前失败。具体来说,传递到Acceptor的时候失败了,这个时候需要选出新的Proposer(提案人),那么 Basic Paxos协议仍然成功

4. 当多个提议者发生冲突时的basic Paxos

最复杂的情况是多个Proposer都进行提案,导致Paxos的活锁问题

        针对活锁问题解决起来非常简单: 只需要在每个Proposer再去提案的时候随机加上一个等待时间即可

5、Multi-Paxos流程图

        针对basic Paxos是存在一定得问题,首先就是流程复杂,实现及其困难, 其次效率低(达成一致性需要2轮RPC调用),针对basic Paxos流程进行拆分为选举和复制的过程.
1. 第一次流程-确定Leader

2. 第二次流程-直接由Leader确认

6、Multi-Paxos角色重叠流程图

        Multi-Paxos在实施的时候会将Proposer,Acceptor和Learner的角色合并统称为“服务器”。因此,最后只有“客户端”和“服务器”。

转发自原文链接:https://blog.csdn.net/weixin_52851967/article/details/126210199

标签:协议,Proposer,算法,basic,一致性,提案,Paxos,分布式
From: https://www.cnblogs.com/xuzhujack/p/17766804.html

相关文章

  • 基于JT/T1078协议的开源 java视频服务系统
    ​首先,让我们来概述一下JT/T1078协议。JT/T1078协议,也称为"道路交通视频监控系统信息模型与通信协议",是由中华人民共和国交通运输部提出并规范的一种视频服务协议,主要应用于道路交通视频监控系统的设计和实施。其目的是确保视频服务的互操作性、可扩展性和安全性。基于JT/T1078......
  • 分布式操作系统市场规模超万亿,这事你怎么看?
    昨晚参加一个饭局,席间和一位做ICT投资的朋友聊起我们团队研发的分布式操作系统,请他分析一下分布式操作系统和连带的产业市场规模价值,我给他的依据是:分布式操作系统属于多机操作系统(windowslinux是单机系统),解决了大规模硬件资源和算力的聚合输出问题。打个比方,单机操作系统是一个人......
  • TCP/IP协议、三次握手、四次挥手详解
    TCP/IP协议模型(TCP协议)传输控制协议是一种面向连接的、可靠的、基于字节流的方式进行有序的无差错的数据传输通讯协议,它负责完成传输层所指定的功能,利用重发技术和拥塞控制机制,向应用程序提供可靠的通信连接,使它能够自动适应网上的各种变化。比如:数据报检测、流量控制、拥塞控......
  • RPC协议综述
    RPC框架标准模式。当客户端的应用想发起一个远程调用时,它实际是通过本地调用本地调用方的Stub。它负责将调用的接口、方法和参数,通过约定的协议规范进行编码,并通过本地的RPCRuntime进行传输,将调用网络包发送到服务器。服务器端的RPCRuntime收到请求后,交给提供方Stub进行解......
  • DNS协议及其工作原理
    DNS是域名系统(DomainNameSystem)的缩写,它是一种用于将域名转换为IP地址的分布式数据库系统。它是因特网的基石,能够使人们通过域名方便地访问互联网,而无需记住复杂的IP地址。DNS的历史可以追溯到1983年,当时因特网开始采用层次树状结构的命名方法,并使用分布式的域名系统DNS。DNS的设......
  • 一文读懂HTTP协议
    1.HTTP1.0和HTTP1.1之间有哪些区别连接方面,http1.0默认使用非持久连接,而http1.1默认使用持久连接。http1.1通过使用持久连接来使多个http请求复用同一个TCP连接,以此来避免使用非持久连接时每次需要建立连接的时延。资源请求方面,在http1.0中,存在一些浪费带宽的现象,例......
  • RIP协议
    动态路由静态路由,由网络管理员手工配置,只适用于小型网络。静态路由的缺点:在复杂的网络环境,配置量大自身不能随着网络的结构变化完成收敛动态路由:由运行同一种动态路由协议的设备通过沟通协商最终自行计算得出路由,是一种根据网络拓扑和链路状态动态调整路由表的路由协......
  • 从数据链路到神秘的MAC地址和ARP协议
    引言链路是指从一个结点到相邻结点的一段物理线路。数据链路是在链路的基础上增加了一些必要的硬件和软件。这些硬件包括网络适配器,而软件则包括协议的实现。在网络中,主机、路由器等设备都必须实现数据链路层。在局域网中,主机、交换机等网络设备都必须实现数据链路层,以便实现数......
  • Kafka:用于日志处理的分布式消息系统
    周末躺不平,摆不烂,卷不动,随便读一篇paper吧原文:Kafka:aDistributedMessagingSystemforLogProcessing作者:JayKreps/NehaNarkhede/JunRao这三尊神就是当初在LinkedIn开发Kafka的大佬摘要日志处理已经成为了当下互联网公司数据管道(datapipeline)的重要组成部分。......
  • Redis分布式锁实现一直到Redis相关操作总结
    FreeRedis实现源码///<summary>///开启分布式锁,若超时返回null///</summary>///<paramname="name">锁名称</param>///<paramname="timeoutSeconds">超时(秒)</param>///<paramname="autoDelay">自动延长锁超时时......