这是我参与【第五届青训营】伴学笔记创作活动的第四天
今天会学习到:
- 分布式的概述
- 分布式的系统模型
- 基础理论
- 事务
- 共识协议
- 实践
分布式的概述
分布式的优势:
- 去中心化
- 低成本
- 弹性
- 资源共享
- 可靠性高
挑战:
- 普遍节点故障
- 不可靠的网络
- 异构的机器与硬件环境
- 安全
常见的分布式系统
系统模型
故障模型
- 拜占庭:节点可以任意篡改发送给其他节点的数据
- ADB:节点可以篡改数据,但不能伪造其他节点数据
- Performance failure:节点未在特定时间段内收到数据,时间太早或太晚
- Omission failure:节点收到数据时间无限晚,即收不到数据
- Crash failure:Omission基础上增加节点停止响应假设
- Fail-stop failure:Crash上增加错误可检测假设
(正确、时间、状态、原因)
拜占庭将军从2人→3人→4人,经过推演可得出:当有3m+1个将军,其中m个叛徒时,可以增加m轮协商,最终达成一致。
CAP理论
ACID理论
A(2万)→【转1万】B(2万) 生成 A(1万)→B(3万) 原子性:强调操作 (A与B的转账操作必须是一个原子,不能存在A转了B没转这种情况) 一致性:强调状态 (A与B转账后转账结果和金额必须相同,不能出现不对账的情况)
BASE可用
互联网系统(非金融类)不追求一致性。保证CAP中的AP已经很够用了。
分布式事务
二阶段提交
两阶段提交需注意的问题:
1、性能问题
2、协调者单点故障问题
3、网络分区带来的数据不一致
当AB双方交易其中一方产生问题时,会选择进行回滚重新发起事务,这时会选择加锁锁定用户视角防止回滚给用户带来的疑问。
三阶段提交
和二阶段提交解决的问题: 1.单点故障问题 2.阻塞问题 类似TCP三次握手协议,尽量减少阻塞和资源浪费。
MVCC
是一种并发控制方法。维持一个数据的多个版本使其读写操作没有冲突。
时间戳是通过一个物理服务器形成的物理时钟来添加时间戳(初态API)。详见: Spanner论文的TrueTime API。 但是一些条件不足的就使用另一种:时间戳(TSO)有中心服务器进行时间戳分发,但是交互成本比较大。
共识协议
RAFT协议
Paxos协议
RAFT有很多开源实践。容错中有Raft Learner模式可以对其进行修复。
实践
思考题
10是一个课程,MIT的教授讲解的很生动形象。