这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天。
分布式概述
什么是分布式
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。
优势:
1.去中心化
2.低成本
3.弹性
4.资源共享
5.可靠性高
挑战:
1.普遍的节点故障
2.不可靠的网络
3.异构的机器与硬件环境
4.安全
常见的分布式系统
分布式存储:Google File System、Ceph、Hadoop HDFS、Zookeeper
分布式数据库:Google Spanner、TiDB、HBase、MongoDB
分布式计算:Hadoop、Spark、YARN
系统模型
故障模型
·Byzantine failure
·Authentication detectable byzantine failure
·Performance failure
·Omission failure
·Crash failure
·Fail-stop failure
拜占庭将军问题
共识和一致性
时间和事件顺序
CAP理论
C(Consistence)一致性
A(Availability)可用性
P(Network Partitioning)分区容错性
通常用于数据库,也可用于分布式系统
CA:放弃分区容错性,加强一致性和可用性,传统淡季数据库的选择
AP:放弃(强)一致性,追求分区容错性和可用性,例如一些注重用户体验的系统
CP:放弃可用性,追求一致性和分区容错性,例如与钱财安全相关的系统
ACID理论
原子性(A)、一致性(C)、隔离型(I)、持久性(D)
Base理论
Base理论是对CAP中一直性和可用性权衡的结果,其核心思想是:
Basically Available(基本可用)、Soft state(软状态)、Eventually consistent(最终一致性)
分布式事务
二阶段提交
三个假设:
1.协调者(Coordinator)和参与者(Participants)进行网络通信
2.所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上
3.所有节点不会用就行损坏,即使损坏后仍然可以恢复
需要注意的问题:
1.性能问题
2.协调者单点故障问题
3.网络分区带来的数据不一致
三阶段提交
将两阶段提交中的Prepare阶段拆成两部分:CanCommit和PreCommit机制
解决了两个问题:
1.单点故障问题
2.阻塞问题
另外引入超时机制,在等待超时之后,会继续进行事务的提交。
MVCC
·悲观锁
·乐观锁
MVCC既不会阻塞写,也不会阻塞读,解决脏读问题。
Quorum NWR模型
N:分布式系统中,有多少份备份数据
W:代表一次成功的更新操作要求至少有w份数据写入成功
R:代表一次成功的读数据操作要求至少有R份数据成功读取
为了保证强一致性,需要保证W+R>N
RAFT协议
一种分布式一致性算法,即使出现部分节点故障,网络延时等情况,也不影响各节点,进而提高系统的整体可用性。
Leader-领导者
Follower-跟随者
Candidate-备选者
Log(日志)
Term(任期号)
Committed
Applied