8 分布式系统的挑战
8.1 故障与部分失效
- 单机要么正常要么失效,分布式环境下会出现部分节点失效,难以预测
- 大规模计算系统的两个极端:超算HPC(更像单节点)和云计算
8.2 不可靠的网络
- 网络分区等网络故障
- 检测故障:超时机制
8.3 不可靠的时钟
- 多节点通信时很难确定事情发生的先后顺序
- 机器上有自己的时钟硬件设备,但这些设备并非绝对准确
- 可以用NTP来同步本地的时钟。而NTP从精确更高的时间源(如GPS接收机)来获取高精度时间
8.3.1 单调时钟与墙上时钟
- 墙上时钟:根据某个日历,返回当前的日期与时间。如Linux中的clock_gettime(CLOCK_REALTIME)和Java中的System.currentTimeMillis()会返回自纪元1970年1月1日(UTC)以来的秒数和毫秒数,不含润秒。
- 墙上时钟可以与NTP同步。但是当墙上时钟快与NTP时,调回墙上时钟会忽略掉闰秒
- 缺点:不太适合测量时间间隔
- 单调时钟:更适合测量时间间隔,如超时或服务的相应时间,如Linux中的clock_gettime(CLOCK_MONOTONIC)和Java中的System.nanoTime()
- 单调时钟的绝对值没有任何意义,它的差值才有意义,用于检查两次之间的时间间隔