20201113 心跳检测

作用:监视机器的运行状况,提高系统可用性的措施;

分类:心跳检测有2种: 主动和被动;

实现:定时线程池,发送心跳包;

缺陷:收不到心跳,并不能说明系统宕机;

 

在集群环境中,一台主Master机器会管理好几台slave机器,Master机器的一个重要功能是如何在运行过程中监视slave机器的运行异常状态,如网络断链,系统崩溃,从而对这些异常状态进行处理。采取的方式是心跳检测。

心跳检测有2种: 主动和被动

主动是指Master节点定时向所有节点发送心跳检测请求,所有节点响应后返回一个状态码,如某些节点返回异常或失败的状态码,则master认为此台机器处于异常状态,将会自动停止该台服务响应应用请求,并向管理员发告警邮件

被动是指slave节点定时向master节点汇报自己的状态,如在指定的时间间隔内,master没有收到某节点的汇报信息,master就认为此节点处于异常状态.

实现方式其实就是定时(时间间隔看应用需要,一般都是很短)远程服务调用。第一种方法是直接调用,根据返回信息来判断,第2种是 根据最近一次的汇报状态与当前的时间差,如超过规定的时间则认为异常

 

心跳检测不是万能的,收到心跳说明节点正确,收不到心跳,并不一定说明节点宕机,有可能是其他原因(节点繁忙、检测超时)造成的暂时收不到心跳。

周期检测心跳机制:每隔一定的时间向节点集群发送检测请求,设定一个超时时间,如果超过超时时间,则判定节点死亡。

累计失效检测机制

 

心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制。

一般是从服务器slave,定时的发送心跳包给主服务器master,把自己机器相关的信息发给主服务器,以确定从服务器正常工作

Netty心跳机制,从服务器发送心跳包是通过一个线程池定时发送心跳包的。

建立一个新线程定时发送心跳包。

 

例如:服务端和客户端之间进行通讯,每隔5分钟进行一次心跳检测,检测和服务器连接是否正常。客户端每5分钟发一个心跳检测数据帧,服务端接收到数据帧表示通过,否则表示客户端断开,抛出异常。

判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉。用于检测TCP的异常断开。

 

代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息。如果服务端几分钟内没有收到客户端信息则视客户端断开。比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。发包方可以是客户也可以是服务端,看哪边实现方便合理。一般是客户端。服务器也可以定时轮询发心跳下去。一般来说,出于效率的考虑,是由客户端主动向服务器端发包。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值