分布式系统一致性算法

CAP理论

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分区容错性(网络分区)Partition tolerance

CAP理论的特点,就是CAP只能满足其中2条

分布式系统一致性算法_第1张图片

CA(放弃P):将所有的数据放在一个节点。满足一致性、可用性。

AP(放弃C):放弃强一致性,用最终一致性来保证。

CP(放弃A):一旦系统遇见故障,受到影响的服务器需要等待一段时间,在恢复期间无法对外提供服务。

2P理论(two phase commit)

二段提交(RDBMS(传统关系型数据库)经常就这种机制,保证强一致性

提交步骤:

阶段1:提交事务请求(投票阶段,任何一个结点失败,不能继续进行提交

分布式系统一致性算法_第2张图片

阶段2:执行事务提交(commit、rollback。任何一个结点失败 rollback

分布式系统一致性算法_第3张图片

3P理论(three phase commit)

阶段1:是否可以进行事务提交

分布式系统一致性算法_第4张图片

阶段2: 提交事务请求

分布式系统一致性算法_第5张图片

阶段3:执行事务提交

分布式系统一致性算法_第6张图片

怎么保证事务一定提交?

事务管理器将,所有数据结点list存储,循环执行操作,设立flag标记状态。

根据flag状态,执行操作或回滚。

BASE理论

  • 基本可用(bascially available):在分布式系统出现,允许损失部分可用性(服务降级、页面降级)
  • 软状态(soft state):允许分布式系统出现中间状态。而且中间状态不影响系统的可用性。
  • 最终一致性(Eventually consistent):data replications经过一段时间达到一致性。

Paxos算法

       Paxos算法是莱斯利·兰伯特(英语:Leslie Lamport,LaTeX中的“La”)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。

      Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就是Paxos,其它的算法都是残次品。

基于拜占庭将军问题解析:

分为以下两种角色:

  • proposer:参谋1,参谋2(提交者)
  • acceptor: 将军1,将军2,将军3(决策者)

1、先后提议的场景

分布式系统一致性算法_第7张图片

  1. 参谋1发起提议,派通信兵带信给3个将军,内容为(编号1)
  2. 3个将军收到参谋1的提议,由于之前还没有保存任何编号,因此把(编号1)保存下来,避免遗忘;同时让通信兵带信回去,内容为(ok)
  3. 参谋1收到至少2个将军的回复,再次派通信兵带信给3个将军,内容为(编号1,进攻时间1)
  4. 3个将军收到参谋1的时间,把(编号1,进攻时间1)保存下来,避免遗忘;同时让通信兵带信回去,内容为(Accepted)
  5. 参谋1收到至少2个将军的(Accepted)内容,确认进攻时间已经被大家接收;
  6. 参谋2发起提议,派通信兵带信给3个将军,内容为(编号2)
  7. 3个将军收到参谋2的提议,由于(编号2)比(编号1)大,因此把(编号2)保存下来,避免遗忘;又由于之前已经接受参谋1的提议,因此让通信兵带信回去,内容为(编号1,进攻时间1)
  8. 参谋2收到至少2个将军的回复,由于回复中带来了已接受的参谋1的提议内容,参谋2因此不再提出新的进攻时间,接受参谋1提出的时间

2、交叉提交场景

分布式系统一致性算法_第8张图片

1.参谋1发起提议,派通信兵带信给3个将军,内容为(编号1);
2.3个将军的情况如下
       a)将军1和将军2收到参谋1的提议,将军1和将军2把(编号1)记录下来,如果有其他参谋提出更小的编号,将被拒绝;同时让通信兵带信回去,内容为(ok)
        b)负责通知将军3的通信兵被抓,因此将军3没收到参谋1的提议
3.参谋2在同一时间也发起了提议,派通信兵带信给3个将军,内容为(编号2)
4.3个将军的情况如下
        a)将军2和将军3收到参谋2的提议,将军2和将军3把(编号2)记录下来,如果有其他参谋提出更小的编号,将被拒绝;同时让通信兵带信回去,内容为(ok)
        b)负责通知将军1的通信兵被抓,因此将军1没收到参谋2的提议
5.参谋1收到至少2个将军的回复,再次派通信兵带信给有答复的2个将军,内容为(编号1,进攻时间1)
6.2个将军的情况如下
        a)将军1收到了(编号1,进攻时间1),和自己保存的编号相同,因此把(编号1,进攻时间1)保存下来;同时让通信兵带信回去,内容为(Accepted)
       b)将军2收到了(编号1,进攻时间1),由于(编号1)小于已经保存的(编号2),因此让通信兵带信回去,内容为(Rejected,编号2)
7.参谋2收到至少2个将军的回复,再次派通信兵带信给有答复的2个将军,内容为(编号2,进攻时间2)
8.将军2和将军3收到了(编号2,进攻时间2),和自己保存的编号相同,因此把(编号2,进攻时间2)保存下来,同时让通信兵带信回去,内容为(Accepted)
9.参谋2收到至少2个将军的(Accepted)内容,确认进攻时间已经被多数派接受
10.参谋1只收到了1个将军的(Accepted)内容,同时收到一个(Rejected,编号2)
参谋1重新发起提议,派通信兵带信给3个将军,内容为(编号3)
11.3个将军的情况如下
       a)将军1收到参谋1的提议,由于(编号3)大于之前保存的(编号1),因此把(编号3)保存下来;由于将军1已经接受参谋1前一次的提议,因此让通信兵带信回去,内容为(编号1,进攻时间1)
       b)将军2收到参谋1的提议,由于(编号3)大于之前保存的(编号2),因此把(编号3)保存下来;由于将军2已经接受参谋2的提议,因此让通信兵带信回去,内容为(编号2,进攻时间2)
        c)负责通知将军3的通信兵被抓,因此将军3没收到参谋1的提议
12.参谋1收到了至少2个将军的回复,比较两个回复的编号大小,选择大编号对应的进攻时间作为最新的提议;参谋1再次派通信兵带信给有答复的2个将军,内容为(编号3,进攻时间2)
13.将军1和将军2收到了(编号3,进攻时间2),和自己保存的编号相同,因此保存(编号3,进攻时间2),同时让通信兵带信回去,内容为(Accepted)
14.参谋1收到了至少2个将军的(accepted)内容,确认进攻时间已经被多数派接受。

你可能感兴趣的:(分布式,分布式,pasox)