目录
1.实验题目:基于Python及mysql的multi-paxos算法的模拟复现 3
2.实验过程(包括实验环境、实验内容的描述、完成实验要求的知识或技能): 3
实验环境: 3
实验内容: 3
(1) .实验相关算法的简介: 3
(2).通俗理解Paxos流程 4
(3).具体的代码实现 5
3. 实验结果 5
4. 总结与感悟 6
5. 代码附录 6
1.实验题目:基于Python及mysql的multi-paxos算法的模拟复现
2.实验过程(包括实验环境、实验内容的描述、完成实验要求的知识或技能):
实验环境:
Win10,开发平台的名称及版本:python3.8 (pycharm),mysql数据库
实验内容:
(1).实验相关算法的简介:
Paxos算法解决的问题正是分布式一致性问题,即一个分布式系统中的各个进程如何就某个值(决议)达成一致。
Paxos算法运行在允许宕机故障的异步系统中,不要求可靠的消息传递,可容忍消息丢失、延迟、乱序以及重复。它利用大多数 (Majority) 机制保证了2F+1的容错能力,即2F+1个节点的系统最多允许F个节点同时出现故障。
一个或多个提议进程 (Proposer) 可以发起提案 (Proposal),Paxos算法使所有提案中的某一个提案,在所有进程中达成一致。系统中的多数派同时认可该提案,即达成了一致。最多只针对一个确定的提案达成一致。
Paxos将系统中的角色分为提议者 (Proposer),决策者 (Acceptor),和最终决策学习者 (Learner):
Proposer: 提出提案 (Proposal)。Proposal信息包括提案编号 (Proposal ID) 和提议的值 (Value)。
Acceptor:参与决策,回应Proposers的提案。收到Proposal后可以接受提案,若Proposal获得多数Acceptors的接受,则称该Proposal被批准。
Learner:不参与决策,从Proposers/Acceptors学习最新达成一致的提案(Value)。
在多副本状态机中,每个副本同时具有Proposer、Acceptor、Learner三种角色。
Paxos算法中的角色
Paxos算法(basic-paxos)通过一个决议分为两个阶段(Learn阶段之前决议已经形成):
第一阶段:Prepare阶段。Proposer向Acceptors发出Prepare请求,Acceptors针对收到的Prepare请求进行Promise承诺。
第二阶段:Accept阶段。Proposer收到多数Acceptors承诺的Promise后,向Acceptors发出Propose请求,Acceptors针对收到的Propose请求进行Accept处理。
第三阶段:Learn阶段。Proposer在收到多数Acceptors的Accept之后,标志着本次Accept成功,决议形成,将形成的决议发送给所有Learners。
Multi-Paxos只是一种思想,不是算法。Multi-Paxos算法则是一种统称而已。它是指基于Multi-Paxos思想,通过多个Basic Paxos实例来实现一系列值的共识算法。
Multi-Paxos实际上是simple Paxos实例(插槽)的序列,每个实例都按顺序编号。每个状态转换都被赋予一个“插槽编号”,集群的每个成员都以严格的数字顺序执行转换。为了更改群集的状态(例如,处理传输操作),我们尝试在下一个插槽中就该操作达成一致性。具体来说,这意味着向每个消息添加一个插槽编号,并在每个插槽的基础上跟踪所有协议状态。(simple-paxos就单个静态值达一致性本身并不实用,我们需要实现的集群系统(银行账户服务)希望就随时间变化的特定状态(账户余额)达成一致。所以需要使用Paxos就每个操作达成一致)