这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
分布式概述
为什么要使用分布式?
优势: 去中心化、低成本、弹性(根据波峰波谷,进行扩容、缩容)、资源共享、可靠性高(冗余)
挑战:故障、网络、环境、安全
为什么要使用?
数据爆炸,大规模的存储和计算 成本低,搭建在廉价服务器上
为什么要学习使用?
后端开发必备 & 理解后台服务器之间协作原理
系统模型
故障模型
- 六种故障模型
拜占庭将军问题
两将军问题,两方理论上永远无法达成共识。
TCP三次握手是拜占庭问题的工程解,允许存在误差。
分布式并没有解决拜占庭将军问题,在介绍分布式时认为TCP能够近似解决拜占庭问题。
三将军问题,需要四将军通过中枢达成一致
共识和一致性
最终一致性 - 读写请求并发可能读到旧值
线性一致性 - 强一致性
理论基础
CAP理论
一致性、可用性、分区容错性
一个系统无法同时完全满足,但也不是完全不满足
在网络发生分区的情况下,无论在可用性和一致性做出的哪种选择,都是不愿意看到的。因此,把故障节点的负载转给备用节点,是近似的解决办法。
事务ACID理论
原子性、一致性、隔离性 Isolation 、持久性 Durability
BASE理论
BASE理论是对AP的扩展,基于AP系统而言,对分布式的实践做出总结,Basically Available 基本可用,Soft state 软状态,Eventually consistent 最终一致
分布式事务
二段式提交
通过 Prepare 和 Commit 实现所有节点在进行事务提交时的一致性
三段式提交
MVCC
innodb中使用 MVCC 用在RC和RR的隔离级别
补充:常见的分布式事务还有 TCC、Saga、MQ等,在实际开发中,需要尽量避免使用分布式事务,而非主动使用分布式事务,使业务变得复杂。
公式协议
Quorum NWR模型
Quorum NWR的概念是,使 W 写数据的数量和 R 读数据的数量一定大于总备份的数量 N,使得每次读取到数据其中一份,一定为最新的数据。该模型是将 CAP 交给用户进行选择,但是使用该模型需要避免数据覆盖,数据覆盖会出现一致性问题。
RAFT协议
Raft协议是一种分布式一致性算法(共识算法),即使出现部分节点故障,网络延时等情况,也不影响各节点,进而提高系统的整体可用性