【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

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

评论

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

远程办公提高效率的工具:在线协作文档

Baklib

效率 效率工具 协作文档

细说js变量、作用域和垃圾回收

hellocoder2029

JavaScript

千锋小狮视觉“未来设计师就业实战训练营”圆满收官,2周年庆即将开启!

千锋IT教育

TypeScript介绍和使用

默默的成长

typescript 前端 10月月更

odejs+Redis实现简易消息队列

coder2028

node.js

模块二作业

知足🐏

研发流程管理中,如何实现项目管理与代码信息的协同?

LigaAI

研发管理 解决方案 #GitLab LigaAI 企业号十月PK榜

Java 19中新推出的虚拟线程到底是怎么回事儿?

Hollis

Java

java的可变参数

TimeFriends

AIGC时代到来?聊聊其中最出圈的语言模型GPT-3

Baihai IDP

AI NLP 大模型 AIGC GPT-3

APICloud AVM 框架 纵向滚动通知栏组件

YonBuilder低代码开发平台

BizWorks助力企业应用的高效开发与复用

阿里云E2企业云服务

阿里云 开发者 云原生 低代码

从0到1实现一套CICD流程之CD

okokabcd

后端

Vue 2x 中使用 render 和 jsx 的最佳实践 (3)

默默的成长

前端 Vue 3 10月月更

推荐有礼 | 京东云推荐返利活动说明

京东科技开发者

京东云 云推客 代理商 分销 渠道

彻底搞懂JS原型与原型链

hellocoder2029

JavaScript

代码静态测试 | MISRA是什么?如何使用它来改进嵌入式编码?

龙智—DevSecOps解决方案

c 嵌入式设计 嵌入式开发

细说Js中的this

hellocoder2029

JavaScript

SAP | abap基本语法规则

暮春零贰

SAP abap 10月月更

满足客户需求,提高客户体验:在线产品手册

Baklib

产品 推广 客户 客户体验 在线产品手册

Nodejs中的进程间通信

coder2028

node.js

GameFi链游系统开发(NFT链游)

薇電13242772558

NFT

制造业转型加速密钥——低代码开发平台

力软低代码开发平台

浅谈理想中的业务开发模式

久歌

架构 开发 技术架构 服务编排

华为王泽锋:协作创新、开源的魅力所在

科技热闻

前端页面之“回流重绘”

CoderBin

CSS html 面试 前端 10月月更

企业团队知识如何管理?来试试这个办法!

Baklib

效率 效率工具 知识管理 团队

设计模式之桥接模式

游坦之

设计模式 java 编程 10月月更

ITSM | Forrester发布报告,7大重要见解总结IT运营状况

龙智—DevSecOps解决方案

IT运维

一文读懂NodeJs知识体系和原理浅析

coder2028

node.js

Nodejs相关ORM框架分析

coder2028

node.js

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