分布式理论|青训营笔记
这是我参与「第五届青训营」笔记创作活动的第八天,学习了分布式系统相关内容
分布式概述
什么是分布式
- 分布式系统是计算机程序的集合,利用跨多个独立计算节点的计算资源来实现共同目标,包括分布式计算,存储,数据库等。
- 优势
- 去中心化
- 低成本
- 弹性
- 资源共享
- 可靠性高【冗余】
- 挑战
- 普遍的节点故障
- 不可看靠的网络
- 异构的机器与硬件环境
- 安全【集群安全影响较大】
Why-How-What
- 使用者视角
- why?(为什么使用)
- 数据爆炸,存储和计算的高要求
- 成本低,构建在廉价服务器上
- How?
- 分布式框架
- 成熟的分布式系统
- What?
- 理清规模,负载,一致性要求
- 明确稳定性要求,制定方案
- why?(为什么使用)
- 学习者
- 后端必备
- 掌握分布式理论
- 了解一致性协议
常见的分布式系统
- 分布式存储
- GFS(Goole File System)
- Zookeeper :高可用的分布式数据管理与系统协调框架
- 分布式数据库
- Google Spanner:goole的可扩展,全球分布式数据库
- Mongodb:文档数据库
- Hbase:开源Nosql数据库
- 分布计算
- Hadoop:基于MapReduce分布式计算框架
- Spark:在Hadoop基础上,用内存存储数据
- YARN:分布式资源调度
故障模型
- 分类
- 拜占庭 :正确性
- performace failure:时间,不确定是否故障
- omission failure:时间
- crash :状态已知,原因未知
- fail-stop failure:状态原因均已知
- 模型
拜占庭将军问题
两将军问题
- 定义: 两支军队的将军只能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识
结论:
两将军问题是被证实无解的电脑通信问题,两支军队理论上永远无法达成共识 注意:保证消息传递成功也不能保证达成共识 TCP是两将军问题的一个工程解
三将军问题
两个“忠将”A和B,一个“叛徒”C,互相传递消息,消息可能丢失,也可能被篡改,当有一个将军是“叛徒”(即出现拜占庭故障)时,整个系统无法达成一致。 表决:给出各自的结构,都是忠臣则都一致,若有叛徒可能有一人向另外两人传递不同的消息
由于“叛徒”C的存在,将军A和将军B获得不同的信息。这样将军A获得2票进攻1票撤退的信息,将军B获得1票进攻2票撤退的信息,产生了不一致
四将军问题
四将军问题:
-
将军D作为消息分发中枢,约定如果没收到消息则执行撤退
-
步骤:
- 如果D为“叛徒”,ABC无论收到任何消息,总能达成一致
- D为“忠将”,ABC有2人将D的消息进行正确的传递,同样能保证最终决策符合大多数。
-
进而能够证明,当有3m+1个将军,m个“叛徒”时,可以进行m轮协商,最终达成一致
共识和一致性
区别: 线性一致==强一致,消息同步,增加延迟
时间和事件顺序
- 若 a在b是相同节点的两个事件 ,a在b前发生 a->b
- 若a为节点1发送消息,b为节点2接受消息 a->b a时间和逻辑上都在b之前
- 若 a!->b && b!->a a,b并发
- Lamport 时钟
- 每个节点的事件定义一个逻辑时钟Ci(a) 若a->b Ci(a)<Ci(b)
CAP理论
- C(Consistence):一致性,数据在多个副本都能保持一致的特性
- A (Avaliablity):可用性,服务必须一直可用
- P (Network):分区容错性,分区故障时,仍然能对外提供满足一致性和可用性的服务,处分整个环境故障
- 不可能难以同时完全满足CAP特性,可以逼近
- 常见系统
- CA:放弃容错性,加强一致性和可用性,传统单机
- AP:放弃强一致性,注重用户体验的系统
- CP: 放弃可用性,与钱财安全相关系统
- 例子
- 左AP,右ACP
- 追求兼顾
- 左AP,右ACP
ACID理论
- 事务:事务保证数据库中的所有操作要么全部执行要么全部执行
- 事务的特性
- 原子性(A):所有操作要么全成功,要么全部失败回滚
- 一致性(C):一致性,指事务不许使数据库从一个一致性到另一个一致性状态
- 隔离性(I):数据库为每个用户开启的事务,不被其他事务的操作干扰
- 持久性(D):事务提交了,对数据库的数据改变必须使永久的
Base理论
基本可用:假设出现不可预知故障,也要保证可用 soft state软状态,运行系统中的数据存在中间状态,且不影响系统整体可用性 最终一致性:保证没有新更新操作时,数据最终达到一致。
分布式事务
二阶段提交
- 假设
- 引入协调者与参与者,互相通信
- 节点采用预写入日志,且日志写入后保存在可靠的设备上
- 所有节点不会永久损坏,损坏后可恢复
- 流程
- 正常
- 故障
- 正常
三阶段提交
- 将两阶段中的prepare拆解为
- CanCommit 和preCommit -先询问能否提交即先确定是否故障
锁的使用
- 
MVCC
一种并发控制方法,维持一个数据多个版本使读写无冲突,既不会阻塞写也不会阻塞读。MVCC为每个修改保存一个版本,和时间戳关联。提高并发性能。、
NWR模型
N:分布式存储中,要求备份数据份数 W:代表一次成功更新要求至少W分数据成功写入 R:代表一次成功的数据操作至少R分成功读取 保证强一致性 W+R>N
RAFT协议
一种分布式一致性算法(共识算法),即使出现节点故障,网络延时等情况,也不影响各节点,进而提高可用性。
标题:「分布式理论 - 现代架构基石」第五届字节跳动青训营 - 后端专场