如何优化网络心跳机制

什么是心跳机制

最早的心跳机制用于服务器的安全备份机制,是为了防止服务器死机,而在服务器之间采用专用的端口和线路,周期性传送简短的信息,心跳就是形象的比喻。一旦 收不到对方的心跳信息,服务器可以接管对方的业务,避免业务的停滞。为了业务的顺畅进行,服务器发送的心跳信息可以非常频密。

微信的信令风暴将人们的目光导向心跳机制,那么心跳机制是怎么回事呢?

最早的心跳机制用于服务器的安全备份机制,是为了防止服务器死机,而在服务器之间采用专用的端口和线路,周期性传送简短的信息,心跳就是形象的比 喻。一旦收不到对方的心跳信息,服务器可以接管对方的业务,避免业务的停滞。为了业务的顺畅进行,服务器发送的心跳信息可以非常频密。

这种机制被手机上的互联网应用所借用,无论是Android的原生应用,还是QQ、微博和微信,都采用了这种心跳机制,也就是终端定时向应用服务器发送简短的信息。但是与服务器之间的心跳机制相比,还是有一些差别:

1. 心跳信息是单方向的,只有终端发到应用服务器;

2. 心跳信息的周期比较长,比如旧版QQ的心跳周期为30s,新版QQ为180s,微信为300s,Google原生应用为1680s左右。

另外,互联网应用的心跳包除了宣告终端在线外,还有一项重要的任务,就是提供终端的即时地址,方便应用服务器的寻址。

有了互联网应用的心跳机制,应用服务器可以及时下发(Push)用户相关的信息,比如微信中的短消息、图片或者语音等。

心跳包也会带来很多副作用,比如终端更为费电,还可能给移动通信网络带来信令风暴。

看起来很完美的心跳机制,为什么会给移动通信网络带来信令风暴呢?

原来,移动通信网络中由于用户众多、资源稀缺,每个用户都是动态占用资源,比如IP地址以及无线信道。每次发送心跳包,都需要移动通信网络为用户分配资源,分配的过程体现在信令的发送和接收上。一次心跳包的发送过程,牵涉的信令多达几十条。

随着互联网APP的普及,大量的终端周期性地发送心跳包,效果类似于IP网络中的DDOS(分布式拒绝服务攻击,一种常用的黑客攻击手段),必然对 移动通信网络设备带来冲击,造成拥塞等情况,这种现象就是信令风暴。信令风暴不仅中国移动的GPRS网络存在,中国联通的WCDMA网络、中国电信的 CDMA网络都存在。由于中国移动用户数量庞大,因此信令风暴的影响更显著而已,简而言之,就是50步与100步的差别。

互联网APP的心跳机制对移动网络的冲击很大,那么有什么方法可以缓解乃至解决这个问题呢?

从互联网APP的角度看,应该区分是移动网络接入还是WLAN接入,智能调整心跳包的发送频率。在移动网络接入时,降低心跳包的发送频率,这样虽然 服务器推送的信息会有一些延迟,但是终端更省电,移动网络更稳健。比如旧版QQ的心跳周期为30s,新版QQ为180s,微信为300s,已经呈现出逐步 延长的趋势,还可以再调整,直至接近Google原生应用的1680s左右。

目前,互联网APP心跳包的发送频率由APP一手包办,这是不合理的,应该开放给用户进行设置,允许用户在省电和及时等多个场景间切换。

现在每个人的手机上都装有多个互联网APP,比如QQ、微信、微博和淘宝等,如果每个APP都发送心跳包,心跳包的发送频率将大幅增加。像微信、 QQ 等APP,可以考虑联合发送心跳包,这样可以减少不少心跳包。另外如果从操作系统的层面统一心跳包,效果会更好。苹果的IOS已经做了一个很好的尝试,建 立了一个位置寄存器APNS,将所有的APP联合起来,统一发送心跳。Android系统其实也可以如法炮制,据称小米手机有意这样做,像阿里OS也应该 可以做。运营商自己开发的OS更加应该是这方面的表率。

终端侧的这些做法,将能有效减少心跳包的发送,从而缓解信令风暴。

文章地址:http://www.ithome.com/html/it/43116.htm

时间: 2024-10-12 17:18:18

如何优化网络心跳机制的相关文章

心跳机制

网络中的接收和发送数据都是使用操作系统中的SOCKET进行实现.但是如果此套接字已 经断开,那发送数据和接收数据的时候就一定会有问题.可是如何判断这个套接字是否还可以使用呢?这个就需要在系统中创建心跳机制.其实TCP中已经为我们 实现了一个叫做心跳的机制.如果你设置了心跳,那TCP就会在一定的时间(比如你设置的是3秒钟)内发送你设置的次数的心跳(比如说2次),并且此信息不 会影响你自己定义的协议.所谓“心跳”就是定时发送一个自定义的结构体(心跳包或心跳帧),让对方知道自己“在线”. 以确保链接的

轮询与心跳机制

上一篇内容参见() 在上一篇文章中提到的缓存内网服务端会话信息中,外网服务端保存内网服务端会话的有效性以及平台上监控所有内网服务端的网络状况,模仿心跳机制实现,这里在做一点叙诉,关于思路和具体实现. 在很多的平台应用中,都有这样的需求,平台内包括多个子系统或者属于其管控范围内的其他平台,需要对这些系统进行统一的监控,来查看当前的运行状态或者其他运行信息,我们的应用也有这样的一个情况,需要再外网服务端(平台)上监控,其下运行的多个内网服务端的网络状况,查阅了写资料后确立了2种可实现的方式. 1:轮

互联网推送服务原理:长连接+心跳机制(MQTT协议)

互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接,那么要如何维护长连接呢: 在写之前,我们首先了解一下为什么Android维护长连接需要心跳机制,首先我们知道,维护任何一个长连接都需要心跳机制,客户端发送一个心跳给 服务器,服务器给客户端一个心跳应答,这样就形成客户端服务器的一次完整的握手

一种工作流心跳机制的设计

最近工作中一直和SWF(Amazon的Simple Work Flow)打交道,在一个基于SWF的工作流框架上面开发和修bug.SWF的activity超时时间是5分钟,在activity task开始执行以后,activity worker需要主动发送心跳请求告知service端:“我还活着,我还在干活”,如果出现超过5分钟(可以配置)没有心跳,SWF的service端就认为,你已经挂了,我需要把这个activity安排到别的activity worker上来执行了.借用AWS官网的一张图:

移动互联网消息推送原理:长连接+心跳机制(MQTT协议)

互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接,那么要如何维护长连接呢: 在写之前,我们首先了解一下为什么Android维护长连接需要心跳机制,首先我们知道,维护任何一个长连接都需要心跳机制,客户端发送一个心跳给 服务器,服务器给客户端一个心跳应答,这样就形成客户端服务器的一次完整的握手

服务器心跳机制

心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制. 应用场景: 在长连接下,有可能很长一段时间都没有数据往来.理论上说,这个连接是一直保持连接的,但是实际情况中,如果中间节点出现什么故障是难以知道的.更要命的是,有的节点(防火墙)会自动把一定时间之内没有数据交互的连接给断掉.在这个时候,就需要我们的心跳包了,用于维持长连接,保活 什么是心跳机制? 就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息

rabbitmq 的心跳机制&应用

官方文档说: If a consumer dies (its channel is closed, connection is closed, or TCP connection is lost) without sending an ack, RabbitMQ will understand that a message wasn't processed fully and will re-queue it 即: 如果消费者进程挂掉了(channel关闭, connection关闭,或者tcp

ESFramework 开发手册(07) -- 掉线与心跳机制(转)

虽然我们前面已经介绍完了ESFramework开发所需掌握的各种基础设施,但是还不够.想要更好地利用ESFramework这一利器,有些背景知识是我们必须要理解的.就像本文介绍的心跳机制,在严峻的Internet条件下,是通信系统中不可或缺的机制之一. 在Internet上采用TCP进行通信的系统,都会遇到一个令人头疼的问题,就是“掉线”.而“TCP掉线”这个问题远比我们通常所能想象的要复杂的多 —— 网络拓扑纷繁复杂.而从始节点A到终节点B之间可能要经过N多的交换机.路由器.防火墙等等硬件设备

心跳机制详解

应用场景: 在长连接下,有可能很长一段时间都没有数据往来.理论上说,这个连接是一直保持连接的,但是实际情况中,如果中间节点出现什么故障是难以知道的.更要命的是,有的节点(防火墙)会自动把一定时间之内没有数据交互的连接给断掉.在这个时候,就需要我们的心跳包了,用于维持长连接,保活 什么是心跳机制? 就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息则视客户端断开. 发包方:可以是客户也可以是服务端,看哪边实现方便合理. 心跳包之所以叫心跳包是因