海量消息下王者荣耀在 TDMQ Pulsar 的实践

关于王者荣耀

《王者荣耀》是由腾讯游戏开发的一款运营在Android、IOS平台上的MOBA类手游,属于多人联机在线竞技类游戏,于2015年11月26日在Android、IOS平台上正式公测。上线以来受到广大手游玩家的热爱,目前该游戏在手游排行中处于TOP 1的位置。作为中国最火爆的手机游戏,“王者荣耀”,拥有亿级用户体量,千万级日活用户。

而如此庞大用户体量带来的,也是服务端的挑战。如在游戏中产生的海量消息和数据交互,好友上线通知、开始游戏、赠送金币以及核心之一的交易链路,服务端如何敏捷快速实现上述海量消息场景,并解耦业务组件,是系统架构设计的一个难题。

消息队列选型

在游戏的实际运行中,大量的业务场景下存在消息数据交互,业务量有明显的波峰波谷,需要有一款消息队列中间件来承载该业务流程,实现上下游业务组件的松耦合,同时还需要具备灵活的扩展性。TDMQ Pulsar 版进入了王者荣耀团队的技术选型视野。

TDMQ Pulsar 版由于其存算分离的架构,对于计算密集型的业务场景,仅需要添加计算层 Broker ,自动进行 Rebalance;对于海量消息堆积,存储不足时,添加新的 BK 节点即可。在容灾支撑方面,TDMQ Pulsar 版专业集群支持 3AZ 跨可用区部署,以确保发生可用区故障时,也能正常提供服务;同时还提供了跨地域冷备功能,支持快速切换接入点解析,实现无需客户端修改接入点地址,而实现跨地域的容灾方案,保障业务的延续性。在场景支撑方面,TDMQ Pulsar 版承载了腾讯计费、中国银行、FiT 等金融场景下的核心交易链路,同时也服务了火影忍者、蛙扑等游戏客户。从各方面来说,都非常匹配王者荣耀的需求。

TDMQ Pulsar 版产品介绍

腾讯云 TDMQ for Apache Pulsar 版(简称TDMQ Pulsar版)是基于 Apache Pulsar 自研的消息中间件,具备极好的云原生和 Serverless 特性,计算存储分离的架构使其在扩缩容方面具备良好的底层优势。

在完全兼容社区版的基础上,TDMQ Pulsar 版还提供了重试&死信队列、消息标签过滤、消息轨迹等高级特性。

目前 TDMQ Pulsar 版已经有较大规模的应用,如王者荣耀、猫眼、微民保险、QQ音乐、领星、长安汽车等,以及包括腾讯计费绝大部分场景,包括支付主路径、实时对账、实时监控、大数据实时分析等方面。

image.png

TDMQ Pulsar 在王者荣耀中的应用方式

弹性能力

得益于存算分离的架构,使得 TDMQ Pulsar 版高度契合云原生,具有极强的可扩展性,为王者荣耀业务量的变化提供快速扩容能力,同时具备的热升级能力,使得扩容时对业务完全透明。

image.png

发布订阅

王者荣耀的消息场景下,存在大量的收发比超过「1比2」的情况,即:一处生产多处消费。同时,下游的消费端需要根据「消息标识」来消费指定的消息。

TDMQ Pulsar 版支持多种订阅模式,同时支持 TAG 消息标签过滤,方便王者荣耀的业务端简化业务逻辑处理流程。具体实现如图所示,应用于如用户界面操作,开始游戏、赠送金币等功能。

283030f00776e775ad6e5173f5078133.png

实时交易

王者荣耀的实时交易场景中,存在抽奖、购买等用户行为。那么,业务侧需要在用户发起操作后,对用户账户进行扣费操作,并在扣费完成后开始发货。详细的业务流程图,如下所示:

cd19f6bef7fea5bb0da7f3382b9af857.png

由于涉及到货币交易,在该业务流程中,需要保证以下几点:

1.  扣费消息绝对不能丢失;

2.  业务环节较长,需要支持重试操作;

3.  需要支持延时消息,来延迟查询发货状态,减少服务端资源开销。

TDMQ Pulsar 版可以完美解决上述的需求。

● 首先,消息存储默认为 3 副本,并通过 Quorum 机制,高效保证多副本之间的一致性;

● 其次,通过重试队列和死信队列,支持业务客户端自定义消息投递的重试和死信队列,如重试多次后仍不能成功,则进入死信队列人工处理;

● 最后,支持定时/延时消息,服务端来延时推送消息到下游消费者,无需客户端额外逻辑处理,简化业务实现。

用户评价

TDMQ Plusar 版支持按 Tag 订阅消息,在不同消费者消费同一 Topic 时通过指定不同的 Tag减少了业务侧过滤消息的压力,提升了业务模块单机吞吐量减少了机器成本。TDMQ 支持按照命名空间维度配置消息生产、消费速率,方便业务进行全局的流量控制,避免引入分布式限流组件,减少了业务的复杂度。

随着业务使用量的增加,单集群生产/消费速率已突破40w/s,得益于 TDMQ 存算分离的架构,在扩容期间能够做到业务侧无感,同时生产消费耗时没有明显增长。配合便捷的监控告警配置,使得业务能够近乎实时的感知集群的生产消费状态异常,及时作出反应。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/675351.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【IDEA】-使用IDEA查看类之间的依赖关系

1、父子类的继承、实现关系 1.1、使用CTRL Alt U 选择 java class 依据光标实际指向的类位置 用实心箭头表示泛化关系 是一种继承的关系,指向父类 可以提前设置需要显示的类的属性、方法等信息 快捷键 Ctrl Alt S ,然后搜索 Diagrams 1.2、使用…

LeetCode刷题 | Day 1 最大子序列求和(Largest K Subsequence Sum)

LeetCode刷题 | Day 1 最大子序列求和(Largest K Subsequence Sum) 文章目录 LeetCode刷题 | Day 1 最大子序列求和(Largest K Subsequence Sum)前言一、题目概述二、解题方法2.1 贪心思路2.1.1 思路讲解2.1.2 伪代码 + 逐步输出示例2.1.3 Python代码如下2.1.4 C++代码如下…

【数据密集型系统设计】软件系统的可靠性、可伸缩性、可维护性

文章目录 一. 数据密集型程序的特点以及遇到的问题二. 可靠性 : 即使出现问题,也能继续正确工作1 硬件故障2. 软件错误3. 人为错误 二. 可伸缩性1. 描述负载与推特的例子2. 描述性能-延迟和响应时间3. 应对负载的方法 四. 可维护性1. 可操作性:人生苦短&…

Others - 网友都是些人才,哈哈哈哈

感谢万能的网友们! 原本枯燥的知识,在网友生动形象的表达下,也能简单易懂,哈哈哈哈

美创科技获评“2024年第一批浙江省专精特新中小企业”!

近日,由浙江省经济和信息化厅组织开展的“2024年第一批浙江省专精特新中小企业”名单公示结束。 美创科技通过严格筛选,凭借在数据安全领域的专业化能力以及创新实践成果,获评浙江省年度首批“专精特新”中小企业! “专精特新”是…

谷歌创新框架:从非结构化数据,实现多模态学习

看、听、说的多模态已成为主流大模型的重要功能之一。但在数据爆炸时代,大模型学习文本类的结构化数据相对还好一些,但要去学习视频、音频、图片等非结构化数据非常困难。 目前,从结构化和非结构化数据实现多模态学习,会随着模态…

openeuler欧拉系统连不上网,ping百度报错,ping: www.baidu.com: Name or service not known

一、现象 使用华为 openeuler 系统连不上网,ping 百度报如下错误 ↓ ping: www.baidu.com: Name or service not known二、原因 没有配置dns服务器 三、解决办法 进入网络配置文件存放文件夹 cd /etc/sysconfig/network-scripts/查看对应的网口文件 ls ps: 不同系…

python 贪心算法(Greedy Algo)

贪婪是一种算法范式,它逐步构建解决方案,始终选择提供最明显和直接收益的下一个部分。贪婪算法用于解决优化问题。 如果问题具有以下属性,则可以使用贪心法解决优化问题: 每一步,我们都可以做出当前看来最好的选择&…

教务管理系统带万字文档基于springboot+vue的校务管理系统java项目

文章目录 教务管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码和万字论文参考(9.9¥带走) 教务管理系统 一、项目演示 校务管理系统 二、项目介绍 基于springbootvue的前后端分离教…

强大的机器学习建模扩展包:mlxtend

公众号:尤而小屋编辑:Peter作者:Peter 大家好,我是Peter~ 今天给大家介绍一个强大的机器学习建模扩展包:mlxtend。 mlxtend(machine learning extensions,机器学习扩展)是一个用于日常数据分析、机器学习…

程序员应该有什么职业素养?

程序员的六大职业素养:构建成功职业生涯的基石 在不断变化的技术世界中,程序员不单要保持技术的锋利,也需要培养相应的职业素养,这些素养在很大程度上决定了一个程序员的职业生涯能否走得长远。以下是我认为最为重要的六大职业素…

2024上海国际金属去毛刺表面精加工技术展览会

2024上海国际金属去毛刺表面精加工技术展览会 2024 Shanghai International Metal Deburring Surface Finishing Technology Exhibition 时间:2024年12月18日--20日 地点:上海新国际博览中心 详询主办方陆先生 I38(前三位) …

gorm/gin框架实战

gorm/gin框架实战 项目简介 学习源视频:【最新Go Web开发教程】基于gin框架和gorm的web开发实战 (七米出品)_哔哩哔哩_bilibili 本博客为我的学习笔记。 项目目标:实现一个备忘录工具(当然不支持alert),仅仅是可以记录待办事项。 实现了…

Linux基础1-基本指令3

上篇文章我们说到了文件,pwd,touch,mkdir等知识。 Linux基础1-基本指令2(你真的了解文件吗?)-CSDN博客 本文继续梳理其他基础命令 1.本章重点 1.删除一个空目录命令rmdir 2.删除一个文件指令rm(重要!) 3.man命令&am…

Gradle下载慢的问题解决

把gradle地址前面的部分改一下就行,下载就快多了 改成这个地址: https://mirrors.aliyun.com/macports/distfiles/gradle/ 这个是gradle的阿里云镜像下载地址,在国内下载起来很快 如何改地址: 找到路径 项目/app/gradle/wrappe…

养老产业能否成为国家经济的新支柱?

养老产业,随着人口老龄化的加剧,逐渐成为国家经济的新支柱。在中国,老年人口的快速增长已经引起了社会的广泛关注,这也带动了对养老服务和健康医疗需求的持续增加。 政府也在积极应对这一挑战,出台了一系列政策来支持…

理解与应用排序算法(快速排序C实现)

目录 一、排序的定义 二、内排序方法 三、插入排序 3.1 直接插入排序 3.1 折半插入排序 3.1 链表插入排序 四、交换排序 五、起泡排序 六、快速排序 一、排序的定义 稳定排序和非稳定排序 设文件f(R1......Ri......Rj......Rn)中记录Ri、Rj(i≠j&#xff0…

TMS320F280049 ECAP模块--应用(2)

例1-上升沿触发 如下图所示,evt1-4设置为上升沿触发,在每个上升沿ctr值依次加载到cap1-4. 例2-上升下降沿触发 每个边沿都可选为事件,每次事件到来,依次把ctr加载到cap1-4。 例3-差异模式下上升沿触发 差异模式下每次事件到来时…

varchar 字段扩展问题

背景 近期接到一个产品需求,由于上游业务字段扩大了字段,下游的字段也得跟着调整扩大,这就涉及几十张大表,十几亿行数据的变更。 如果按照传统方式 onlie-ddl 借用第三方工具也得三四天分批跑,看了看MySQL官网&#…

ctfshow-web入门-爆破(web25)及php_mt_seed工具的安装与使用

爆个🔨,不爆了 hexdec() 函数用于将十六进制字符串转换为十进制数; 注意: 我最开始做这道题时看错了,误以为随机数的种子直接来自于 flag 的前八位,以为就是 ctfshow{ 这八个字符然后 md5 加密再截取&a…