这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
本文是对于掘金课程的课程笔记,针对课程内容的一些重难点、本人在学习分布式系统知识时候进行的简单记录。本次课程基本为理论课程,接下来我将对微服务架构中的重要内容进行说明。
其实在前面学习架构的时候就提出了分布式系统的这一概念,也大致知道我们为何需要分布式系统来进行开发,这次的笔记主要来记录分布式系统中的具体的重要概念、一些算法以及应用实践等。
一、本堂课的重点内容
- 分布式概述
- 系统模型
- 理论基础
- 分布式事务
- 共识协议
- 分布式实践
二、详细知识点介绍
分布式概述
分布式系统是计算机程序的集合,程序利用跨多个独立计算节点的计算资源来实现共同目标。
优势:去中心化;低成本;弹性 挑战:普遍节点故障;不可靠的网络;异构的机器与硬件环境
系统模型
故障模型:
- 拜占庭故障:节点可以任意篡改发送给其他节点的数据
- ADB:拜占庭的特例,可以篡改数据但是不能伪造其他节点的数据
- Performance failure:节点未在特定时间段内收到数据,时间太早或者太晚
- Omission failure:节点收到数据的时间无限晚,即收不到数据
- Crash failure:在omission failure的基础上,增加了节点停止响应的假设(例如宕机)
- Fail-stop failure:在crash failure的基础上增加了错误可检测的假设
拜占庭将军问题
两支军队的将军只能派信使穿越敌方通信,以此约定进攻时间,如何在信使可能被俘虏的情况下就进攻时间达成共识。
结论:理论上永远无法达成共识。
共识与消息传递的不同:即使保证了消息传递成功,也不能保证达成共识。
共识和一致性
- 最终一致性:A和B最终能读到一致的数据
- 线性一致性:约等同于强一致,A读到更新后即时同步给其他客户端
理论基础
CAP理论
- C:consistence,一致性,保持多个副本的一致
- A:availability,可用性,保持可用状态
- P:network partitioning,分区容错性
可以采取CA,AP,CP
ACID理论
ACID分别对应原子性,一致性,隔离性,持久性
- A:操作要么全部成功要么全部失败
- C:执行前后处于一致的一致性状态
- I:事务不能被其他事务的操作干扰
- D:事务一旦被提交改变就是永久的
BASE理论
- 基本可用:假设系统出现故障,基本还是能用
- 软状态:允许数据存在中间状态
- 最终一致性:最终数据能够一致
分布式事务
二阶段提交
- Prepare阶段:协调者向参与者发送prepare
- Commit阶段:协调者发送commit消息,然后参与者回复ack
三阶段提交
解决了两个问题:单点故障问题;阻塞问题
引入超时机制,在等待超时之后,会继续进行事务的提交
cancommit->precommit->docommit,三阶段
MVCC
是一种并发控制的方法,维持一个数据的多个版本使读写操作没有冲突
共识协议
Quorum NWR模型
三要素NWR
- N:在分布式存储系统中,有多少分备份数据
- W:一次成功的更新操作中至少有W份数据写入成功
- R:同上,R份读取成功
为了强一致性,需要W+R>N
通常用在append only中,因为允许数据被覆盖(问题根源)
RAFT协议
是一种分布式一致性算法(共识算法),即使出现部分节点故障、网络延时等问题,也不影响各节点
- Leader:领导者,负责处理所有客户端请求
- Follower:跟随者,不会发送任何请求,接受并持久化leader同步的日志
- Candidate:leader选举过程中的临时角色
Paxos协议
与RAFT的区别:
- Multi-paxos可以并发修改日志,raft写日志操作必须连续
- multi-paxos可以随机选主,不必最新最全的节点当选leader
优势:写入并发性高,所有节点都可以写入 劣势:没有一个节点有完整的最新的数据,恢复流程复杂,需要同步历史记录
分布式实践
这一部分我完成了一个mapreduce词频统计的小项目,环境是ubuntu,使用的是hdfs+mapreduce,这一部分我将在后续的笔记中进行单独说明。
三、课后个人总结
总的来说,通过本次课程,我更加清楚地理解了分布式系统的含义,包括为什么要用分布式系统,分布式系统的优势,以及分布式系统中的各类重要概念,各种故障模型与共识协议等,对于我后续的开发大有帮助。