千万级并发手机推送系统建设
一、背景
手机推送系统本质上讲就是“通知”+“消息”。好的推送系统不仅仅是通知提醒,更是需要突出消息属性,能够集中展示和管理,可以预览、订购、退订,其核心意义是使消息的价值最大化。目前常见的手机推送系统,包括苹果的APNS、Google的C2DM、Microsoft的Direct Push和RIM的Push Mail。这些手机推送系统基本都偏重基础能力,应用在集成使用时存在诸多痛点。
二、手机推送系统的特性
一个成熟的手机推送系统,它至少需要具备以下的素质:
1、 它比短信的内容要丰富,成本更低,可以实现端到端的无缝连接
2、 效率更高,可以对用户进行分类推送,实现精准投放
3、 具有可管理性,防止成为垃圾信息
4、 支持大规模高并发(千万级),亿级用户规模,至少 99.9 可用性
5、 网络不稳定环境下的生存力、低耗电、低流量下的客户侧控制
总之,成熟的手机推送系统不仅仅是一个推送通道的概念,而是可以满足一个完整生态价值链的多重需求。
三、手机推送系统建设终端侧策略
作为集成到手机客户端的SDK, 需要达到4S的标准。Slim:苗条、小样;Save power:省电;Save traffic:省量;Stable:稳定。
-Slim
这个相对容易,消除无用或者重复的代码,控制图片等资源的使用
-Save power
手机电源的续航能力比较差,所以要从各个细节去抠。首先,不要使用过多线程,可以采用类似ActiveObject 的方法用单线程模拟多任务处理。其次,尽量少使用多个连接(采用连接复用、主从模式)。再次,减少不必要的计算(通过 profiler 等工具来看哪些最好资源等),要摒除编写一般 Java 程序的习惯。最后,要防止 CPU 在需要的时候休眠(使用 PM WakeLock 和 AlarmManager)。
-Save traffic
第一、在协议选择 上,使用私有协议,可以定制、节省流量。第二、心跳频率的控制,以实际设备网络、CPU 休眠时间作为主要依据;第三、对数据进行压缩,数据尽量Bundle传输,断点续传。第三、有 WiFi 就优先使用 Wifi,节省移动数据流量。
-Stable
独立的进程, 尽量不影响第三方应用本身,采用Android Bind/AIDL 机制,利用系统原生机制提高稳定性。
四、手机推送系统建设云端策略
作为能够支撑上亿用户,千万级别在线用户的大型复杂系统,其设计上需要保证以下几个基本要求。
-大并发长下的技术要点
首先,尽量减少应用内存的footprint,高效使用内存(pre-alloc mem pool, thread-local-mem pool)。其次, 选择合适 OS 和 语言组合,如果是 Java, NIO 是必须的;如果是 Java, JVM 的调优也是关键 (Heap size, GC etc)。最后,注意一些已知的问题(譬如 JDK 7 之前的 Select Spin)并适当进行内核调优(特别是网络参数方面) 。
-异步系统的痛并快乐
第一、要增加系统的吞吐量,系统内部需要异步调用。第二、异步会使复杂度增加,但是在很多时候是值得的。第三、需要内部有统一的通讯框架(支持同步、异步、回调;广播、随机、轮询等机制) 。
-去状态化,全 cluster
状态化会导致资源的 affinity, 在 scalability 方面有较大影响。易于水平扩展。状态转移到公用设置上(如分布缓存或者 DB 中,但是必须考虑故障时的转移效率和成本)。 各个组件均 cluster 化,随时扩展容量,系统自调整能力强。
五、千万级别手机推送系统实例
正是基于打造手机推送完整价值生态链的需要,个信互动推出了“个推”消息推送平台的服务。这家技术服务提供商的解决方案,具有高安全性、高可靠性、低成本、易于集成、实时到达,省电省流量等多项优秀的特性。目前,这套技术解决方案已经被新浪微博采用,实现了微博私信/@/评论/新粉丝的实时提醒功能。
据了解,该技术服务提供商还为百度、网龙、分众Q卡、航班管家、去哪儿、51信用卡管家、淘粉吧等众多知名企业和应用提供手机信息推送服务。该平台目前覆盖近一亿用户,日发送消息超过10亿条,平均每分钟投递近10万条消息。
应用开发者想要快速获得手机消息的推送能力,可以考虑集成这家技术服务提供厂商的SDK。个推地址:http://www.igetui.com