🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 简介 为了解决分布式场景下数据一致性的问题,paxos算法诞生了. 假设有一组可以提出提案的进程集合,提案用`[编号,值]`的形式描述,一致性算法需要保证以下几点: * 只有当一个提案被提出后才能被选定 * 这些进程集合中只有一个提案会被选定 * 如果某个进程认为某个提案被选定了,那么这个提案确实是已经被选定了 该一致性算法分为三个角色,我们用proposer,acceptor和learner来表示. proposer可以批准提案,acceptor可以提交提案,而learner只能获取已经被批准的提案. # 阶段一 1. proposer选择一个提案编号n,然后向超过半数的acceptor发送编号n的prepare请求. 2. 如果以个acceptor收到了一个编号为n的proposer请求,并且编号n大于这个acceptor之前已经响应的proposer请求编号,那么它就会将已经批准过的最大编号的提案作为响应发送给proposer,并且承诺不会再批准任何编号小于n的提案 # 阶段二 1. 如果proposer收到了半数以上的acceptor对编号n的prepare请求的回应,那么它就会发送一个针对`[n,v]`提案的accept请求给哪些acceptor.这里v值就是收到响应中编号最大的提案的值 2. 如果acceptor收到了这个针对`[n,v]`提案的accept请求,只要该acceptor还没有对编号大于n的提案进行响应,他就会通过这个提案 paxos通过引入过半提交的概念解决了在两阶段和三阶段提交协议中会出现的种种问题. 这个世界上只有一种分布式一致性算法,那就是paxos