写点什么

王者荣耀的推送是如何做的?腾讯信鸽精准推送系统解析

  • 2017-07-25
  • 本文字数:3066 字

    阅读完需:约 10 分钟

推送对于 App 的运营来说十分重要,精细化的运营需要对用户进行分类并精准推送,目前,国内公司在这方面已经取得了一些不错的进展。

7 月 7 日,腾讯 TEG 数据平台部高级工程师甘恒通在 ArchSummit 全球架构师大会深圳站上分享了《腾讯信鸽实时精准推送系统的演进与实践》,系统的介绍了实时精准推送系统的技术细节。值得一提的是,时下最热门的手游《王者荣耀》使用的推送服务就是信鸽。我们采访了甘恒通,来进一步了解该系统是如何做到实时精准推送的。

受访嘉宾:

甘恒通,11 年加入腾讯 TEG 数据平台部,主要负责大数据平台、推送平台后台的研发和优化工作,对构造高可用、高性能的分布式大数据处理和推送系统有丰富的实战经验,近期工作内容是构建信鸽精准推送系统,包括智能分群、实时推送、实时推送效果跟踪,解决公司内外部对推送质量需求。

InfoQ:信鸽推送系统相比其他第三方推送服务有哪些优势?

甘恒通

a) 信鸽是免费的推送工具,服务的理念是以用户为中心提供专业的推送服务。从应用接入、测试、上线都提供了实时专业的技术支持服务。SDK 一键集成,极大地提升了接入的效率,测试环境和现网环境隔离,提升测试阶段定位问题的效率。秒级更新的多维推送效果统计数据让应用开发者实时掌握推送运营效果。

b) 共享终端 service,联合保活:腾讯公司内部互娱的很多游戏是我们的服务的客户,包括王者荣耀等过亿级的应用,腾讯以外也有上万的 APP 用户。安卓上进行消息推送,终端有很多限制,APP 不一定活跃,所以消息抵达率通常比较低,采用共享 service,只要有一个 APP 活跃,信鸽的连接就是活的,其他 APP 也能借用这个连接把消息及时送达。

c) 依托腾讯内部完善的基础设施,包括丰富的用户画像、实时行为数据,和成熟的运营体系,对构建稳定、高性能的分布式精准推送服务更有保障。服务器国内、国外多地部署,终端设备实现了就近接入,保证了可靠稳定的长连接,信鸽后台系统实现了虚拟化,开发、测试、运维一体化保证了敏捷的开发流程,扩缩容也变得简单。

d) 注重用户隐私,保证数据安全:信鸽以可配置的方式给应用提供了数据采集的能力,数据安全做到传输加密,防止推送消息被篡改和伪造,多副本存储,保证万无一失,应用上用户创造出来的数据跟腾讯自有的业务数据在物理分隔,不会相互污染,最后信鸽对接了公司内的“宙斯”、“门神”等防御系统,以平台的实力抵御恶意的请求。


腾讯信鸽推送系统解决方案

InfoQ:信鸽后台系统有哪些挑战,如何服务好王者荣耀这些大型的 app?

甘恒通:对于后台的挑战,主要有这三个关键词:海量、精准和实时。海量是指,信鸽终端并发长连接是几千万的量级,日推送量也有几十亿的量级,这里面主要是因为信鸽对接了公司内部互娱的游戏,像王者荣耀、天天酷跑这些 TOP 的应用,每天的活跃用户也是几千万量级。对于其它的一些应用来说,也有各自的推送的诉求。比如说对于一些新闻类的应用,时效性要求非常高,需要每秒千万级的推送速度,另外一些应用则需要在达到运营目标的前提下,希望尽量减少对用户的骚扰,即精准推送。

对海量的并发长连接,一方面,需要提高设备资源的利用率,可以通过一些 docker 虚拟化的方式来解决;另一方面,我们要深入挖掘单机的性能,从硬件、操作系统、协议栈、架构四个方面进行深入分析和优化。硬件主要是善于利用 Intel AVX,SSE4.2 的指令集,例如它里面包含 CRC32 等方法,比一般的实现方法有数倍的性能提升。操作系统方面需要根据实际的物理内存大小调整相关的文件句柄数和内存分配数。协议栈方面考虑使用用户态的协议栈替换系统自带协议栈,消除频繁的系统调用和内存拷贝带来的额外处理开销。最后是选择一个好的 server 框架,使用无锁的共享内存进行进程间消息通讯,业务处理进程采用基于 epoll 的协程模型,既能降低开发业务逻辑的难度,又能避免采用多线程模型带来的系统上下文切换带来的性能损失。

精准推送的核心是根据应用运营的目标将消息推送给匹配的目标人群,应用的运营的目标一般有提升用户活跃度,潜在流失用户挽回,提升应用收入等,不同人群的挖掘方法可能不尽相同,但流程基本一致,一般会分为数据的准备、模型的构建、预测结果、输出。其中数据的准备是最重要的部分,包括数据预处理,特征选择,降维等,在海量数据的基础上,选用常见的机器学习中的统计学习的方法如 C4.5 决策树模型,贝叶斯模型等便可得到召回率较高的预测结果,能满足我们的大多数应用的场景需求。

对海量设备进行实时推送主要的解决方案是针对推送的场景优化存储结构,同时将单个推送的 RPC 节点间调用转换成分布式的批量位图运算,优化 Android 终端长连接,接入集群分多地部署,做最近接入,和 APNs 的交互使用 HTTP/2 协议,对无效的 token 自动做数据清理。

对像王者荣耀这些大型的应用,我们建立了 VIP 通道,系统上做独立部署,对硬件资源进行隔离,平时保持良好的沟通,对节假日推送量的突涨提前做好扩容准备,做贴身服务,满足一些个性化推送的需求。

InfoQ:实时精准推送系统的使用了哪些关键技术?

甘恒通:实时精准推送系统的关键技术有优化存储——将文本数字化,位图压缩存储和分布式并行检索和运算。实时精准推送系统分两种不同的场景。

第一个场景是实时推送,第二个场景是要做实时的多维分析,这两套系统实现的核心是对我们的数据构建倒排索引,倒排索引在业界用得比较多的是在搜索引擎里面文档的全文检索,对于信鸽,倒排索引是根据我们实现的应用场景进行构建。比如说,对于一些画像的信息,男性用户,可以做一个倒排索引,保存成 bitmap 的数据格式;信鸽里面一个应用具体的设备标识,做一个文本转换数字的操作后,经过倒排索引之后,保存成 bitmap 的数据格式。对于实时推送部分,要求数据秒级更新,我们用了 storm 进行倒排索引,数据经过转换之后,存储占用很小,这样我们把它放在内存里面,可以进行实时的更新和检索。

对于另外一个场景是,我们需要对历史数据、原始数据进行实时的多维分析,比如需要分析最近几天之内大盘所有用户的点击情况。这里面可能涉及的数据量就会非常大,需要采用离线的方式进行索引的构建。多维分析的索引和实时推送的索引是不一样的,它主要实现的方式是对所有的数据进行规范化的处理,每个字段的格式基本上保持一致。对于每一条记录会根据预置的规则进行数据的抽取,需要构建倒排索引的属性字段会进行规格化和映射的转换,数据记录根据设备标识进行分区,每个分区内的记录进行独立的编号,倒排索引即为属性字段对应的记录的编号,离线处理的最后是落地成统一的索引文件,保存在 HDFS 中。当一个分析的需求过来的时候,会有一些 pull 节点,把这些索引的数据拉到本地并加载到内存,经过查询规则解析后执行相关索引文件的检索、分组和聚合函数的运算,最后由一些汇总节点将结果进行合并后返回给查询者。

InfoQ:信鸽系统未来的发展规划是什么?

甘恒通:我们的现在平台上主要的产品除了腾讯移动推送(信鸽)之外,还有腾讯移动分析 MTA,未来我们的目标是建设整个 APP 开发者平台,整体发展方向大致会分为三块:

一块是我们基础建设,包括基础集群的质量、数据的准确性、系统的稳定性和安全性、推送速度时效性等。

一部分是为开发者提供更多的服务,例如为开发者提供 Crash 分析、推送的通道、系统的监控、热更新、安全加固这样一系列的工具类产品。

第三部分是为产品运营者服务,提供精细化运营的能力,帮运营者做用户画像,做精准推送,提供 LBS 的分析,提供按地址位置的特色推送触达,帮他实现可视化的埋点,帮他可以提升运营效率。

以上是我们的大致方向,为开发者提供一揽子的工具化平台服务。

2017-07-25 22:515658

评论

发布
暂无评论
发现更多内容
王者荣耀的推送是如何做的?腾讯信鸽精准推送系统解析_移动_Amos_InfoQ精选文章