分布式理论 | 青训营笔记

78 阅读4分钟

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

一、知识点介绍

本堂课重点讲了分布式概述、系统模型、理论基础、分布式事务及共识协议。

二、详细知识点

1.什么是分布式

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

  • 优势
    • 去中心化
    • 低成本
    • 弹性
    • 资源共享
    • 可靠性高
  • 挑战:
    • 普遍的节点故障
    • 不可靠的网络
    • 异构的机器与硬件环境
    • 安全

2.常见的分布式系统

  • 分布式存储
    • Google File System (GDS):google分布式文件系统
    • Ceph:统一的分布式存储系统
    • Hadoop HDFS:基于GFS架构的开源分布式文件系统
    • Zookeeper:高可用的分布式数据管理与系统协调框架
  • 分布式数据库
    • Google Spanner:google可拓展的、全球分布的数据库
    • TiDB:开源分布式关系型数据库
    • HBase:开源Nosql数据库
    • MongoDB:文档数据库
  • 分布式计算
    • Hadoop:基于MapReduce分布式计算框架
    • Spark:在Hadoop基础之上,使用内存来存储数据
    • YARN:分布式资源调度

3.故障模型

image.png

image.png

4.共识和一致性

  • 一致性 image.png
  • 时间和时间顺序 image.png
  • CAP理论
    • C(Consistence)一致性,指数据在多个副本之间能够保持一致的特性(严格的一致性)
    • A (Availability)可用性,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据
    • P (Network partitioning)分区容错性,分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障
  • CAP理论往往运用于数据库领域,同样可以适用于分布式存储方向
    • CA:放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择
    • AP:放弃一致性(强一致性),追求分区容错性和可用性,例如一些注重用户体验的系统
    • CP:放弃可用性,追求一致性和分区容错性,例如与钱财安全相关的系统
  • ACID理论 image.png
  • BASE理论 image.png

5.分布式事务

二阶段提交

image.png image.png

image.png image.png

image.png

三阶段提交

image.png

MVCC

  • image.png
  • MVCC image.png

6.共识协议

1)Quorum NWR模型

image.png image.png image.png

  • 思考:引起的并发更新问题
  • 读者如果读到副本1和副本2,得出v=3的结论,如果读到副本2和副本3,得出v=2的结论
  • 问题根源:允许数据被覆盖

2)RAFT协议

RAFT协议是i一种分布式一致性算法(共识算法),即使出现部分节点故障、网络延时等情况,也不影响个节点,进而提高系统的整体可用性。Raft是使用较为广泛的分布式协议。一定意义上讲,Raft也使用了Quorum机制。 image.png image.png

3)Raft协议运行

  • Leader选举过程:

    • 初始全部为Follower
    • Current Term + 1
    • 选举自己
    • 向其他参与者发起RequestVote请求,retry直到:
      • 收到多数派请求,成为Leader,并发送心跳
      • 收到其他Leader的请求,转为Follwer,更新自己的Term
      • 收到部分,但为达到多数派,选举超时,随机timeout开始下一轮
  • Log Replication过程:

  • 新Leader产生,Leader和Follower不同步,Leader强制覆盖Followers的不同步的日志

    • Leader收到写请求w
    • 将w写入本地log
    • 向其他Follower发起AppendEntries RPC
    • 等待多数派回复
      • 更新本地状态机,返回给客户端
      • 下一个心跳通知Follower上一个Log已经被Commited了
      • Follower也根据命令应用本地状态机
    • Follower有问题,Leader一致retry
  • 两个规则

    • 在一个任期内每个参与者最多投一票(持久化)
    • 要成为Leader,必须拿到多数投票
  • Leader出现问题:

  • 切主: image.png

  • Stale读: image.png

  • 问题:老leader未失去身份,新leader已经选出,产生“双主”,该如何解决?

4)Paxos协议

image.png

image.png