分布式系统的心跳机制设计中的几个要点及问题

1、TCP协议自带的心跳keepalive
TCP协议的实现中,有心跳机制的实现
操作:
    setsockopt(handle, SOL_SOCKET, SO_KEEPALIVE, aliveValue);
功能:
    每隔固定时间发送probe包,等待接收ack

缺点:
     1、无法回返应用层,只是应用层在执行socket调用的时候,会返回错误

2、应用层心跳 keepalive
应用系统自己实现的心跳机制
功能:
    固定时间间隔向对端发送probe包,等待接收ack

特点:
    1、能够判断对端的网络现状:良好连接或者断线
    2、能够判断对端应用层运行状况


3、应用层心跳实现要点:
    1、心跳发送与业务逻辑同一个线程(实际上,只要心跳发送线程与网络线程是同一个线程,足以满足)
    2、心跳发送与业务逻辑同一个网络连接
    3、心跳检查的结果应回调给应用层
    4、心跳发送的频率应可以设置:在移动端的心跳实现中,心跳频率达到一定程度,会影响终端的耗电量

几个重要问题:
1、为什么分布式系统必须实现应用层的心跳机制,而不使用TCP协议中的keepalive机制?
如上,TCP keepalive机制与应用层keepalive机制的特点决定的

2、发送间隔、检查间隔、超时时长应该设置为多少,才是最合适的?
根据场景不同,指标也不一样。没有固定的数值
如下样本:
    发送间隔10,检查间隔1:
    发送间隔1,检查间隔10:
    发送间隔10,检查间隔10:
    发送间隔10,检查间隔20:
    发送间隔20, 检查间隔10:

3、为什么应用层心跳不要用单独一个线程来执行?
应用层心跳发送用单一线程,只能反映网络连接的情况,不能够反映发送者当前业务线程的运行情况,如线程阻塞等
但应用层心跳发送也不是一定要与业务逻辑同一个线程,我认为与网络线程在同一个线程即可,但网络线程需有办法知道业务各线程的

4、为什么应用层心跳要跟业务消息共享同一个网络连接?
不使用同一个连接,心跳机制就没有实际意义

转自:http://blog.chinaunix.net/uid-8332744-id-4023796.html
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值