心跳机制该怎么优化

微信的信令风暴可以让人们的目光导向心跳机制,那么为什么会发生心跳机制? 为什么又会给移动通信网络带来信令风暴呢?

  早期的心跳机制是用于服务器的安全备份机制,其目的是为了防止服务器突然死机,因此在服务器之间采用专用的端口和线路,简短的信息通过周期性的传递,因此形象的比喻成心跳。一旦对方的心跳信息接收不到,服务器就可以接管对方的业务,避免业务进行停滞。服务器发送的心跳信息可以很频密,从而使业务进行的畅通无阻。

  这种机制被手机上的互联网应用所借用,无论是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更加应该是这方面的表率。

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

  从网络侧的角度,如果终端发送心跳包是一个既成事实的话,及时进行设备扩容就是势在必行的了。目前看,基站控制器以及核心网的设备受信令风暴的影响大,需要优先扩容。当然,运营商有苦衷,认为是在帮APP打工。但是,运营商也必须明白顺势而为的重要性,与其被动接招,不如早作打算。

  什么打算呢?就是宣传从移动网络的角度看,心跳包并不是必须的。利用短消息与APP深度整合,不用心跳包也可以方便地实现APP消息的推送,又节省终端的电力,又避免对移动网络的冲击,两全其美,何乐不为呢?

  这样釜底抽薪后,心跳机制对移动网络的冲击将是可以控制的了。

时间: 2024-10-26 23:13:32

心跳机制该怎么优化的相关文章

从微信谈起 如何优化互联网APP心跳机制

微信的信令风暴将人们的目光导向心跳机制,那么心跳机制是怎么回事呢? 最早的心跳机制用于服务器的安全备份机制,是为了防止服务器死机,而在服务器之间采用专用的端口和线路,周期性传送简短的信息,心跳就是形象的比喻.一旦收不到对方的心跳信息,服务器可以接管对方的业务,避免业务的停滞.为了业务的顺畅进行,服务器发送的心跳信息可以非常频密. 这种机制被手机上的http://www.aliyun.com/zixun/aggregation/11969.html">互联网应用所借用,无论是Android的

服务器-TCP心跳机制--Server踢出僵死连接的问题

问题描述 TCP心跳机制--Server踢出僵死连接的问题 TCP的Server端定时接收Client的心跳,在Server端发现Client在8秒内没有心跳发过来,就断开这个连接. 问题是:Server同时有上万个TCP连接,不可以用遍历的方法,怎样找到僵死连接(即超时客户端)? 解决方案 为什么不用遍历方法,肯定要用遍历方法啊,不论上层是什么方法,底层肯定都是遍历.要相信计算机运算速度,你的上万个tcp连接,cpu估计用不了100毫秒就遍历完了. 解决方案二: 你获取到的超时对象中设置一个i

netty4使用protubuf作为编解码框架,心跳机制怎么加进去呢?

问题描述 netty4使用protubuf作为编解码框架,心跳机制怎么加进去呢? 1.xxx.proto定义后的POJO好像通信的时候挺死的,怎么能让它在通信的时候能够解码传输的各种数据呢?根据需要传输的数据类型来定义吗?比如定义个product类,实现 它的传输并没什么用啊,项目里面肯定用到各种其他数据啊. 2.实现了传输特定的对象并针对对象编解码,然而心跳机制并不知道怎么加进去.求源码求指导...扣首. 解决方案 参考:http://stackoverflow.com/questions/1

channelinactived-Netty需要心跳机制来进行重连吗?

问题描述 Netty需要心跳机制来进行重连吗? Netty需要心跳机制来进行重连吗?客户端与服务端的连接断开之后,不是会触发ChannelInactived方法吗?在这个方法里直接重连不就行了吗?还需要心跳机制吗?不好意思,刚接触Netty不久. 解决方案 心跳机制,在一般的网络通讯中是需要的.Netty 也一样!

判定生死的心跳机制 --ESFramework 4.0 快速上手(07)

      在Internet上采用TCP进行通信的系统,都会遇到一个令人头疼的问题,就是"掉线".而"TCP掉线"这个问题远比我们通常所能想象的要复杂的多 -- 网络拓扑纷繁复杂.而从始节点A到终节点B之间可能要经过N多的交换机.路由器.防火墙等等硬件设备,每个硬件设备的相关设定也不统一,再加上网络中可能出现的拥塞.延迟等,使得我们在编程时,处理掉线也非常棘手.   一.从程序的角度看待TCP掉线       TCP掉线的原因可能多种多样.不一而足,比如,客人的电

浅谈.NET反射机制的性能优化 附实例下载_实用技巧

可能大家谈到反射面部肌肉都开始抽搐了吧!因为在托管语言里面,最臭名昭著的就是反射!它的性能实在是太低了,甚至在很多时候让我们无法忍受.不过不用那么纠结了,老陈今天就来分享一下如何来优化反射! 概述 本文涉及到的反射优化的途径有如下两种: 通过Delegate.CreateDelegate()创建委托进行优化 通过.NET4的动态运行时进行优化 如果您还知道其他更加有效的优化途径,请不吝赐教! 准备工作 今天我们总计要对比五种不同的调用对象成员的方式,也算是一种性能测评. 在开始之前,我们首先定义

Android垃圾回收机制及程序优化System.gc_Android

1.垃圾收集算法的核心思想 Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象.该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用. 垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用,则为垃圾对象,可以回收其占据的空间,用于再分配.垃圾收集算法的选择和垃圾收集系统参数的合理调节直接影响着系统性能,

Android微信智能心跳方案

前言:在13年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援.刚到广州的时候,Ray让我和春哥对Line和WhatsApp的心跳机制进行分析.我和春哥抓包测试了差不多两个多礼拜,在我们基本上摸清了Line和WhatsApp的心跳机制后,Ray才告诉我们真正的任务--对微信的固定心跳进行优化,并告诉我们这不是一件容易的事情.于是我和春哥开始构思第一个方案,我们开始想用统计的方法来解决问题,当我们拿着第一个方案和Ray讨论时,发现不能优雅应对Ray的所有提问:1.测试环境的准

mapreduce运行机制

谈mapreduce运行机制,可以从很多不同的角度来描述,比如说从mapreduce运行流程来讲解,也可以从计算模型的逻辑流程来进行讲解,也许有些深入理解了mapreduce运行机制还会从更好的角度来描述,但是将mapreduce运行机制有些东西是避免不了的,就是一个个参入的实例对象,一个就是计算模型的逻辑定义阶段,我这里讲解不从什么流程出发,就从这些一个个牵涉的对象,不管是物理实体还是逻辑实体. 首先讲讲物理实体,参入mapreduce作业执行涉及4个独立的实体: 客户端(client):编写