这是我参与「第五届青训营 」笔记创作活动的第5天。
一、本堂课重点内容:
- 系统模型
- 理论基础
- 分布式事务
- 共识协议
二、详细知识点介绍:
- 分布式定义:分布式系统是计算机程序的结合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标,可以分为分布式计算,分布式存储,分布式数据库等。
- 系统模型
- 故障模型
- Byzantine failure:节点可以任意篡改发送给其他节点的数据;
- Authentication detectable byzantine failure (ADB):Byzantine failure的特例,节点可以篡改数据,但不能伪造其他节点的数据;
- Performance failure:节点未在特定时间段内收到数据,即时间太早或太晚;
- Omission failure:节点收到数据对时间无限晚,即收不到数据;
- Crash failure:在Omission failure的基础上,增加了节点停止响应的假设,即持续性地Omission failure(只知道状态,不知道原因);
- Fail-stop failure:在Crash failure的基础上增加了错误可检测的假设。
- 故障模型
- 理论基础
- CAP理论:C:一致性,指数据在多个副本之间能够保持一致的特性;A:可用性,指系统提供的服务,必须一直处于可用的状态,每次请求都能获得到非错的响应,但是不保证获取的数据为最新数据;P:分区容错性,分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。CAP理论往往运用于数据库领域,同样可以适用于分布式存储方向。
- CA:传统的单机数据库的选择;
- AP:注重用户体验的系统;
- CP:与钱财安全相关的系统。
- ACID理论:数据库事务拥有四个特性ACID,即分别是原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation)和持久性(Durability )。
- 原子性(A)。原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
- 一致性(C)。一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态
- 隔离性(I)。隔离性是当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
- 持久性(D)。持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
- BASE理论:Base理论是对CAP中一致性和可用性权衡的结果,其来源于对大型互联网分布式实践的总结,是基于CAP定理逐步演化而来的。其核心思想是:
- Basically Available(基本可用)∶假设系统,出现了不可预知的故障,但还是能用,相比较正常的系统而言︰响应时间上的损失,或功能上的损失。
- Soft state (软状态)︰允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时。
- Eventually consistent(最终一致性)︰系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有客户端对系统的数据访问最终都能够获取到最新的值。
- CAP理论:C:一致性,指数据在多个副本之间能够保持一致的特性;A:可用性,指系统提供的服务,必须一直处于可用的状态,每次请求都能获得到非错的响应,但是不保证获取的数据为最新数据;P:分区容错性,分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。CAP理论往往运用于数据库领域,同样可以适用于分布式存储方向。
- 分布式事务
- 二阶段提交(Two-phase Commit):为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种演算法。它的三个假设为:
- 引入协调者(Coordinator )和参与者( Participants ),互相进行网络通信;
- 所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上;
- 所有节点不会永久性损坏,即使损坏后仍然可以恢复。
- 三阶段提交:将两阶段提交中的Prepare阶段,拆成两部分:CanCommit和PreCommit机制。解决了两个问题:单点故障问题和阻塞问题。
- 二阶段提交(Two-phase Commit):为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种演算法。它的三个假设为:
三、实践练习例子:
- MapReduce
- 分布式KV
四、课后个人总结:
- 对RAFT理解很模糊。