1.3重发策略分析
保障客户端的消息接收是本文的关键,难点在重发策略。消息重发策略包括服务端消息重发策略及客户端消息回执策略。为支持服务端消息重发功能,IM服务器需要维护一个消息重发队列,当IM服务器推送完成一条消息后,将该消息从待发队列中移到重发队列,IM服务器检测客户端的在线状态,如果在线,则立即发送,同时待成功收到客户端的回执时从重发队列删除相应的消息,如果不在线,则将消息存为离线消息,标识消息的发送时间和已发送次数。IM服务器采用集群方式,各个IM服务器需要共享同一个消息重发队列,本文借助Zookeeper实现消息队列的共享与同步。Zookeeper是通过选举产生leader和follower,其算法正确执行的前提是有一半以上机器正常工作,每台机器部署一个IM服务器及一个Zookeeper服务器,各IM服务器之间进行负载平衡,各Zookeeper之间进行数据同步,IM服务器优先从本地Zookeeper存取数据。各机器中只有一台机器作为主服务器,其余作为从属服务器,主服务器负责消息的重发。计时器控制消息重发,要求重发队列中的消息至少包含消息体、已重发次数、上一次发送时间等数据。当执行计时器任务遍历重发队列时,若某消息距上次发送时间超过阈值则重发此消息,并修改消息最后一次发送时间以及已发送次数,当某消息发送次数达到设定的上限时就将其存为离线消息,待用户登录以后再接收此消息。
2消息系统实现
本系统在完成设计后,笔者搭建了一套测试系统,该系统服务端采用4台2CPU/4G内存机器做IM服务器和3个Zookeeper集群,1台2CPU/8G内存的服务器作为数据存储的redis服务器。同时选取了目前市场比较主流的中国移动2GAndroid手机1台,中国联通的3GAndroid手机终端1台。在应用搭建完成后,分别在2G、3G网络下,通过服务端进行了100、1000、1000、10000条消息向客户端推送,一种情况是消息没有重发和回执策略,另一种情况采取5次的重发策略和消息回执策略,特别是2G(不稳定)的网络,通过提升重试次数,大大增加了消息的投达能力,消息到达率由80%多平均提升到96%左右,而在3G网络下,消息的到达率也平均有90%提升到98%左右。同时由于有了消息回执机制,服务端显示的消息到达条数和客户端实际收到的消息条数是一致的。而没有采用消息回执策略的,客户端实际收到的消息大概是95%左右,有5%的异常情况。进一步分析各种失败的消息情况,可以看到重试间隔时间越长,消息的失败率越高。从测试报告可以看出,系统的重试间隔时间在一定范围内,成功率比较高,随着时间越长,成功率显著下降。因此重试间隔也有一定的限制。
3结束语
随着从传统的互联网时代步入移动互联网时代,无论对于个人还是企业,对于即时通讯的需求一直有增无减,及时获取消息,对提升用户体验,保证通信质量,提高用户满意度,增强产品及企业的竞争力具有重要的意义。本文通过结合推送和轮询模式,探索出一种基于移动网络安全可靠的消息系统。它既能大大地提升服务能力和服务体验,还能有效地降低系统成本。