这是我参与「第五届青训营」伴学笔记创作活动的第 8 天。
分布式概述
什么是分布式
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。
优势:
- 去中心化
- 低成本
- 弹性
- 资源共享
- 可靠性高 挑战:
- 普遍的节点故障
- 不可靠的网络
- 异构的机器与硬件环境
- 安全
Why-How-What
常见的分布式系统
分布式存储:
- Google File System(GFS):Google分布式文件系统
- Ceph:统一的分布式存储系统
- Hadoop HDFS:基于GFS架构的开源分布式文件系统
- Zookeeper:高可用的分布式数据管理与系统协调框架
分布式数据库:
- Google Spanner:Google可扩展的、全球分布式的数据库
- TiDB:开源分布式关系型数据库
- HBase:开源NoSQL数据库
- MongoDB:文档数据库
分布式计算:
- Hadoop:基于MapReduce分布式计算框架
- Spark:在Hadoop基础之上,使用内存来存储数据
- YARN:分布式资源调度
系统模型
故障模型
拜占庭将军问题
共识和一致性
时间和事件顺序
理论基础
CAP理论
ACID理论
BASE理论
分布式事务
二阶段提交
二阶段提交(Two-phase Commit):为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性二设计的一种演算法。
三个假设:
- 引入协调者(Coordinator)和参与者(Participants),互相进行网络通信。
- 所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上
- 所有节点不会用永久性损坏,即使损坏后仍然可以恢复
可能出现的情况:
- Coordinator不宕机,Participants宕机。需要进行回滚操作
- Coordinator宕机,Participants不宕机。可以起新的协调者,待查询状态后,重复二阶段提交
- Coordinator宕机,Participants宕机。
回滚:在Prepare阶段,如果某个事物参与者反馈失败消息,说明该结点的本地事务执行不成功,必须回滚。