分布式理论 | 青训营笔记

101 阅读5分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

内容源于青训营课堂视频以及一些文档,若有错误欢迎及时指出

1 分布式概述

什么是分布式?

分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。

优势

  1. 去中心化
  2. 低成本
  3. 弹性
  4. 资源共享
  5. 可靠性高:多副本冗余(本地冗余、异地冗余)

挑战

  1. 普遍的节点故障
  2. 不可靠的网络:程序状态变多变复杂
  3. 异构的机器与硬件环境
  4. 安全

W-H-W

使用者视角

  • why
    1. 数据爆炸
    2. 成本低
  • how
    1. 分布式框架
    2. 成熟的分布式系统
  • what
    1. 理清规模,负载,一致性要求
    2. 明确稳定性要求,制定技术方案

学习者视角

  • why
    1. 后端开发必备技能
    2. 帮助理解后台服务器之间写作的机制
  • how
    1. 掌握分布式理论
    2. 了解一致性协议
  • what
    1. 深入要点,针对难点
    2. 实践

常见的分布式系统

分布式存储

  • GFS,谷歌分布式文件系统(重要 )
  • Ceph:统一的分布式存储系统
  • Hadoop HDFS:基于GFS架构的开源分布式文件系统
  • Zookeeper:高可用的分布式数据管理与系统协调框架

分布式数据库

  • Google Spanner
  • TiDB
  • HBase
  • MongoDB

分布式计算

  • Hadoop
  • Spark
  • YARN

2 系统模型

故障模型

拜占庭将军问题

TCP三次握手是在两个方向确认包的序列号,增加超时重传,是这个问题的一个工程解

  • 为何三次握手,而不是两次或四次?
  • 握手过程中,如何FIN报文丢失,发生什么?

3 理论基础

CAP理论

  • C:一致性

  • A:可用性

  • P:分区容错性

cap理论往往运用于数据库领域,童扬可适用于分布式存储方向

CA:放弃分区容错性,加强一致性和可用性,就是传统的单机数据库

AP:放弃强一致性,追求分区容错和可用,适用于一些注重用户体验的系统

CP:放弃可用性,追求一致性和分区容错性,一些钱财安全相关的系统

ACID理论

  • A:原子性
  • C:一致性
  • I:隔离性
  • D:持久性

BASE理论

是对CAP理论中一致性和可用性权衡的结果,是基于CAP在实践中演化的结果

  • BA:基本可用
  • S:软状态
  • E:最终一致性

4 分布式事务

二阶段提交

为了使基于分布式系统架构下所有节点在进行事务提交时保持一致性而设计的一种演算法

问题

  1. 性能
  2. 协调者单点故障
  3. 网络分区带来的数据不一致

三阶段提交

将二阶段提交的prepare阶段拆成两部分:CanCommit和PreCommit机制

解决了单点故障和阻塞问题

引入超时机制

5 共识协议

  • Quorum NWR模型
  • RAFT协议
  • Paxos协议

6 分布式实践

  • MapReduce
  • 分布式KV

MapReduce

Mapper:将输入分解为多个job来并行处理,彼此间几乎没有依赖关系

Shuffler:将mapper结果打乱,防止数据倾斜

Reducer:对map阶段的结果进行全局汇总

思考题

  1. 分布式系统有哪些优势和挑战?
  2. 两将军问题为什么理论上永远达不成共识?
  3. 为什么TCP采用三次握手?而不是两次和四次?
  4. 为什么在4将军问题中,增加1轮协商就可以对抗拜占庭故障?
  5. 什么是最终一致性? 什么是线性一致性?
  6. CAP理论中,请举例说明可用性和一致性的矛盾?
  7. ACID理论的一致性和CAP理论的一 致性有什么区别?
  8. 两阶段提交中,什么场景需要数据库管理员介入?
  9. 三阶段提交缓和两阶段提交的哪两个问题?
  10. 什么场景适合乐观锁?什么场景适合悲观锁?
  11. 在共识协议中,为什么说允许数据被覆盖会带来数据致性问题?
  12. RAFT协议中,Leader写成功日志Log20但末同步给Followers后发生宕机,Follower重新选举后产生一条新日志Log20,这时Leader重启,整个系统发现两种不一样的Log20的记录,请问如何区分并拒掉前面的Iog20?
  13. RAFT协议中,Stale读是如何产生的? 该如何解决Stale读的问题?

阅读推荐

  1. Lamport, L. "Time, Clocks, and the Ordering of Events in a Distributed System”. Communications of the ACM,January 1978,lamport.azurewebsites.net/pubs/time-c…
  2. 用大白话聊聊分布式系统,waylau.com/talk-about-…
  3. 分布式的CAP定理和一致性模型,writings.sh/post/cap-an…
  4. 分布式系统全景分析:从故障容错到拜占庭容错,www.infoq.cn/article/ihx…
  5. 计算机的时钟(四) : TrueTime, yang.observer/2020/11/02/…
  6. Two Generals' Problem, en.wikipedia.org/wiki/Two_Ge…
  7. 终于明白了,文搞懂Raft协议, jujin.cn/post/714354…
  8. CAP理论,www.cnblogs.com/guanghe/p/1…
  9. Distributed systems, book.mixu.net/distsys/sin…
  10. MIT 6.824,mit-public-courses-cn-translatio.gitbook.io/mit6-824
  11. 《Principles of Distributed Systems》,disco.ethz.ch/courses/pod…
  12. 《MySQL内核 InnoDB存储引擎》