[ 分布式理论| 青训营笔记 ]
这是我参与「第五届青训营」伴学笔记创作活动的第 8 天
零、前言:
记个笔记顺便(恰青豆还是有很多不完善也有可能对的地方还请大佬们指正
一、本堂课重点内容:
- 分布式概述
- 系统模型
- 理论基础
- 分布式事物
- 共识协议
- 分布式实践
二、详细知识点介绍:
8.1 分布式概述
定义:分布式系统是计算机程序的集合,这些程序利用多个独立节点的计算资源来实现共同目标。分为分布式计算,分布式存储,分布式数据库。
优势:去中心化,低成本,弹性,资源共享,可靠性高
8.2 系统模型
-
故障模型(由难处理到易)
四个维度:正确性,时间,状态,原因
在分布式中,接收数据晚不如接收不到数据
-
拜占庭将军问题 拜占庭将军问题-CSDN博客
总结:在工程实践中tcp三次握手能最优的解决数据连接的问题,当有3m + 1 个将军,其中 m 个叛徒时,增加 m 轮协商,能达成一致
-
数据一致性
发生在同时读写时
最终一致性 -- 改动期间不一致,最终一致
线性一致性 -- 更新后及时将消息同步到其他客户端,但是这样会增加延迟,可用性受损
-
时间和事件顺序
a -> b -> c == a -> c
a 不指向 c && c 不指向 a == a 和 c是并行的
逻辑时钟
lamport 时钟 (有点不好理解的话 Lamport 逻辑时钟-CSDN博客)
8.3 基础理论
CAP 理论(数据库)
无法同时完全满足 cap
ACID 理论
1、A (Atomicity) 原子性 (操作)
事务里的所有操作要么全部做完,要么都不失败,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
2、C (Consistency) 一致性 (状态)
数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
3、I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
4、D (Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
BASE 理论
基本可用,软状态,最终一致性
8.4 分布式事物
-
两阶段提交
-
MVCC
悲观锁 -- 认为任何操作都会出错,操作数据时直接把数据锁住
乐观锁 -- 认为任何操作都不会出错,只在更新时判断是否修改数据,有冲突放弃操作
MVCC 是多版本控制,为每个修改每个版本,实现 tick line
时间戳实现1:spanner 论文里 通过true time API 与卫星实现时间强同步
时间戳实现2:时间戳预言机(TSO),采用中心化授权方式
8.5 共识协议
- Quorum NWR 模型
N:在分布式存储系统中,有多少份备份数据。
W:代表一次成功的更新操作要求至少有w份数据写入成功 。
R:代表一次成功的读数据操作要求至少有R份数据成功读取。
为了保证强一致:W + R > N
-
RAFT 协议raft协议
raft是一个共识算法(consensus algorithm),所谓共识,就是多个节点对某个事情达成一致的看法,即使是在部分节点故障、网络延时、网络分割的情况下。
定义三种角色:leader,follower,candidate
Paxos 协议
与 raft协议区别:允许并发修改日志,可以随机选主不必选最新
劣势:没有一个节点有完整数据
优点:新能高
-
分布式实践
MapReduce 统计文本的单词出现个数