分布式系统的健康检查
本文对分布式系统的健康检查列出了很多个观点。有人认为 ping/cpu_load/error_rates 这些都不够,要发出真正的端对端测试才行;有人则认为健康检查要简单才行,ping 就很好。本文作者认为:
- 健康检查是一条光谱,不是非黑即白。
- 健康检查通过 = 服务也许没问题, 看你怎么做的检查。
- 健康检查没通过 = 有些地方可能出了问题。
- Ping 能够检查出 up/down, e2e 能够检查出系统能否执行某些特定的功能。
- 在分布式系统中, 就算 ping 没挂,也有可能因为别的原因没能执行一些计算,那跟服务挂了也没差了。
- 服务彻底挂了很好判出来,但是服务到底有多健康这个见仁见智。
- 健康检查是手段,我们要关注 quality-of-service, 即任务多久能执行完,以及能否执行出正确的结果。
- 完全健康的服务根本就不存在,我们要承认的事实是:服务有个健康度,有可能这部分好的那部分是坏的。
- Orchestration 层可以只关心服务 up/down, 但是 Load Balancing 层需要更细的粒度并相应触发 circuitbreaking, load shedding 等逻辑。
- 只有准确衡量服务的健康程度我们才能做到服务 gracefully degraded (在负载均衡这个层)