2. 抽象的上下不同层次
系统模型
分布式系统中的程序:
在独立节点上同时运行
通过可能引入不确定性和消息丢失的网络连接
并且没有共享内存或共享时钟
系统模型列举了与特定系统设计相关的许多假设,实现分布式系统的环境和设施的假设:
- 节点具有什么功能以及它们如何失败
- 通信连接如何运行以及它们如何可能失败
- 整个系统的属性,例如关于时间和顺序的假设
健壮的系统模型做出最弱假设,强有力的假设创建易于推理的系统模型
此模型中的节点
作为计算和存储的主机:
- 执行程序的能力
- 能够将数据存储到内存和稳定持久状态的能力
- 时钟
节点执行确定性算法
故障模型:崩溃恢复而非拜占庭容错(任意错误)
此模型中的通信连接
通信连接将各个节点相互连接,并任一方向发送消息
网络不可靠,消息易延迟丢失
网络分区:网络断开但节点存活
时间和顺序的假设
信息最多以光速传播
如果距离不同,节点间消息的到达时间、顺序可能不同
同步系统模型
进程以锁定步骤执行;消息传输延迟有已知上限;每个进程都有准确的时钟
异步系统模型
没有时间假设,进程以独立的速率执行;消息传输延迟没有限制;有用的时钟不存在
共识问题
多个节点都同意一些值时达成共识
一致:每个正确节点都同意相同的值
完整:每个正确的进程最多只能决定一个值,如果决定某个值,那么一定是某些进程提议的
终止:所有进程最终达成决定
有效:如果所有正确进程提议相同的值 V,那么所有正确进程决定值 V
两种不可能的结果
FLP 不可能
假定节点只能因崩溃而失效;网络可靠,并且异步系统模型的典型时序假设成立:例如,消息延迟没有限制,
在网络可靠,但允许节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法
CAP 定理
三个属性:
(强)一致性:所有节点同时看到相同的数据
可用性:节点故障不会阻止幸存者继续运行
分区容错:网络或节点故障导致消息丢失时,系统仍可继续运行
同时具备这三种属性的系统无法实现:
三种不同的系统类型:
- CA(一致性+可用性):完全严格的仲裁协议,例如两阶段提交
- CP(一致性+分区容错):多数仲裁协议,其中少数分区不可用,例如Paxos
- AP(可用性+分区容错):使用冲突解决方案的协议,例如Dynamo
一致性模型:程序员与系统之间的合同,其中系统保证,如果程序员遵循某些特定规则,则对数据存储区的操作结果将是可预测的
- 强一致性模型(能够维护单个副本)
- Linearizable consistency (可线性化一致性)
- Sequential consistency (顺序一致性)
- 弱一致性
- Client-centric consistency models (客户端为中心一致性)
- Causal consistency: strongest model available (因果一致性)
- Eventual consistency models (最终一致性)
线性化一致性要求操作生效的顺序等于操作的实际实时顺序,顺序一致性允许对操作进行重新排序,只要在每个节点上观察到的顺序保持一致