本文首发于微信公众号 “Shopee 技术团队”。
背景
Shopee 每年都会举办几场重要的大促活动。大促过程中,营销小游戏是吸引流量的主要渠道。
本文将介绍大促中最常使用,同时在线人数最多的游戏——Shopee Shake——如何应对大促的大流量冲击,保证系统的可用性,为用户提供稳定可靠的服务。
1. 游戏与大促
每年 Shopee 会在五至十二月的每个大促节点举行电视直播活动。每次大促活动时,各市场的运营人员会与当地电视台合作,在节目直播过程中插入一段玩 Shopee 小游戏的互动环节。
1.1 大促游戏的选择
在大促筹备阶段,当地运营人员会根据大促时间表,在游戏管理平台设置游戏活动的开始时间、结束时间、奖池及页面素材。待大促进行时,电视台主持人将引导用户打开 Shopee APP 并进入小游戏页面。
当地运营人员会根据大促计划,从多款小游戏中选择几款参与到电视直播大促当中,而 Shopee Shake 是被使用次数最多的大促小游戏,几乎每次大促活动都会出现它的身影。通过这款游戏,当地运营人员可以发放 Shopee 金币,吸引用户在 Shopee 下单购买商品。
每次大促时,Shopee Shake 都会带来大量用户流量。2021 年 5.5 大促时,该游戏接口最高 QPS 达到 30 万+,在大促过程中发挥了重要的引流作用。
1.2 Shopee Shake
Shopee Shake 是用户通过在游戏页面摇动手机,获得 Shopee 金币的类似摇一摇的小游戏。用户摇动次数越多,得到金币的概率越大。下图展示了三个不同阶段的游戏页面:
最左侧是游戏预热阶段的页面。游戏开始前,用户进入这个页面后,可以看到金币池的大小和游戏开始的倒计时,也可以将页面通过第三方或发送消息的方式分享给好友,获得额外金币奖励。
中间是游戏过程页面。游戏过程中,该页面会不停掉落金币。用户需要在有限的时间内摇动手机。摇动速度越快,得到金币的概率就越大。
最右边是游戏结果页面。用户在当局游戏获得的金币数量会显示在这一页面。另外,由于每一局游戏会消耗一次机会,剩余游戏机会在此页面也有直观呈现,若用户还有机会,可以直接点击按钮,继续进行游戏。有时,当地运营人员还会配置一些抽奖机会,如果用户抽中了某项奖品,同样会在这个页面显示。
2. 技术方案
从游戏机制来看,Shopee Shake 的后端系统面临以下几项挑战:
- 瞬时并发量大:由于游戏开始时间是全局统一,所有用户都会在同一时间进入游戏,导致在短时间内产生大量请求。因此,后端系统需要在短时间内承载大量请求。
- 游戏时间短:整场游戏环节一般持续 5 分钟,每局游戏通常在 10 秒到 30 秒之间。
- 并发扣减金币池:所有用户共享同一个游戏奖池,每一局游戏结束后都要并发扣减游戏奖池,后端系统容易因此出现单点问题,从而影响到系统性能。
因此,我们的技术方案需要支持高并发请求,支持水平扩容,并解决潜在的奖池单点问题。-
2.1 架构设计
从产品特点来看,Shopee Shake 系统主要提供两大功能,分别是供当地运营人员进行大促活动配置,以及供 Shopee 终端用户玩游戏获得金币。
相应地,系统也分成两端,即 Admin 管理端和用户端,分别面向当地运营人员和 Shopee 终端用户。
在大促前,当地运营人员会通过 Admin 端进行游戏相关配置。活动进行时,用户通过 Shopee 终端访问游戏页面,请求后端。其中