分布式理论 | 青训营笔记

85 阅读3分钟

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

主要记录课程的重点和课上所讲项目的每一步以及我的思考

1.分布式概述

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

  • 优势:

1.去中心化

2.低成本

3.弹性

4.资源共享

5.可靠性高

挑战:

1.普遍的节点故障

2.不可靠的网络

3.异构的机器与硬件环境

4.安全

常见的分布式系统

分布式存储:

  1. Geogle File System(GFS):geogle分布式文件系统
  2. Ceph:统一的分布式存储系统
  3. Hadoop HDFS:基于GFS架构的开源分布式文件系统
  4. Zookeeper:高可用的分布式数据管理与系统协调框架

分布式数据库:

  1. Geogle Spanner:geogle可扩展的、全球分布式的数据库
  2. TiDB:开源分布式关系型数据库
  3. Hbase:开源Nosql数据库
  4. MongoDB:文档数据库

分布式计算:

  1. Hadoop:基于MapReduce分布式计算框架
  2. Spark:在Hadoop基础之上,使用内存来存储数据
  3. YARN:分布式资源调度

2.系统模型

  • Byzantine failure:节点可以任意篡改发送给其他节点的数据
  • Authentication detectable byzantine failure(ADB):Byzantine failure的特例;节点可以篡改数据,但不能伪造其他节点的数据
  • Performance failure:节点未在特定时间段内收到数据,即时间太早或太晚
  • Omission failure:节点收到数据的时间无限晚,即收不到数据
  • Crash failure:在omission failure的基础上,增加了节点停止响应的假设,也即持续地omission failure
  • Fail-stop failure:在Crash failure的基础上增加了错误可检测的假设

共识和一致性

客户端A读到x=0,当客户端C正在写入时,客户端A和B可能读到0或者1,当客户端C正在写入时,客户端A和B可能读到0或者1。但是当C写入完成后,A和B最终能读到一致的数据。我们称这样的一致性为Eventually consistent(最终一致性)

当客户端A读到更新的版本x=1后,及时将消息同步给其他客户端,这样其他客户端立即能获取到x=1、我们称这样的一致性为Linearizability(线性一致性)

如果要保证“线性”一致性,多个节点间势必需要进行协商,以寻求一致。这样增加了延迟,系统可用性便会受损

时间和时间顺序

我们定义“happened before”关系,记为“→”。其满足如下三个条件:

  • 如果a和b是在相同节点上的两个事件,a在b之前发生,则定义:a→b
  • 如果事件a表示在某个节点发送某条消息,b是另一个节点接受这条消息,则有a→b
  • 如果有a→b且b→c,择优a→c

Lamport逻辑时钟

对于每一个节点Pi我们定义时钟Ci为一个函数,它为任意的事件a赋值编号为Ci(a)

  1. 如果a和b是在相同节点Pi上的两个事件,a在b之前发生,则有Ci(a)<Ci(b)
  2. 如果事件a表示节点Pi发送某条消息,b表示节点Pj接受这条消息,则有Ci(a)<Cj(b)

3.引用参考

该文章部分内容来自于以下课程或网页:

  • 字节直播课:分布式理论-现代架构基石