微信的信令风暴可以让人们的目光导向心跳机制,那么为什么会发生心跳机制? 为什么又会给移动通信网络带来信令风暴呢?
早期的心跳机制是用于服务器的安全备份机制,其目的是为了防止服务器突然死机,因此在服务器之间采用专用的端口和线路,简短的信息通过周期性的传递,因此形象的比喻成心跳。一旦对方的心跳信息接收不到,服务器就可以接管对方的业务,避免业务进行停滞。服务器发送的心跳信息可以很频密,从而使业务进行的畅通无阻。
这种机制被手机上的互联网应用所借用,无论是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消息的推送,又节省终端的电力,又避免对移动网络的冲击,两全其美,何乐不为呢?
这样釜底抽薪后,心跳机制对移动网络的冲击将是可以控制的了。