- tags: 分布式
故障与部分失效
单节点一般是要么工作要么失效,但是分布式系统多节点面临部分失效,大大提高了分布式系统的复杂性。
单节点软件特性:
- 硬件正常工作时,相同的操作通常总会产生相同的结果,即确定性。
- 如果发生了某种内部错误,我们宁愿使计算机全部崩溃,而不是返回一个错误的结果。
云计算和超算
- 超算:垂直扩展的极端,设置检查点,一点节点故障则全部失效从上一个检查点重新开始(离线批处理),类似单机上内核崩溃。
- 云计算:水平扩展的极端
- 传统企业位于两个极端的中间
分布式可靠必然面临部分失效,需要依赖软件系统来提供容错机制。我们需要在不可靠的组件上构建可靠的系统。
不可靠网络
- 分布式无共享系统:成本低廉。
- 互联网以及大多数 IDC 内部网络都是异步网络:不保证发送一定到达(排队),等待响应时可能出现任何错误。
现实中的网络故障非常普遍
故障检测:HA、主从切换、保活机制(ICMP,SYN)
超时与无限期的延迟
网络拥塞与排队
- 网络负载过高会出现拥塞。
- 数据在发送的过程中分别会在发送端和接收端进行排队:等待发送和等待处理。
- TCP 的拥塞控制机制。
- 虚拟化 CPU 核切换虚拟机
同步与异步网络
- 同步网络:固定电话网络,一路电话分配固定的电路、有带宽保证,规定延迟内保证完成数据包发送,不会丢弃数据包,成本高,利用率低
- 异步网络:数据中心网络,共享带宽,无法保证延迟和数据包发送,成本低廉,利用率高
不可靠时钟
单调时钟与墙上时钟
时间同步与准确性
- 计算机中的石英钟不够精确
- NTP 服务器不稳定(网络、防火墙或服务本身)
- 虚拟机中时钟是虚拟化的。
- 终端设备不可控:休眠、故意设置
依赖同步的时钟
时钟陷阱:
- 一天可能不总是 86400 秒
- 回拨
- 多个节点上的时间完全不相同
需要精确同步的时钟:
- 自己监控所有节点上的时钟偏差
- 某个节点时钟漂移超出上限则将其宣告失效
时间戳与时间顺序
时钟的置信区间
通过直接安装 GPS 接收器或原子(铯)时钟,它的误差范围通常可以查询制造商手册。
全局快照的同步时钟
Google Spanner 根据部署了 GPS 接收器或者原子时钟的 TrueTime API 返回的时钟置信区间。确保读事务足够晚发生,避免与先前事务的置信区间产生重叠。
进程暂停
- 垃圾回收
- 虚拟化暂停虚拟机
- 磁盘 I/O
- 内存交换分区
- 手动暂停进程(SIGSTOP/SIGCONT)
响应时间保证
- RTOS 系统
调整垃圾回收的影响
知识,真相与谎言
真相由多数决定:Quorum 一致性
主节点与锁
Fencing 令牌
拜占庭故障
理论系统模型与现实
计时方面
- 同步模型:有上界网络延迟、上界进程暂停、上界的时钟误差。
- 部分同步模型:允许少量的网络延迟、进程暂停、时钟误差超过上界。
- 异步模型:不会做任何假设。
节点失效模型:
- 崩溃-中止模型
- 崩溃-恢复模型
- 拜占庭(任意)失效模型
算法的正确性
- 唯一性:两个令牌不能获取到相同的值
- 单调递增
- 可用性
安全性和活性
- 安全性:没有意外发生
- 活性: 预期的事情最终一定会发生