`
geeksun
  • 浏览: 953522 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

软件设计中的心跳机制

阅读更多
       前言
       在软件的设计架构中,心跳检测很重要,像在dubbo service、web api invoke中,需要consumer端感知provider端是否存活,不存活则切换调用另一个provider。
 
       一、什么是心跳检测
       判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉。用于检测TCP的异常断开。
       基本原因是服务器端不能有效的判断客户端是否在线也就是说,服务器无法区分客户端是长时间在空闲,还是已经掉线的情况。所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。
       代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息。如果服务端几分钟内没有收到客户端信息则视客户端断开。比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。
        发包方可以是客户也可以是服务端,看哪边实现方便合理。一般是客户端。服务器也可以定时轮询发心跳下去。
       一般来说,出于效率的考虑,是由客户端主动向服务器端发包,而不是相反。
 
       二、心跳机制的实现机制
网络中的接收和发送数据都是使用操作系统中的SOCKET进行实现。但是如果此套接字已经断开,那发送数据和接收数据的时候就一定会有问题。可是如何判断这个套接字是否还可以使用呢?这个就需要在系统中创建心跳机制。其实TCP中已经为我们实现了一个叫做心跳的机制。如果你设置了心跳,那TCP就会在一定的时间(比如你设置的是3秒钟)内发送你设置的次数的心跳(比如说2次),并且此信息不会影响你自己定义的协议。所谓“心跳”就是定时发送一个自定义的结构体(心跳包或心跳帧),让对方知道自己“在线”。 以确保链接的有效性。
所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息则视客户端断开。比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。发包方:可以是客户也可以是服务端,看哪边实现方便合理。一般是客户端。服务器也可以定时轮询发心跳下去。心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。
在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项。系统默认是设置的是2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。心跳包一般来说都是在逻辑层发送空的包来实现的。下一个定时器,在一定时间间隔下发送一个空包给客户端,然后客户端反馈一个同样的空包回来,服务器如果在一定时间内收不到客户端发送过来的反馈包,那就只有认定说掉线了。只需要send或者recv一下,如果结果为零,则为掉线。 
但是,在长连接下,有可能很长一段时间都没有数据往来。理论上说,这个连接是一直保持连接的,但是实际情况中,如果中间节点出现什么故障是难以知道的。更要命的是,有的节点(防火墙)会自动把一定时间之内没有数据交互的连接给断掉。在这个时候,就需要我们的心跳包了,用于维持长连接,保活。在获知了断线之后,服务器逻辑可能需要做一些事情,比如断线后的数据清理呀,重新连接呀当然,这个自然是要由逻辑层根据需求去做了。
       总的来说,心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。
 
       三、心跳检测的基本步骤:
       1. 客户端每隔一个时间间隔发生一个探测包给服务器。
       2. 客户端发包时启动一个超时定时器。
       3. 服务器端接收到检测包,应该回应一个包。
       4. 如果客户机收到服务器的应答包,则说明服务器正常,删除超时定时器。
       5. 如果客户端的超时定时器超时,依然没有收到应答包,则说明服务器挂了。
分享到:
评论

相关推荐

    基于QT+C++开发的聊天软件+Mysql数据库+网络连接+用户管理等+源码+文档(毕业设计&课设&项目开发)

    基于QT+C++开发的聊天软件+Mysql...实现了登录验证、心跳包机制,多线程C/S架构,Mysql存储聊天和用户信息, 使用了穿透工具把服务器穿透到了公网,可以实现公网聊天, 实现即时通讯,禁言,黑名单,连接管理等基本功能

    基于心跳超时机制的Hadoop实时容错技术 (2015年)

    针对官方的Hadoop软件中提供的节点心跳超时容错机制对短作业并不合理,而且忽略了异构集群中各节点超期时间设置的公平性的问题,提出了公平心跳超时容错机制。首先根据每个节点的可靠性及计算性能构建节点故障误判...

    毕业设计-员工服务工具-后台管理系统(源代码+说明)

    心跳机制,如果有用户热饭超时通过心跳机制将超时用户下线 websocket连接,实时推送最新的排队状态 当前人热饭完成后会通过微信模板消息通知到下一个等待的人,那么等待用户就可以在微信的聊天列表中查看到排号到号...

    服务器集群设计说明.docx

    RoseMirrorHA成熟的数据镜像技术,全面的高可用性支持,即保证了系统的最佳的性能,最高的可靠性,同时又通过丰富的应用支持,灵活智能的控制机制,简单易用的管理配置,是最佳性价比的纯软高可用性解决方案。 服务器集群...

    论文研究-iSCSI高可用存储解决方案的设计和实现.pdf

    介绍了心跳传输机制和...以成熟的开源软件Hearbeat和 UNH iSCSI软件为基础,在Linux操作系统平台上设计和实现了一套在广域网下基于iSCSI技术的高可用存储解决方案,从而为中小企业关键业务提供经济、高可用的存储服务。

    PCAuto 5.0

     ●重新设计开发的网络管理程序,能有效的管理多个网络节点状态,数据采用变化传输,节省了网络开销,故障和容错机制更完善;  ●适合企业信息化的信息集成,软件不但大数据量处理功能,同时组态更便捷;  ...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    02-DBA参与项目数据库设计及培训开发人员高效设计MYSQL库语句.avi 03-老男孩核心思想-项目周期的制定思想.avi 04-linux进程占用cpu高的解决方案案例.avi 05-数据库账户权限控制多种思路及技巧.avi 06-数据库客户端...

    大脑风暴来临-自建扫码支付服务器平台(硬件设计)-电路方案

    现在支付宝、微信扫码支付使用...设计一台优雅的重连机制非常重要。 未来产品近继续完善,加入软件远程升级能力,在协议方面会添加多种协议。 PS:该项目设计来源于立创社区,设计资料仅供学习参考。详见附件原文出处

    深入探索RocketMQ源码:透视消息中间件的内核机制

    本文深入探索了RocketMQ的源码,从源码环境的搭建开始,逐步解读了RocketMQ的核心组件和功能​​。...通过逐层深入的解读方法,本文为读者提供了对RocketMQ源码的全面理解,有助于在实际项目中更好地应用RocketMQ​​。

    JINI核心技术

    6.1.3 发现机制的要求 112 6.2 发现概述 112 6.2.1 IP组播基础 112 6.2.2 服务发起的发现 113 6.2.3 查找服务发起的发现 113 6.2.4 “直接”发现 114 6.3 在应用程序中使用发现 115 6.3.1 DiscoveryListener接口 115...

    服务器虚拟化部署方案(2).doc

    用的心跳线来传递信息,互相检测对方的工作状态,此时工作机拥有对磁盘阵列 的占用权利,可以对磁盘阵列的数据进行读写,而备份机无法对磁盘阵列进行操 作,甚至无法发现磁盘阵列,这是通过双机软件的"软件锁"功能来...

    (分享)汽车胎压监测系统(原理图+源代码)-电路方案

    系统host端驱动解析四个胎压模块数据,利用机制组包,数据存储在8K滚筒缓存区中。 USB-SERIAL驱动接口,解密节点数据。 胎压应用调用USB-SERIAL驱动接口,分别读取四个胎压模块数据 软件加密设计流程图如下: 附件...

    JINI 核心技术

    6.1.3 发现机制的要求 112 6.2 发现概述 112 6.2.1 IP组播基础 112 6.2.2 服务发起的发现 113 6.2.3 查找服务发起的发现 113 6.2.4 “直接”发现 114 6.3 在应用程序中使用发现 115 6.3.1 DiscoveryListener接口 115...

    电子导航云狗源码分享-电路方案

    系统host端驱动解析GPS及GPRS数据,利用机制组包,存储GPS数据在链表节点及8K GPS滚筒缓存区中,GPRS数据存储在8K GPRS滚筒缓存区中。 导航地图调用USB-SERIAL驱动接口,读取链表中节点数据。 云狗狗应用调用USB-...

    03开源NewSql数据库TiDB-Deep Dive into TiDB

    这两点是一个数据库软件的基础功能,作为业务的基石,任何一点抖动或者错误都可能对业务造成巨大的影响。目前已经有大量的用户在线上使用 TiDB,这些用户的数据量在不断增加、业务也在不断演进。 提升 TiDB 在大...

Global site tag (gtag.js) - Google Analytics