分布式理论 | 青训营笔记
这是我参与「第五届青训营 」笔记创作活动的第5天
01. 分布式
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标,可以分为分布式计算、分布式存储、分布式数据库等. 优势与挑战是学习过或者使用过云服务的我相对熟悉的内容了,优势便是去中心化、低成本、弹性、资源共享、可靠性高.挑战有节点故障、不可靠的网络、异构的机器与硬件环境、安全.
-
常见分布式系统
- 分布式存储 GFS,Ceph,Hadoop HDPS,Zookeeper
- 分布式数据库 Google Spanner,TiDB,HBase,MongoDB
- 分布式计算 Hadoop,Spark,YARN
-
故障模型
- Byzantine failure:节点可以任意篡改发送给其他节点的数据
- AUthentication detectable byzantine failure(ABD):Byzantine failure 特例:节点可以篡改数据,但不能伪造其他节点的数据
- Performance failure:节点未在特定时间段内收到数据,即时间太早或太晚
- Omission failure:节点收到数据的时间无限晚,即收不到数据
- Crash failure:在omission failure基础上,增加了节点停止响应的假设,也即持续性地omission failure
- Fail-stop failure:在Crash failure的基础上增加了错误可检测的假设,知道错误码
- 正确性,时间,状态,原因是否可知
| 故障 | 描述 | 可能的类型 |
|---|---|---|
| 软件故障 | 如:进程crash、内存踩坏、状态不一致、配置错误、软件bug等 | Byzantine failure |
- 共识一致性
- 客户端a读到x=0,客户端c正在写入时,客户端a和b可能读到0或1,当c写入完成后,a和b读到一致的数据,我们称这样的一致性为Eventually consistent(最终一致性)
- 当客户端A读到更新的版本x=1后,及时将消息同步给其他客户端,这样其他客户端立即能获取到x=1 线性一致性
- Lamport 逻辑时钟
- CAP理论
| 选项 | 描述 |
|---|---|
| C(Consistence) | 一致性,🈯️数据在多个副本之间能够保持一致的特性(严格的一致性) |
| A(Availability) | 可用性,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应,但不能保证获取的数据为最新数据 |
| P(Network partitioning | 分区容错性,分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障 |
CAP理论往往运用于数据库领域,同样可以适用分布式存储方向
-
CA:放弃分区容错性,加强一致性和可用性,传统的单机数据库
-
AP 放弃强一致性,追求分区容错性和可用性,例如注重用户体验的系统
-
CP:放弃可用性,追求一致性和分区容错性,例如钱财安全相关系统
-
ACID理论 事务
- 原子性
- 一致性
- 隔离性
- 持久性
-
BASE理论
- 基本可用
- 软状态 中间状态 允许系统在多个不同节点的数据副本存在数据延时
- 最终一致性
-
分布式事务
- 二阶段提交 为了使给予分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种演算法
- 三个假设:1.引入协调者和参与者,互相进行网络通信2.所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上3.所有节点均不回永久性损坏
- 二阶段提交,若某个事务参与者反馈失败消息,说明该节点的本地事务执行不成功,必须回滚.
- 三阶段提交 CanCOmmit和PreCommit机制
-
MVCC
- 悲观锁 操作数据时锁住数据,完成后释放 期间其他人不可修改
- 乐观锁 不上锁 只在执行更新时判断别人是否修改数据,冲突时才放弃操作
- MVCC 为每个修改保存一个版本,和事务的时间戳相关联,可以提高并发性能,解决脏读问题
- TSO 时间戳预言机
-
Quorum NWR模型
- N:在分布式存储系统中,有多少份备份数据
- W:代表一次成功的更新操作要求至少有w份数据写入成功
- R:代表一次成功的读数据操作要求至少有R份数据成功读取
-
RAFT协议 分布式一致性算法,即使出部分节点故障,也不影响各节点.
-
LOG 日志 节点之间同步的信息,以只追加鞋的方式进行同步,解决了数据被覆盖的问题
-
Term 任期号 单调递增,每个 Term最多只有一个Leader
-
Committed 日志被复制到多数派节点,即可认为已经被提交
-
Applied 日志被应用到本地状态机 执行了log中命令 修改了内存状态 ...to be continued
-
Paxos协议 与RAFT算法区别
-
Multi-Paxos可以并发修改日志,而Raft写日志操作必须是连续的
-
Multi-Paxos可以随机选主,不必最新最全的节点当选Leader
-
Paxos 写入并发性能高 所有节点都能写入
-
没有一个节点有完整数据,恢复流程复杂
02.分布式实践
- Mapreduce
- input mapper shuffler reducer result 本科期间学习过hadoop 对这比较熟悉
- 分布式KV
- 架构 将海量结构化数据根据Key分成不同的Region,每个Region构建一个单机KV数据库,Region之间形成Raft Groups 做到强一致
- 当Node故障时,通过Raft Learner模式进行数据修复
- 弹性 当出现局部Key热点或数据膨胀时 region可以进行split操作 粉刺两个子region 反之收缩时进行merge
总结
很多模型之前没有学习过,也没有具体进行实践,个人认为还需要实际调试后才能理解...