RPC 中为啥需要健康检测

RPC 中为啥需要健康检测

因为有了集群,每次发送请求前,RPC 框架会根据路由和负载均衡算法选择一个具体的 IP 地址。为了保证请求成功,就需要确保每次选择出来的 IP 对应的连接是健康的。

但是调用方各个服务集群节点之间的网络状态是瞬息万变的,两者之间可能会出现闪断或者网络设备损坏等情况,那么怎么保证连接一定是可用的呢?

终极的解决方案是让调用方实时感知到节点的状态变化,这样他们才能做出正确的选择。那么在 ROC 框架里面,怎么设计这台机制呢?

健康检测的逻辑

当服务方下线,正常情况下我们会收到连接断开的通知事件,在这个事件里面直接加处理逻辑不就可以了?但是不行,因为应用健康状态不仅包括 TCP 连接状态,还包括应用本身是否存活,很多情况下 TCP 连接没有断开,但是应用可能已经僵死了。

所以,业内常用的检测方式就是用心跳检测机制。心跳机制说起来也不复杂,其实就是服务调用方每隔一段时间就问一下服务提供方,“兄弟,你还好吧”,然后服务方很诚实地告诉调用方它目前的状态。

一般,服务方会有三种情况:

  • 健康状态:建立连接成功,并且心跳探活也一直成功
  • 亚健康状态:连接连接成功,但是心跳请求连接失败
  • 死亡状态:建立连接失败

节点的状态并不是固定不变的,他会根据心跳或重连的结果来动态变化,具体状态间转换图如下:

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值