这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
通过今天的学习,我重点的学习到了分布式的基本理论知识:CAP理论,ACID理论以及BASE理论;分布式事务的解决方案:二阶段提交,三阶段提交以及MVCC.明白了分布式架构是从最简单的单机架构逐步演进而来的,从而应对传统架构所带来的一系列问题,达到三高(高性能,高并发,高可用).
一、什么是分布式
- 分布式系统定义:跨多个节点的计算机程序的集合
- 使用分布式系统的五大优势:去中心化、低成本、弹性、资源共享、可靠性高
- 分布式系统的挑战:故障、网络、环境、安全
二、分布式理论
CAP理论
-
CAP的定义,分别代表一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)。三者无法同时达到
-
CAP诞生了三类系统:
- CA系统:传统数据库的代表
- AP系统:放弃强一致性,保证高可用,不少nosql存储系统采用
- CP系统:放弃可用性,保证数据一致性
-
举例说明两个分布式进程之间同步数据,当出现故障的时候,如何选择不同的CAP系统,以及带来的影响
- CP系统:故障发生时,为了避免读到不一致的数据,可能拒绝访问
- AP系统:故障发生时,为了保证可用性,允许不同进程读到不同的数据
-
针对故障场景,可以通过故障转移的方式,做一个相对较优的解决方式:
- 允许一个进程作为Master,其他进程作为Backup,当故障时将请求转移给Backup进行处理
ACID理论
-
ACID理论是针对CA系统而言的,通常在数据库中具有广泛意义
-
事务是数据库系统中非常重要的概念,它是数据库管理系统执行过程中的一个逻辑单元,它能够保证一个事务中的所有操作要么全部执行,要么全都不执行
-
数据库事务拥有四个特性ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)
BASE理论
BASE理论是针对AP系统而言的,其来源于对大型互联网分布式实践的总结
-
Basically Available(基本可用):假设系统,出现了不可预知的故障,但还是能用
-
Soft state(软状态):允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性
-
Eventually consistent(最终一致性):数据最终一定能够达到一致的状态
三、分布式事务
二阶段提交
-
定义:
- 二阶段提交(Two-phase Commit):为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种演算法。
-
三个假设:
- 协调者和参与者进行通信
- 预写式日志被保持在可靠的存储设备上
- 所有节点不会永久性损坏,即使损坏后仍然可以恢复
-
正常流程:Prepare阶段和Commit阶段
-
异常流程:Prepare阶段失败 -> 回滚;协调者宕机 -> 重新启用新的协调者;双故障重启 -> 数据库管理员介入
-
两阶段提交需解决的问题:
- 性能问题:需要多次网络通信,资源需要等待并锁定
- 新协调者:如何确定状态选出新协调者
- Commit阶段网络分区带来的数据不一致:非所有节点都收到Commit请求
-
两个思考:
- 日志被保存在「可靠」的存储设备上。如何保证这一点?
- 参与者Commit了,但Ack信息协调者没收到。怎么办?
三阶段提交
- 针对两阶段提交的补充,将两阶段提交中的Prepare阶段,拆成两部分:CanCommit和PreCommit机制
- CanCommit阶段:询问是否可以执行;PreCommit阶段:重新确认是否可以执行
- DoCommit阶段:向所有人提交事务
MVCC
-
MVCC:多版本并发控制的方法。维持一个数据的多个版本使读写操作没有冲突。所以既不会阻塞写,也不阻塞读。提高并发性能的同时也解决了脏读的问题。
-
悲观锁和乐观锁
- 悲观锁:操作数据时直接把数据锁住,直到操作完成后才会释放锁;上锁期间其他人不能修改数据
- 乐观锁:不会上锁,只是在执行更新时判断别人是否修改数据,只有冲突时才放弃操作
-
版本的选取:使用物理时钟或逻辑时钟
-
物理时钟:提供TrueTime API,有Master节点维持一个绝对时间,保证各个服务器之间时钟误差控制在ϵ内,通常ϵ<7ms。
-
逻辑时钟:中心化授时的方式--时间戳预言机(TSO),好处是无需硬件的支持
-