本文最后更新于 2023-10-11,文章内容可能已经过时。

分布式原理

1.目录:

QQ截图20230202220429

2.分布式概述:

QQ截图20230202220755

在多台服务器上运行同一个系统的的能力。

2.1 why-how-what:

QQ截图20230202221236

2.2 常见的分布式系统:

QQ截图20230202221435

3.系统概述:

3.1 故障模型:

QQ截图20230202221554

按照处理的难易程度划分,最难处理的是拜占庭故障。

从四个角度去衡量故障:时间,正确性,状态,原因。

crash 只知道状态,而不知道原因。

fail-stop 既知道状态,也知道原因。

per,omiss不知道状态。

拜占庭是正确性问题。大部分分布式系统一般不解决此问题,因为太难解决了。

QQ截图20230202222218

3.2 拜占庭将军问题:

QQ截图20230202222423

QQ截图20230202222818

在这种场景下,需要进行两轮投票,第一轮由ABC 把自己的的结果发送给D,由d整合结果之后再发给ABC,然后ABC再次像没有D的时候的三将军一样进行投票。

第二轮投票的决策依赖于第一轮D的消息。因为d只能传输01两种消息,所以必然能保证符合大多数人的意愿(ABC之间消息传输正确)

3.3 共识和一致性:

QQ截图20230202223930

线性一致性又叫做强一致.

3.4 时间和时间顺序:

QQ截图20230202224220

QQ截图20230202224425

4.理论基础:

4.1 CAP理论:

QQ截图20230202224736

完全的CAP无法达到。

QQ截图20230202224928

4.2 ACID理论:

QQ截图20230202225216

数据库一定要保证的是A和C,I和D有些时候并不能保证。

4.3 BASE理论:

QQ截图20230202231153

5.分布式事务:

5.1 两阶段提交:

QQ截图20230203090403

5.1.1 可能的异常:

QQ截图20230203090515

在第二种情况中,查询状态通过participate.

5.1.2 注意的问题:

QQ截图20230203090730

5.2 三阶段提交:

QQ截图20230203091258

解决了在commit的时候失败,导致prepare资源浪费的问题.

5.3 悲观锁与乐观锁:

QQ截图20230203091558

5.4 MVCC:

QQ截图20230203091743

需要依赖硬件.

6.共识协议:

6.1: NWR模型:

QQ截图20230203092131

强一致:能够通过读数据,发现数据被改变.

6.2 RAFT协议:

QQ截图20230203092513

QQ截图20230203092652

QQ截图20230203092935

QQ截图20230203093317

6.3 Paxos协议:

QQ截图20230203093735

7.分布式实践:

7.1 Map Reduce:

QQ截图20230203093903

7.2 分布式K-V:

QQ截图20230203094101

Raft有很多的开源实现.

8.总结:

QQ截图20230203094338

QQ截图20230203094355

主要是后三个.