这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
分布式概述
分布式系统是计算机程序的集合、利用跨多个独立计算节点的计算资源实现共同的目标,可分为分布式计算、分布式存储、分布式数据库等
五大优势
去中心化、低成本、弹性、资源共享、可靠性高(多副本冗余)
四大挑战
普遍的节点故障、不可靠的网络、异构的机器与硬件环境、安全
使用分布式的原因
数据多,对存储和计算有更大要求、降低服务器成本
常见分布式系统
分布式存储:GFS(谷歌分布式文件系统)、Ceph(统一的分布式存储系统)、Hadoop HDFS、Zookeeper
分布式数据库:Google Spanner、TiDB、HBase、MongoDB
分布式计算:Hadoop、Spark、YARN
系统模型
故障模型
拜占庭错误、ADB、Performance failure、Omission failure、Crash failure、Fail-stop failure
拜占庭将军问题(TCP三次握手)
共识和一致性
最终一致性、线性一致性(强一致性但是需要通信,有延迟)
时间和事件顺序
Lamport时钟
三大理论
CAP理论
C 一致性、A 可用性、P 分区容错性 三者无法同时满足
CA系统:单机数据库
AP系统:追求用户体验的系统
CP系统:追求安全(与金钱有关的系统)
ACID理论
A 原子性、C 一致性、I 隔离性、D 持久性 AC必须要保证
事务是数据库管理系统执行过程中的一个逻辑单元,一个事务中的操作要么全部执行,要么全不执行
BASE理论
BA 基本可用、S 软状态、E 最终一致性(打游戏注重体验,最终结果一致就可以了)
分布式事务
二阶段提交
为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的演算法
存在的问题:性能差、协调者单点故障问题、网络分区带来的数据不一致
加锁解决以上问题可能导致阻塞问题
三阶段提交
解决单点故障问题和阻塞问题,此外引入超时机制,超时后会继续事务的提交
MVCC
悲观锁:操作数据的过程中加锁,直到操作完再解锁
乐观锁:不上锁,但是在操作前判断是否别人在操作,发生冲突才放弃操作
MVCC使并发控制的方法、无需上锁、维持一个数据的多个版本,使读写操作没有冲突,既不会阻塞读也不会阻塞写MVCC保存的每一个版本都和事务的时间戳相关联,可以提高并发性,解决脏读问题