`

KeepAlive vs. heart-beat比较

 
阅读更多

很多人都知道TCP并不会去主动检测连接的丢失,这意味着,如果双方不产生交互,那么如果网络断了或者有一方机器崩溃,另外一方将永远不知道连接已经不可用了。检测连接是否丢失的方法大致有两种:keepalive和heart-beat。

Keepalive是很多的TCP实现提供的一种机制,它允许连接在空闲的时候双方会发送一些特殊的数据段,并通过响应与否来判断连接是否还存活着(所谓keep~~alive)。我曾经写过一篇关于keepalive的blog,但后来我也发现,其实keepalive在实际的应用中并不常见。为何如此?这得归结于keepalive设计的初衷。Keepalive适用于清除死亡时间比较长的连接。
比如这样的场景:一个用户创建tcp连接访问了一个web服务器,当用户完成他执行的操作后,很粗暴的直接拨了网线。这种情况下,这个tcp连接已经断开了,但是web服务器并不知道,它会依然守护着这个连接。如果web server设置了keepalive,那么它就能够在用户断开网线的大概几个小时以后,确认这个连接已经中断,然后丢弃此连接,回收资源。
采用keepalive,它会先要求此连接一定时间没有活动(一般是几个小时),然后发出数据段,经过多次尝试后(每次尝试之间也有时间间隔),如果仍没有响应,则判断连接中断。可想而知,整个周期需要很长的时间。
所以,如前面的场景那样,需要一种方法能够清除和回收那些在系统不知情的情况下死去了很久的连接,keepalive是非常好的选择。
但是,在大部分情况下,特别是分布式环境中,我们需要的是一个能够快速或者实时监控连接状态的机制,这里,heart-beat才是更加合适的方案。
Heart-beat(心跳),按我的理解,它的原理和keepalive非常类似,都是发送一个信号给对方,如果多次发送都没有响应的话,则判断连接中断。它们的不同点在于,keepalive是tcp实现中内建的机制,是在创建tcp连接时通过设置参数启动keepalive机制;而heart-beat则需要在tcp之上的应用层实现。一个简单的heart-beat实现一般测试连接是否中断采用的时间间隔都比较短,可以很快的决定连接是否中断。并且,由于是在应用层实现,因为可以自行决定当判断连接中断后应该采取的行为,而keepalive在判断连接失败后只会将连接丢弃。
关于heart-beat,一个非常有趣的问题是,应该在传输真正数据的连接中发送“心跳”信号,还是可以专门创建一个发送“心跳”信号的连接。比如说,A,B两台机器之间通过连接m来传输数据,现在为了能够检测A,B之间的连接状态,我们是应该在连接m中传输“心跳”信号,还是创建新的连接n来专门传输“心跳”呢?我个人认为两者皆可。如果担心的是端到端的连接状态,那么就直接在该条连接中实现“心跳”。但很多时候,关注的是网络状况和两台主机间的连接状态,这种情况下, 创建专门的“心跳”连接也未尝不可。

原文地址:http://blog.csdn.net/historyasamirror/archive/2011/05/14/6419916.aspx

 

 

分享到:
评论

相关推荐

    httpd-2.4.46-win64-VS16.zip

    例如,可以通过调整MaxKeepAliveRequests、KeepAliveTimeout等参数来优化连接管理。 8. **模块管理**:Apache支持丰富的模块扩展,如mod_rewrite用于URL重写,mod_php用于处理PHP脚本。你可以根据需要加载或禁用...

    springboot-keepalive设置测试

    4. 测试不同负载下服务器的性能,比较启用和禁用keepalive的情况。 通过这些测试,我们可以评估和优化Spring Boot应用的网络性能,确保在处理大量并发请求时,服务器能有效地利用HTTP长连接,减少延迟并提高吞吐量...

    安装keepalived确实的rpm包

    安装keepalived时缺少的一些包,收集起来共享,包括 autoconf-2.63-5.1.el6.noarch.rpm automake-1.11.1-1.2.el6.noarch.rpm cluster-glue-1.0.5-2.el6.i686.rpm cluster-glue-libs-1.0.5-2.el6.i686.rpm cluster-...

    keepalive1.1.17.zip

    MySQL的主主复制结合Keepalive工具的使用详解 在分布式数据库系统中,数据的高可用性和一致性至关重要。MySQL的主主复制是一种常见的解决方案,它允许两个或多个服务器之间同步数据,确保任何一处的数据更改都会被...

    rabbitmq-keepalive-haproxy.tgz

    标题中的"rabbitmq-keepalive-haproxy.tgz"表明这是一个关于RabbitMQ高可用集群配置的压缩包,其中结合了Haproxy和Keepalived两个组件。这个集群方案通常用于构建一个稳定且容错性强的分布式消息中间件环境。 ...

    keepalive rpm.rar

    标题 "keepalive rpm.rar" 暗示了这个压缩包包含的是 CentOS 系统下用于安装 keepalived 服务的 RPM 包。keepalived 是一个开源项目,它主要用于实现 Linux 系统上的高可用性(High Availability, HA)解决方案,...

    keepalive--aarch64.rar

    标题中的"keepalive--aarch64.rar"表明这是一个针对aarch64架构的软件或程序,使用了“keepalive”技术,并且被压缩在RAR文件格式中。RAR是一种流行的压缩格式,通常用于存储和传输大量数据,因为它可以提供较高的...

    YD-T_1251.3-2003_路由协议一致性测试方法—_边界网关协议(BGP4)

    3. **BGP会话建立**:BGP会话的建立过程涉及TCP三次握手,打开和确认报文的交换,以及BGP OPEN、KEEPALIVE和UPDATE消息的交互。 4. **路由选择**:BGP使用一套复杂的策略来选择最佳路径,包括路径长度、本地优先级...

    Mysql keepalive-1.4.5.tar.gz

    标题中的“Mysql keepalive-1.4.5.tar.gz”指的是该软件的1.4.5版本的压缩包文件,通常以`.tar.gz`格式提供,这是一种在Linux和Unix环境中常见的归档和压缩方式。 描述中提到,这个包适用于MySQL 5.6及更高版本,这...

    2天学习ElasticSearch教程(3G)

    ---05Lucene的API介绍-复杂查询.mp4┃---06ElasticSearch简介.mp4┃---07ES和Solr的对比.mp4┃---08CentOS7的安装.mp4┃---09CentOS7的特殊命令.mp4┃---10keepalived说明.mp4┃---11虚拟keepalive

    Nginx双向SSL认证配置详解

    keepalive_timeout 65; server { listen 443 ssl; server_name ttt.com; ssl on; ssl_certificate /data/sslKey/server-cert.cer; # 服务端证书公钥 ssl_certificate_key /data/sslKey/server-key.key; # ...

    pyloris-3.2-win32

    -k --keepalive Using the --keepalive flag will add the Connection: Keep-Alive header to the HTTP request. On vulnerable servers, this will increase the duration of connections considerably. -p, --...

    ApacheBench(压力测试)

    13. `-k`:启用HTTP KeepAlive特性,保持TCP连接的持久性,更接近实际网络环境。 14. `-d`、`-S`、`-g` 和 `-e` 参数提供了对测试结果展示的定制,例如是否显示百分比服务表、置信区间估计和警告信息。 Apache...

    tomcat中的几点配置说明

    1. 如何加大tomcat连接数 在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有: minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10 maxProcessors:最大连接线程数...

    java-er.com - 个人Linux整理笔记:服务篇.docx

    * KeepAliveTimeout:保持连接状态时的超时时间 * Include:需要包含进来的其他配置文件 五、Apache 的区域配置项参数 Apache 的区域配置项参数有很多,以下是一些常用的区域配置项参数: * <Directory />:控制...

    keepalive.zip

    为了解决这个问题,"keepalive.zip"这个压缩包提供了一个名为"keepalive.jar"的插件,其功能就是定时向数据库发送查询请求,以保持连接的活跃,防止因长时间无交互而自动断开。 "keepalive"机制在网络通信中是一种...

    mescroll+keepAlive2.0.zip

    本文主要介绍mescroll.js+keepAlive+meta属性记住滚动位置,比keepAlive 1.0版本代码更简洁

    LVS+Keepalive for centos7-可实施文档.docx

    - 支持三种主要的负载均衡技术:VS/NAT、VS/TUN 和 VS/DR。 - **负载均衡技术详解**: - **VS/NAT (Virtual Server via Network Address Translation)**: - 通过网络地址转换技术实现负载均衡。 - 调度器重写...

    ccie-lab-ts1(web-iou)

    1.DHCP R19---有个ACL,可以直接删掉 R17---e0/1口没有做authentication R18---e0/1口没有做authentication ======================... R22和R23的keepalive mode 一个是双向 一个是被动 将R23的mode改为 bidirectional

    keepalive--aarch64

    keepalive--aarch64

Global site tag (gtag.js) - Google Analytics