明天你会感谢今天奋力拼搏的你。
ヾ(o◕∀◕)ノヾ
分布式系统为解决跨多个节点的事务一致性问题,保障分布式事务的ACID (Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性)提出了2PC、3PC两个概念。
先了解2个角色定义:
2PC- 阶段1:提交事务请求(投票阶段)
2PC- 阶段2:执行事务提交(commit、rollback)
两段提交简单易懂,实现较为直接,但会出现一些问题:
三段提交其实就是在两段提交的第一阶段与第二阶段之间插入了一个预提交阶段
3PC- 阶段1:是否提交(类似2PC的阶段1)
3PC- 阶段2:预先提交(如果预提交有返回未成功则事务中断,回滚,成功就提交)
3PC- 阶段3:提交(commit、rollback)
三阶段提交是“非阻塞”协议。
3PC主要解决的单点故障问题,并减少阻塞,因为一旦参与者无法及时收到来自协调者的信息之后,他会默认执行commit。而不会一直持有事务资源并处于阻塞状态。但是这种机制也会导致数据一致性问题,因为,由于网络原因,协调者发送的abort响应没有及时被参与者接收到,那么参与者在等待超时之后执行了commit操作。这样就和其他接到abort命令并执行回滚的参与者之间存在数据不一致的情况。
CAP理论,也被称为布鲁尔定理,是分布式系统设计中的一个核心概念。它指出在一个分布式系统中,不可能同时完全实现以下三个特性:
根据CAP理论,在任何给定的时间点,一个分布式系统只能同时满足上述三个特性中的两个。这意味着必须在设计时做出权衡:
BASE理论是分布式系统设计中的一个重要概念,它与传统的ACID事务特性形成对比。BASE理论强调的是系统的可用性和分区容忍性,而不是严格的强一致性。以下是BASE理论的详细介绍:
Basically Available(基本可用)
Soft State(软状态)
Eventually Consistent(最终一致性)
BASE理论为分布式系统的设计提供了灵活性,特别是在大规模、高并发的互联网应用中。通过接受一定程度的不一致性和延迟,系统可以在面对故障时仍然保持良好的性能和用户体验。
Paxos算法是Leslie Lamport于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法,是分布式一致性的经典算法。
Paxos算法包含三个主要角色:
提案ID:全局唯一且单调递增的,提议者的提案ID不仅需要保证唯一性,还需要确保在整个系统中是单调递增的。通常通过结合提议者的唯一标识和一个递增计数器来实现。
Paxos分为两个阶段:准备阶段和接受阶段。
1. 准备阶段(Prepare Phase)
2. 接受阶段(Accept Phase)
用一个例子来理解这个流程:
设定A和B为提议者,提案ID分别为1和2。
设定C、D、E为接受者,负责审核提案并决定是否接受。
第一阶段:提案预请求(Prepare Request)
A和B同时向所有接受者(C、D、E)发出提案预请求:
A说:“大家好!我是A,我的提案ID是1,请回复我你们是否愿意接受我的提案!”
B说:“大家好!我是B,我的提案ID是2,请回复我你们是否愿意接受我的提案!”
接受者们的反应:
C和D先收到了A的预请求:
C和D检查自己的记录,发现目前没有接受过任何提案,于是回复A:“A,你的提案ID是1,我们目前没有接受过更高的提案,你可以继续!”
E先收到了B的预请求:
E检查自己的记录,发现目前没有接受过任何提案,于是回复B:“B,你的提案ID是2,我们目前没有接受过更高的提案,你可以继续!”
C和D随后收到了B的预请求:
C和D发现B的提案ID(2)比A的提案ID(1)更高,于是回复B:“B,你的提案ID是2,我们目前没有接受过更高的提案,你可以继续!”
E随后收到了A的预请求:
E发现A的提案ID(1)比B的提案ID(2)更低,于是拒绝A:“A,你的提案ID太低了,我已经见过更高的提案ID(2),我不能接受你的提案!”
第二阶段:正式提案(Propose Request)
A收到了C和D的回复,但没有收到E的回复(因为被拒绝了)。A决定向C和D发出正式提案:
A对C和D说:“这是我的正式提案,内容是X,请接受吧!”
C和D接受了A的提案,并记录下来。
B收到了C、D和E的回复,决定向所有接受者发出正式提案:
B对C、D和E说:“这是我的正式提案,内容是Y,请接受吧!”
C和D发现B的提案ID(2)比A的提案ID(1)更高,于是接受了B的提案,并更新自己的记录。
E也接受了B的提案。
最终结果:
B的提案(ID为2,内容为Y)被大多数接受者(C、D、E)接受,因此B的提案被选定(Chosen)。
A的提案(ID为1,内容为X)虽然被C和D短暂接受,但由于B的提案ID更高,最终被覆盖。
Paxos算法通过两阶段提交和多数派原则,解决了分布式系统中的一致性问题,具备高容错性和可靠性。适用于需要高一致性的分布式系统,如分布式数据库、分布式存储系统等。
全部评论