作用:监视机器的运行状况,提高系统可用性的措施;
分类:心跳检测有2种: 主动和被动;
实现:定时线程池,发送心跳包;
缺陷:收不到心跳,并不能说明系统宕机;
在集群环境中,一台主Master机器会管理好几台slave机器,Master机器的一个重要功能是如何在运行过程中监视slave机器的运行异常状态,如网络断链,系统崩溃,从而对这些异常状态进行处理。采取的方式是心跳检测。
心跳检测有2种: 主动和被动
主动是指Master节点定时向所有节点发送心跳检测请求,所有节点响应后返回一个状态码,如某些节点返回异常或失败的状态码,则master认为此台机器处于异常状态,将会自动停止该台服务响应应用请求,并向管理员发告警邮件
被动是指slave节点定时向master节点汇报自己的状态,如在指定的时间间隔内,master没有收到某节点的汇报信息,master就认为此节点处于异常状态.
实现方式其实就是定时(时间间隔看应用需要,一般都是很短)远程服务调用。第一种方法是直接调用,根据返回信息来判断,第2种是 根据最近一次的汇报状态与当前的时间差,如超过规定的时间则认为异常
心跳检测不是万能的,收到心跳说明节点正确,收不到心跳,并不一定说明节点宕机,有可能是其他原因(节点繁忙、检测超时)造成的暂时收不到心跳。
周期检测心跳机制:每隔一定的时间向节点集群发送检测请求,设定一个超时时间,如果超过超时时间,则判定节点死亡。
累计失效检测机制
心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制。
一般是从服务器slave,定时的发送心跳包给主服务器master,把自己机器相关的信息发给主服务器,以确定从服务器正常工作
Netty心跳机制,从服务器发送心跳包是通过一个线程池定时发送心跳包的。
建立一个新线程定时发送心跳包。
例如:服务端和客户端之间进行通讯,每隔5分钟进行一次心跳检测,检测和服务器连接是否正常。客户端每5分钟发一个心跳检测数据帧,服务端接收到数据帧表示通过,否则表示客户端断开,抛出异常。
判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉。用于检测TCP的异常断开。
代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息。如果服务端几分钟内没有收到客户端信息则视客户端断开。比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。发包方可以是客户也可以是服务端,看哪边实现方便合理。一般是客户端。服务器也可以定时轮询发心跳下去。一般来说,出于效率的考虑,是由客户端主动向服务器端发包。