**这是我参与「第五届青训营 」伴学笔记创作活动的第7天,今天学习了分布式理论的相关的知识,下面是我的笔记
分布式理论初探
1、分布式定义
- 分布式系统定义:跨多个节点的计算机程序的集合
- 使用分布式系统的五大优势:去中心化、低成本、弹性、资源共享、可靠性高
- 分布式系统的挑战:故障、网络、环境、安全
2、分布式理论
2.1、CAP(一致性,可用性,分区容错性)
- 如果强调一致性和可用性,代表为传统数据库,如MySQL,Oracle等,通过事务机制和优秀的持久化策略,保证强一致性和高可用。(CA系统)
- 如果强调高可用和分区容错,代表为Nosql型数据库,如Redis,但是Redis作为内存数据库,无法保证数据的强一致性。(AP系统)
- 如果放弃可用性,保证数据一致性,就是CP系统。
它们的区别如下:
- CP系统:故障发生时,为了避免读到不一致的数据,可能拒绝访问
- AP系统:故障发生时,为了保证可用性,允许不同进程读到不同的数据
针对故障场景,可以通过故障转移的方式,做一个相对较优的解决方式:
- 允许一个进程作为Master,其他进程作为Backup,当故障时将请求转移给Backup进行处理
2.2、ACID()
- ACID理论是针对CA系统而言的,通常在数据库中具有广泛意义,我们讲MySQL数据库事务有四大特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),即ACID。
2.3、BASE
BASE理论是针对AP系统而言的,其来源于对大型互联网分布式实践的总结
- Basically Available(基本可用):假设系统,出现了不可预知的故障,但还是能用
- Soft state(软状态):允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性
- Eventually consistent(最终一致性):数据最终一定能够达到一致的状态
2.4、分布式事务
-
阶段提交(Two-phase Commit)
-
为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种演算法。
-
三阶段提交
- 针对两阶段提交的补充,将两阶段提交中的Prepare阶段,拆成两部分:CanCommit和PreCommit机制
- CanCommit阶段:询问是否可以执行;PreCommit阶段:重新确认是否可以执行
- DoCommit阶段:向所有人提交事务
-
MVCC(多版本并发控制)
-
维持一个数据的多个版本使读写操作没有冲突。所以既不会阻塞写,也不阻塞读。提高并发性能的同时也解决了脏读的问题。
-
悲观锁与乐观锁:
-
-
2.5、共识协议
Quorum NWR模型
- 三要素:
- N:在分布式存储系统中,有多少份备份数据
- W:代表一次成功的更新操作要求至少有w份数据写入成功
- R: 代表一次成功的读数据操作要求至少有R份数据成功读取
- 为了保证强一致性,需要保证 W+R>N
RAFT协议
- Raft协议是一种分布式一致性算法(共识算法),即使出现部分节点故障,网络延时等情况,也不影响各节点,进而提高系统的整体可用性。Raft是使用较为广泛的分布式协议。
Paxos协议
- Paxos算法与RAFT算法区别:
- Multi-Paxos 可以并发修改日志,而Raft写日志操作必须是连续的
- Multi-Paxos 可以随机选主,不必最新最全的节点当选Leader。