这是我参与「第五届青训营 」笔记创作活动的第6天
Day6
分布式概述
分布式:分布式系统是计算机程序的集合,这些程序利用多个独立计算节点的计算资源来实现共同的目标,可以分为分布式计算、分布式存储、分布式数据库等。
优势:
- 去中心化
- 低成本
- 弹性
- 资源共享
- 可靠性高
挑战:
- 普遍的节点故障
- 不可靠的网络
- 异构的机器与硬件环境
- 安全
原因:
- 数据爆炸,对存储和计算有大规模运用诉求
- 成本低,构建在廉价服务器上
常见分布式系统
分布式存储:
- GFS:谷歌分布式文件系统
- Hadoop HDFS:基于GFS架构的开源分布式文件系统
- Zookeeper:高可用的分布式数据管理与系统协调框架
分布式数据库:
- Google Spanner:Google可扩展的、全球分布式的数据库
- TiDb:开源分布式关系数据库
- Hbase:开源Nosql数据库
- MongoDB:文档数据库
分布式计算:
-
Hadoop:基于MR的分布式计算框架
-
Spark:在Hadoop基础上,使用内存来存储数据
-
Yarn:分布式资源调度
故障模型
难易程度排序
- 拜占庭故障:节点可以任意篡改发送给其他节点的数据。
- ADB:节点可以篡改数据但不能伪造其他节点的数据。
- 表现故障:节点未在特定时间段内收到数据,即时间太早或太晚。
- Omission failure:节点收到数据的时间无线晚,即收不到数据
- Crash failure
- Fail-stop failure
拜占庭将军问题:
问题定义:两支军队的将军只能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识。
结论:两将军问题无解,永远无法达成共识
考虑当四个将军,只有一个叛徒的场景。将军D作为消息分发中枢,约定如果没有收到消息则执行撤退。
- 如果D为叛徒,ABC无论收到任何消息总能达成一致
- D为忠将,ABC有两人将D的消息正确传递,同样能保证最终决策符合大多数
可以证明,当有3m+1个将军,其中m个叛徒时,可以增加m轮协商,最终达成一致
最终一致性:写入完成后能读到一致数据
线性一致性:A读到x=1后,及时将消息同步给其他客户端。等同于强一致性
保证线性一致性,多个节点势必需要进行协商,增加延迟,系统可用性受损
一致性理论
分布式事务
两阶段提交
为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法
三个假设:
- 引入协调者和参与者,互相网络通信
- 所有节点采用预写日志,且日志被写入后即被保持在可靠的存储设备上
- 所有节点不会永久性损坏,即使损坏后仍然可以恢复