浏览量:3370 发布时间:2020-09-01 11:41:52
首先,需要介绍本次活动的主要场景需求:
1、百万并发的在线聊天室
每个虚拟聊天室房间可容纳5人观看比赛,并支持实时互动,包括聊天、发送表情、动作等交互方式,此外聊天室还设有战队应援等模块。
2、房间匹配
观看直播的各位玩家可在比赛的某个时间节点,点击页面中的“宝箱”参与实时抽奖。
上述三个场景面临的压力各不相同:
首先,聊天室的场景中,因为涉及聊天信息的存储和分发,除了对消息推送的实时性考验外,最大的考验是对数据存储层的压力。对于百万量级的直播场景,比赛的关键时刻往往也是玩家最活跃、进行“刷屏”互动的时候,理论顶峰 100W 的QPS,对后端的存储压力无疑是巨大的。
接着,房间匹配场景。正如上文所介绍,进入页面后第一个逻辑就是查询当前用户的历史房间id,这个貌似没有很大压力,但是考虑到极端情况下,如果直播出现卡顿,大量用户同时刷新页面,将对系统稳定性带来巨大的考验。
最后,实时抽奖环节如何保障百万级用户在几乎同一时间完成“点击-开奖”的抽奖交互,同样是一项不小的挑战。
那么应对这聊天系统中的三大挑战,云开发如何一一攻克?
首先,应对聊天室场景的数据压力:一个字——「拆」!即将聊天信息的数据流,打散至50个环境中,并将系统分为主环境和聊天室环境,主环境用于承载房间匹配、用户房间查询、房间数据库环境映射关系查询等通用逻辑后台;而聊天室环境则负责虚拟房间内玩家的实时交互,包括文字消息、表情、动作等等。
解决完数据压力问题,聊天逻辑的实现就比较清晰了:同一个房间的人,根据 roomid 监听房间的聊天记录,当有人发送消息、写入聊天信息后,云开发的实时推送能力会自动推送消息给所有监听者,聊天室内的玩家就能看到聊天消息了。而表情和动作交互,底层也是将其转换成 json 对象来进行展现。
聊天记录的数据结构示例
接着,应对大量用户同时刷新页面的高并发风险的方法:一个关键词——「限频」。具体来说,虽然云开发自带的云函数有抗高并发的能力,但是因为查询历史房间 id 需要操作数据库,为了保障数据库层不被击垮,采用云函数的限频能力,就可以很好的解决这一问题。前端只要try catch一下,再通过优化 UI 交互,就可以完美应对极端情况的风险,还能很好的节约成本。
本次《英雄联盟》9周年盛典活动,云开发利用实时数据推送、弹性扩缩容等能力打造了百万在线级的实时聊天系统,攻克了数据存储压力大、高并发风险和实时性要求高等三大挑战,抗住百万流量洪峰,支持活动快速上线,缩减时间与人力成本。
* 本文转载自腾讯云云开发公众号
复制成功
Copyright © xmyeditor.com 2015-2024 河南九鲸网络科技有限公司
ICP备案号:豫ICP备16024496号-1 豫公网安备:41100202000215 经营许可证编号:豫B2-20200040