分布式系统中的网络与时钟问题剖析
1. 网络故障检测与超时设置
在分布式系统中,网络故障检测是保障系统稳定运行的重要环节。若能访问数据中心网络交换机的管理界面,可通过查询交换机来检测硬件层面的链路故障,例如远程机器是否断电。不过,若通过互联网连接、处于共享数据中心且无法访问交换机,或者因网络问题无法访问管理界面,此方法便不可行。
当路由器确定目标 IP 地址不可达时,可能会回复 ICMP 目标不可达数据包。但路由器也没有神奇的故障检测能力,它和网络中的其他参与者一样存在局限性。
快速得知远程节点故障固然有用,但不能完全依赖。即便 TCP 确认数据包已送达,应用程序也可能在处理前崩溃。若要确保请求成功,需应用程序本身给出肯定响应。反之,若出现问题,可能在协议栈的某个层面收到错误响应,但通常要做好收不到任何响应的准备。可以重试几次(TCP 会自动重试,也可在应用层重试),等待超时,若超时后仍未收到回复,最终可判定节点死亡。
1.1 超时时间的选择
超时是检测故障的可靠方法,但该设置多长时间的超时却没有简单答案。长超时意味着要长时间等待才能判定节点死亡,期间用户可能需等待或看到错误消息;短超时虽能更快检测到故障,但存在较高风险将只是暂时变慢的节点误判为死亡,比如节点或网络出现负载高峰。
过早判定节点死亡会带来问题。若节点实际存活且正在执行某项操作(如发送邮件),此时另一节点接管,该操作可能会执行两次。而且,当节点被判定死亡,其职责需转移到其他节点,这会给其他节点和网络带来额外负载。若系统已处于高负载状态,过早判定节点死亡会使问题恶化,甚至可能导致级联故障,极端情况下所有节点互相判定死亡,系统停止工作。
超级会员免费看
订阅专栏 解锁全文
1162

被折叠的 条评论
为什么被折叠?



