这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
主要记录课程的重点和课上所讲项目的每一步以及我的思考
1.分布式概述
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。
- 优势:
1.去中心化
2.低成本
3.弹性
4.资源共享
5.可靠性高
挑战:
1.普遍的节点故障
2.不可靠的网络
3.异构的机器与硬件环境
4.安全
常见的分布式系统
分布式存储:
- Geogle File System(GFS):geogle分布式文件系统
- Ceph:统一的分布式存储系统
- Hadoop HDFS:基于GFS架构的开源分布式文件系统
- Zookeeper:高可用的分布式数据管理与系统协调框架
分布式数据库:
- Geogle Spanner:geogle可扩展的、全球分布式的数据库
- TiDB:开源分布式关系型数据库
- Hbase:开源Nosql数据库
- MongoDB:文档数据库
分布式计算:
- Hadoop:基于MapReduce分布式计算框架
- Spark:在Hadoop基础之上,使用内存来存储数据
- 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)
- 如果a和b是在相同节点Pi上的两个事件,a在b之前发生,则有Ci(a)<Ci(b)
- 如果事件a表示节点Pi发送某条消息,b表示节点Pj接受这条消息,则有Ci(a)<Cj(b)
3.引用参考
该文章部分内容来自于以下课程或网页:
- 字节直播课:分布式理论-现代架构基石