各位朋友,上一期我们提到了分布式下的注册中心,服务包在启动时会注册到注册中心。这时就有同学提出疑问,如果服务提供者挂了,注册中心怎么知道服务不可用了呢?今天就来和大家好好聊聊这个话题。
我们通常说的服务不可用、服务掉线,一般有两种情况。一种是主动下线,另一种是异常下线,像硬件故障、宕机、超时调用、断电断网等各种异常状况都属于异常下线。
主动下线属于可控状态,一般在发版时会先停掉服务。在停止之前,服务包会通知注册中心,有流量进来先别分给我,让别的机器服务,等重启成功后再放流量进来,或者在管理后台手动摘掉机器。这种情况下是由服务包自己通知注册中心,注册中心收到消息后会主动删除该服务的在线状态,这样就能避免流量访问到下线的机器。

程序员导航
优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站
而异常下线,比如断电、断网、服务宕机。如果注册中心不知道服务掉线,一旦被其他模块调用,就会带来问题。为避免这种情况,注册中心增加了心跳检测功能,会对服务提供者(provider)进行心跳检测,比如每隔 30 秒发送一个心跳。如果三次心跳都没有返回值,就会认为该服务已下线,然后赶紧通知消费者端(consumer)更新服务列表,告诉消费者端调用别的机器。
所以注册中心就是根据主动下线时服务包的通知和异常下线时的心跳检测这两种机制来感知服务不可用的。当然,可能有同学会问,更新服务一般直接重启,这种情况属于异常下线,只能通过心跳检测来停止服务。虽说简单粗暴,但会有一定时间窗口导致服务不可用,其实不推荐这么做。
好了,本期关于服务不可用的内容就到这里,如果您对本期内容有任何疑问,欢迎在评论区给我留言,谢谢大家!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...



