分布式系统是一个硬件或软件组成分布式在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统、
分布式系统常见特征
- 分布性
多台计算机在空间上随意分布,机器的分布情况也会随时变动
- 对等性
分布式系统的中的计算机没有主从之分,没有控制整个系统的主机,副本是分布式系统常见的概念,是对数据和服务的一种冗余发方式
- 并发性
- 缺乏全局时钟
- 故障总是会发生
分布式环境需要考虑的问题
- 通信异常
- 网络分区 (网络延迟)
- 三态(失败、成功、超时)
分布式系统事务概念
ACID
- 原子性
- 一致性
- 隔离性
- 持久性
CAP
- 一致性
- 可用性
- 分区容错
Base理论
- 基本可用
- 软状态
- 最终一致
一致性协议
2PC
2PC(two-Phase-Commit),即二阶段提交,为了保持事务处理的原子性和一致性而设计算法。
阶段一:提交事务请求
-
事务询问
协调者向所有的参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的相应 -
执行事务
各参与者执行事务操作,并将Ubdo和redo信心记入事务日志。 -
个参与者向协调者反馈事务询问的相应
如果参与者成功执行了事务操作,那么久反馈协调者Yes,如果参与者没有执行成功,则反馈事务不可执行。
阶段二:执行事务提交
-
执行事务提交
全部参与者都反馈Yes
1. 发送提交请求
2. 事务提交
3. 反馈事务提交结果
4. 完成事务 -
中断事务
任何一个事务参与者反馈No响应
1. 协调者向所有参与者节点发送回滚请求
2. 事务回滚
3. 反馈事务回滚结果
4. 中断事务
优缺点:
原理简单,实现方便。
缺点是:同步阻塞、单点问题、脑裂、太过保守。
同步阻塞问题:在二阶段提交执行过程中,所有参与该事务操作的逻辑都处于阻塞状态,也就是说各个参与者在等待其他参与者响应的过程,将无法进行任何操作
单点问题: 如果事务协调者在阶段二出现问题,其他参与者将一直会处于锁定资源的状态中。
数据不一致:二阶段执行事务提交的时候,当协调者向所有参与者发送commit请求之后,发生了局部网络错误或者协调者没有发完Commit请求时,会出现收到的事务提交请求的参与者提交了事务,没有收到的参与者没有提交事务,出现了事物不一致的情况。
太过保守,任意一个节点的失败都会导致整个事务的失败。
3PC
3PC是2PC的改进版,主要是将二阶段提交事务请求过程一分为二,形成有CanCommit、PreCommit、do Commit三个阶段组成的我hi素问处理协议。
阶段一 CanCommit
- 事务询问
- 各个参与者向十五协调者反馈事务询问的结果
阶段二 PreCommit
执行事务预提交:
假如协调者从所有参与者获取的反馈都是yes相应,那么久执行事务预提交。- 发生预提交请求
- 事务预提交
- 各个参与者向协调者反馈事务执行的响应
中断事务
假如任何一个参与者向协调者反馈NO响应。就会中断事务。 - 发送中断事务请求
- 中断事务。
阶段三 doCommit
执行提交: - 发生体提交请求
- 事务提交
- 反馈事务提交信息
- 完成事务
中断事务: - 发生中断
- 事务回滚
- 反馈事务回滚结果
- 中断事务
Paxos算法
问题描述
对于一个一致性算法来说需要保证一下几点:
- 在这些被提出的提案中,只有一个会被选中
- 如果没有提案被提出,那么就不会有被选定的提案
- 当一个提案被选中后,进程应该可以获取被选定的提案信息
三种角色
- Proposer 提议人
- Acceptor 参与决策人
- Learner 不参与决策 观察者
算法陈述
阶段一
1. Proposer选择一个提案编号Mn,然后想Accept的某个超过半数子集成员发送标为Mn的Prepare请求
2. 如果一个Accept收到一个编号为Mn的Prepare请求,且编码Mn大于该Accept已经相应的所有Prepare请求编号,那么它就会将它已经批准过的最大编号的提案作为响应反馈给Proposere,同时该Accept会承诺不会再批准任何编号校园Mn的提案。
阶段二
1. 如果Proposer收到来自半数以上的Acceptor对于其发出编号Mn的Prepare请求的响应,那么它就会发生一个针对[Mn,Vn]提案的Accept请求给Accentor,Vn的值就是收到响应中编号最大的提案的值,如果相应中不包含任何提案,那么它就是任意值。
2. 如果Acceptor收到针对[Mn,Vn]提案的Accent请求,只要该Acceptor尚未对编号大于Mn的Prepare请求做出相应,它即可也通过这个提案。