一、什么是分布式
1.同时在多个互不影响的 node 上运行
2.通过网络连接通信
3.没有共享的memory和clock
二、系统模型
在考虑系统模型的时候,需要思考:
1.node 的性能,以及可能发生的failed
2.各个node之间的沟通如何进行,以及failed 的时候该如果处理:是node crash还是node partition
3.关于time,order 的假设
三、理论
1.FLP 不可能性:在异步通信中,只有一个进程失败也没有算法能够保证非失败的进程能够达到一致
2.CAP 理论
Consistency 一致性
Availability 可用性
Partition tolerance 允许消息丢失
这三种在实际应用中,只能满足两个,无法同时满足三个。两两结合就产生了各种不同的模型,比如同时满足 Consistency 和Partition tolerance 的Paxos
1)在网络分区的时候,Consistency 和 Availability 是紧张关系
2)在正常操作中,强一致性和Availability 存在紧张关系
3)如果不想在网络分区时,放弃Availability,那么就要考虑强一致性之外的Consistency模型
四、time 和 order
分布式最理想的状态就是程序工作的状态好像运行在一个单独的机器上
time 可以从以下方面来考虑:
order 顺序
duration 时间段
interpretation 解释
clock可以分为物理和逻辑clock:
物理时钟指的是现实生活中的时分秒
逻辑时钟是依赖计数器和交流来保证order 的,例如:Lamport clocks,Vector clocks