首页 > 编程知识 正文

paxos算法图解,paxos算法原理

时间:2023-05-05 14:45:31 阅读:152474 作者:1610

Paxos算法是一种基于消息传递的容错一致性算法。 我们从简单的问题开始,逐步改进设计方案,最终得到Paxos,可以在逆境中工作的协议。

一.客户端-服务器模式

我们从最小的分布式系统开始,在这个系统中,只有两个节点,客户端节点和服务端节点,客户端节点可以操作(保存或者更新)远程服务器节点上的数据。

算法1.1朴素的客户端/服务器算法:客户端一次向服务器发送一个命令。

在具有消息丢失的消息传递模型中,该算法无法正常工作,客户端无法验证消息是否被正确接受到服务器。 因此,需要稍加改进。

算法1.2要确认的客户端/服务器算法

1 .客户端向服务器端发送请求命令消息。

2 .服务端接受请求并响应确认消息。

3 .客户端在一定的时间范围内没有收到服务器端发送的请求确认消息的回复时,重新发送命令请求消息。 该算法表明,客户端发送请求命令后,在收到服务端的确认之前,不会发送下一个请求命令。

客户端在发送过程中可能会丢失消息,或者在服务器端响应的确认消息中可能会丢失消息。 对于服务器端的确认消息丢失,在达到一定的超时时间后,如果客户端没有收到确认,则会重新发送消息。 此时,由于该消息已经在服务器端进行了处理,所以需要保证消息幂等的机制。 例如,给消息加上序列号。

该算法可以方便地扩展到多服务器端场景,客户端向各服务器端发送命令请求,当收到所有服务器的确认信息时,认为该命令执行成功。

如何处理多个客户端的场景?

基于可变消息延迟模型,得到了消息延迟时间是不固定的,且相同节点对的消息发送延迟时间也不同的定理。

定理1.1算法在多个客户端和服务器端运行时,服务器接收的命令顺序可能不同,导致不一致。

在以下场景中,假设在客户端c1、c2、服务器端s1、s2 .服务器端s1、s2上存在相同的值x=0。 此时,c1向服务器s1、s2发送x=x 1。 在同一时间,c2将x=2*x发送到服务器s1、s2。 假设c1比c2先到达s1,此时s1的状态值x为2,但如果c2比c1先到达s2,则s2的状态值x为1,集群状态出现不一致。

定义1.1 (状态复制)对于一系列节点,如果所有节点都按同样的顺序执行指令序列c1,c2,c3,c4……,那么这一系列节点实现状态复制的状态复制是分布式系统的基本特征

由于单个系统可以自然地提供状态复制,因此可以在单个服务器系统上实施序列化程序,以便自动对请求进行排序和分发命令,从而实现状态复制。

算法1.3使用单个串行化器进行状态复制

1 .所有客户端向串行化器发送请求命令

2 .串行化器逐个处理客户端请求,然后逐个向所有服务器发送客户端请求

3 .串行化器从所有服务器接收到确认消息后,会返回相应客户端命令已成功执行的消息。 这个想法有时也会成为主从复制。

算法有单点故障。 串行化器

是否可以构建更分散的方法来解决状态复制问题? 卸下串行化器。 任何时候最多只能有一个节点发送请求命令,可以采用独占或单独锁定的思想吗?

算法1.4两级锁定

第一阶段:

客户端请求所有服务器获取锁

步骤2:

if客户端获取所有服务器的锁定请求

客户端以可靠的方式向所有服务器发送命令请求并解除锁定

else

客户端释放已经获取的锁,休眠一段时间,进入阶段1算法1.4能否很好地应对节点崩溃? 该算法要求所有服务节点正常工作

如果要获取只有部分服务器的锁是否正常工作,获取过半数服务器的锁是否足够?

如果有两个或多个客户端尝试获取半数以上的服务器的锁定,如何处理死锁问题,是否需要解锁已经获取的服务器,如果客户端在解锁之前出现故障,该怎么办,是否需要与锁定不同的概念?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。