用 ZooKeeper 做服务注册,实例挂了多久能被发现?这篇让真实的实例进程用不同方式「消失」(正常退出、kill -9、被冻结),另一个客户端监听,量发现的时间,再把会话超时从 3 秒改到 10 秒看差别。
消失方式 会话超时 watcher 发现用时 ms 正常退出(close 会话) 6 s 11 kill -9(没来得及 close) 3 s 3472 kill -9(没来得及 close) 10 s 9910 进程冻结(SIGSTOP,如长 GC) 3 s 3321 进程冻结(SIGSTOP,如长 GC) 10 s 10385
3 s → 3472 ms;10 s → 9910 ms;差 6438 ms(≈ 7000 ms 的超时差)
这是服务发现里「实例挂了多久会被摘除」的答案,也是第 8 篇里临时节点消失时间的应用。如果应用要求更快的摘除,还可以叠加应用层的健康检查,本文没有测。