写点什么

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

  • 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:515769

评论

发布
暂无评论
发现更多内容

金九银十给我疯狂内卷!GitHub再现星标86K面试手册,37K!妥妥的

Java~~~

Java 架构 面试 算法 JVM

膜拜!阿里内部都在强力进阶学习springboot实战派文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

超实用?HUAWEI高工总结出15W字的图解计算机操作系统指南手册

Java~~~

Java 架构 面试 TCP 网络

终于有人把操作系统,CPU,基础知识,网络一次讲清楚了,绝绝子

Java~~~

Java 架构 面试 TCP 网络

今天我们来谈谈Golang的同步等待组

Regan Yue

Go 语言 8月日更 同步等待组

常用正则表达式最强汇总(含Python代码举例讲解+爬虫实战)

Python研究者

8月日更

面试侃集合之SynchronousQueue非公平模式篇

码农参上

非公平锁 SynchronousQueue 8月日更

云小课|想实现资源全自动备份?看完这篇秘籍,不再蕉绿~

华为云开发者联盟

云备份 自动备份 备份策略

【墨天轮专访第二期】巨杉数据库萧少聪:重视企业长期需求,打造中国的世界级产品

墨天轮

数据库 人物访谈 国产数据库 巨杉数据库

阿里内部推出Spring响应式微服务Boot2Cloud文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

保姆级教程,小白也能2周搞定3个月的Web开发任务!

博文视点Broadview

apipost使用脚本发送一个接口请求

与风逐梦

后端 开发工具 接口测试

Go- map的定义

HelloBug

Go 语言 map的定义

Spark必读!总有一些Spark知识点你需要知道

Qunar技术沙龙

spark hdfs mapreduce Web UI 数据倾斜

惊!阿里大佬珍之若宝的最强高并发pdf,竟然被上传GitHub开源

Java 编程 架构 面试 程序人生

这一次!我在百度告诉你,当你请求百度时都发生了什么...

程序员 架构 面试 计算机

常见内存泄漏引起原因

金陵老街

eKuiper 联手 OpenYurt,解决物联网场景下边缘流数据处理难题

EMQ映云科技

云计算 阿里云 物联网 IoT #Kubernetes#

字节再次出圈!GitHub上爆火一星期的算法刷题手册竟出自这人之手

Java~~~

Java 架构 面试 算法 数据结构与算法

基于 Formily 的表单设计器实现原理分析 ​

全象云低代码

JavaScript 低代码开发 表单设计

深层剖析鸿蒙轻内核M核的动态内存如何支持多段非连续性内存

华为云开发者联盟

鸿蒙 内存 结构体 OpenHarmony 动态内容

Shopee物流业务核心数据库架构演变——权衡取舍的艺术

Shopee技术团队

架构 #数据库 #物流 #供应链 #Shopee

Go- map的使用

HelloBug

Go 语言 map的使用

阿里P8大牛终于整理完了564页大话java性能优化神仙文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

疫情小区离你有多远,百度地图告诉你

百度开发者中心

最佳实践 百度地图

带你读AI论文丨LaneNet基于实体分割的端到端车道线检测

华为云开发者联盟

端到端 网络模型 车道线 实体分割 LanNet

阿里P8大牛耗费三年整理的:Java架构之完美设计实战PDF

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

堡垒机和防火墙的三大区别分析-行云管家

行云管家

网络安全 防火墙 信息安全 数据安全 堡垒机

比POSTMAN更好用!在国产接口调试工具APIPOST中使用Mock

Proud lion

大前端 后端 Postman 开发工具 接口文档

新生代农民工的十八般武艺,你都了解吗

华为云开发者联盟

DevOps 云原生 编程语言 编程规范 新生代农民工

Alibaba新产!Spring+SpringBoot+SpringCloud全家桶进阶小册

Java~~~

Java spring 架构 面试 Spring Cloud

王者荣耀的推送是如何做的?腾讯信鸽精准推送系统解析_移动_Amos_InfoQ精选文章