分布式概述
这是我参与「第五届青训营 」伴学笔记创作活动的第 八 天
1.1 什么是分布式
- 分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库。
- 常见的分布式系统
- 分布式存储
- Google File System(GFS):google分布式文件系统
- Ceph:统一的分布式存储系统
- Hadoop HDFS:基于GFS架构的开源分布式文件系统
- Zookeeper: 高可用的分布式数据管理与系统协调框架
- 分布式数据库
- Google Spanner: Google可扩展的、全球分布式的数据库
- TiDB: 开源分布式关系型数据库
- HBase: 开源Nosql数据库
- MongoDB:文档数据库
- 分布式计算
- Hadoop: 基于MapReduce分布式计算框架
- Spark: Hadoop基础之上,使用内存来存储数据
- YARN: 分布式资源调度
- 分布式存储
理论基础
2.1 CAP理论
- C: 一致性,指数据在多个副本之间能够保持一致的特性
- A: 可用性,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应--但是不保证的数据为最新数据。
- P: 分区容错性,分布式系统遇到任何网络分区故障的时候,仍能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。
2.2 ACID理论
- 事务是数据库系统中非常重要的概念,它是数据库管理系统执行过程中的一个逻辑单元,它能够保证一个事务中的所有操作要么全部执行,要么全部不执行。
- 数据库事务拥有四个特性ACID,即分别是原子性、一致性、隔离性和持久性
2.3 BASE理论
- Base理论是对CAP中一致性和可用性权衡的结果,其来源对大型互联网分布式实践的总结,是基于CAP定理逐步演化而来的。其核心思想是:
- Basically Available(基本可用): 假设系统,出现了不可预知的故障,但还是能用,相比较正常的系统而言: 响应时间上的损失,或功能上的损失
- Soft state(软状态): 允许系统中的数据存在中间状态,并不认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时。
- Eventually consistent(最终一致性): 系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有的客户端对系统的数据访问最终都能获取到最新的值。
分布式事务
3.1 二阶段提交
- 二阶段提交: 为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种演算法。
- 三个假设
- 引入协调者和参与者,互相进行网络通信
- 所有节点都采用预写式日志,且日志被写入后即可保持在可靠的存储设备上
- 所有节点不会永久性损坏,即使损坏后仍然可以恢复
- 两阶段提交需注意的问题
- 性能问题
- 两阶段提交需要多次节点间的网络通信,耗时过大,资源需要进行锁定,徒增资源等待时间。
- 协调者单点故障问题
- 如果事务协调者宕机,需要另起新的协调者,否则参与者处于中间状态无法完成事务。
- 网络分区带来数据不一致
- 一部分参与者收到了Commit消息,另一部分参与者没收到Commit消息,会导致节点之间的数据不一致/
- 性能问题
3.2 MVCC
- 相关概念
- 悲观锁: 操作数据时直接把数据锁住,直到操作完成后才会释放锁;上锁期间其他人不能修改数据
- 乐观锁: 不会上锁,只是在执行更新时判断别人是否修改数据,只有冲突时才放弃操作、
- MVCC是一种并发控制,维持一个数据的多个版本使读写操作没有冲突。所以既不会阻塞写,也不阻塞读。MVCC为每个修改保存一个版本,和事务的时间戳相关联。可以提高并发性能,解决脏读问题。
共识协议
4.1 Quorum NWR模型
- Quorum NWR三要素
- N: 在分布式存储系统中,有多少备份数据
- W: 代表一次成功的更新操作要求至少有w份数据写入成功
- R: 代表一次成功的读数据操作至少有R份数据成功读取
4.2 RAFT协议
- Raft协议是一种分布式一致性算法(共识算法),即使出现部分节点故障,网络延时等情况,也不影响各节点,进而提高系统的整体可用性。Raft是使用较为广泛的分布式协议。一定意义上讲,RAFT也使用了Quorum机制。