这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
分布式概述
**分布式系统:**计算机程序的集合,跨多个独立计算节点的计算资源来实现共同目标,分为分布式计算、分布式存储、分布式数据库
**优势:**去中心化、低成本、弹性、资源共享、可靠性高
**挑战:**普遍的节点故障、不可靠的网络、异构的机器与硬件环境、安全
常见分布式系统
分布式存储:GFS、Ceph、Hadoop HDFS、ZooKeeper
分布式数据库:Google Spanner、TIDB、HBase、MongoDB
分布式计算:Hadoop、Spark、YARN
系统模型
故障模型
Byzantine failure:节点可以篡改发给其他节点的数据
Authentication detectable byzantine failure:节点可以篡改数据,不能伪造其他节点的数据
Performance failure:未在特定时间段收到数据,时间太早或台湾
Omission failure:节点收到数据的时间无限晚
crash failure:在omission failure基础上,增加节点停止响应的假设,持续性omission
failure fail-stop failure:在crash failure基础上增加了错误可检测的假设
**故障举例:**磁盘故障;磁盘坏道、坏块;服务器主板、板卡故障;网络故障;网络分区;内存故障;线缆故障;内核崩溃;cpu故障;电源故障;软件故障
共识和一致性:最终一致性、线性一致性(增加延迟)
时间和事件顺序:lamport逻辑时钟,可以对整个系统中的时间进行全序排序
理论基础
CAP理论:一致性、可用性、分区容错性;
ACID理论:保证一个事务中的所有
原子性:所有操作要么成功,要么不成功(注重操作)
一致性:事务执行之前和执行之后必须处于一致性状态(注重状态)
隔离性:数据库为每个用户开启的事务不能被其他事务的操作所干扰
持久性:对数据库中的数据的改变是永久性的
BASE理论:优先保证可用、基本可用、最终一致性
分布式事务
二阶段提交:分布式系统架构下的所有节点在事务提交时保持一致性
三个假设:协调者和参与者互相进行网络通信;所有节点采用预写式日志;所有节点不会永久性损坏
问题:性能问题、单点故障问题、网络分区带来的数据不一致
三阶段提交:将prepare阶段拆成cancommit和precommit两部分
解决问题:单点故障问题、阻塞问题
悲观锁【操作完成后释放锁】乐观锁【不会上锁,最后更新时遇冲突放弃操作】
MVCC:维护一个数据的多个版本,为每个修改保存一个版本,和事务的时间戳相关联
另一种时间戳实现:时间戳预言机,中心化授时,协调者向中心化节点获取时钟,有时延开销问题
共识协议
quorum nwr模型:将cap选择交给用户,简化版的一致性模型 w+r>n
N:有多少份备份数据
W:一次成功的更新操作要求至少有w份数据写入成功
R:一次成功的读数据操作要求至少有R份数据成功读取
RAFT协议:leader、candidate、leader
log:节点间同步信息,只追加写方式进行同步
term:单调递增,每个term最多一个leader
committed:被复制到大多数节点,可认为已经被提交
applied:日志被应用到本地状态机,执行log命令,修改内存状态
Paxos协议:写入并发性能高,所有节点可写入;没有一个节点有完整最新数据,回复复杂;
分布式实践
MapReduce系统、分布式KV