关于架构设计:7天DAU超亿级羊了个羊技术架构升级实战

36次阅读

共计 4236 个字符,预计需要花费 11 分钟才能阅读完成。

导语 | 在短短的 7 天内,羊了个羊小游戏的 DAU 冲破了 1 亿。然而,其最后技术架构仅撑持 5000QPS 并发,无论技术、人力、资源以及服务都难以应答。用户涌入、数据飙升,给原有的技术架构、运维体系、以及平安防备等技术体系都带来了微小的挑战。如何通过架构优化,让一款小程序游戏能够在短时间内实现对上亿 DAU 的反对?本文将从技术角度解读这背地的技术实际历程,心愿为正在从事小游戏开发的技术同行带来一些参考。

背景

谁也没有想到,去年 9 月,一款卡通背景打消闯关游戏《羊了个羊》全网迅速刷屏。凡是一个拿着手机左顾右盼的人,九成概率都在忙着通关,还有少量的人,因为不能通关而通宵达旦,夜不能寐。

后盾数据显示,在短短的 7 天内,这款小游戏的 DAU 就冲破了 1 亿。要晓得,除了王者光荣、原神等比比皆是的景象级手游之外,1 亿 DAU 是这个行业的喜马拉雅山,可是,它却被一个看上去设计毛糙的小程序游戏轻松实现了。

用户涌入、数据飙升,实际上给原有的技术架构、运维体系、以及平安防备等技术体系都带来了微小的挑战,这个守业团队一共只有几个人,最后的技术架构仅撑持 5000QPS 并发,因而,无论技术、人力、资源以及服务都越来越难以应答。

如何通过架构优化,让一款小程序游戏能够在短时间内实现对上亿 DAU 的反对?本文将从技术角度解读这背地的技术实际历程,心愿为正在从事小游戏开发的技术同行一些参考。

架构全面降级

一款小游戏能不能胜利,不仅和自身的通关设计有着微小的关系,而且还和上量之后,零碎是否继续稳固也密切相关。《羊了个羊》这款小游戏在爆火之后的前几天,已经在技术架构面临严峻考验,这对一款正在用户量疾速爬坡的小游戏来说,能够说是致命的挑战,如果不能疾速解决,将会大幅升高玩家的游戏体验,从而疾速被用户摈弃。

《羊了个羊》在最开始也遇到了这样的问题,就是一瞬间,涌入海量用户,速度之快,人数之多,超过了所有人的预期。就像一条双向两车道,车流量不大的状况下,还能失常行驶,可一旦来了成千上万辆车,交通的效率必定大打折扣,甚至堵死。

当初回过头看,最开始的技术架构因为技术以及工夫等因素,在设计上有些简略,如下图 1 所示,玩家流量通过一个 LB 进入,传输给几个 POD 进行游戏逻辑解决,再将数据进行存储,其中,热数据存储在 Redis 中, 长久化数据存在 MongoDB。

因为设计时,对如此大流量不足充分考虑,实际上也没有料想到会有这么大的流量,而且 单点服务的性能瓶颈,再加上代码未进行充沛优化,造成过后的零碎最高只能接受 5000 的 QPS,但理论流量增长很快,并且继续升高并达到性能瓶颈,游戏服务开始瘫痪,全副玩家无奈再进行游戏。

《羊了个羊》最开始技术架构

面对服务中断,《羊了个羊》和腾讯云服务团队在详细分析原来架构的有余之后,决定从三个方面,针对原有架构做重点优化:在计算扩容层,依附腾讯云云原生产品为原有技术架构降级,实现服务高可用;为疾速补齐运维能力,通过业务日志诊断程序性能,配合业务调优以缩小服务器压力;最初在平安防备畛域,通过平安计划抵制异样流量攻打。

《羊了个羊》最新技术架构

具体措施上,首先通过引入腾讯云 TKE Serverless 的弹性机制,实现游戏服主动纵向和横向扩大,实现服务解藕,减少容错和熔断机制;

其次,通过腾讯云开箱即用的日志服务 CLS,对游戏接口稳定性 / 异样调用趋势进行监控,帮忙用户疾速观测产品质量,并第一工夫获取到异样 panic 统计分析和告警。

同时,还要针对许多歹意 BOT 流量大量涌入到游戏中,导致游戏服务器 QPS、带宽疾速升高,影响服务可用性等状况,引入 WAF+ 高防包,抵挡内部异样流量攻打。

在此之外,单方产研团队还通过启用 CDN 做游戏动动态资源拆散,让玩家应用的游戏资源实现就近下载,加重网络端压力;设计多 LB 入口实现入口高可用和限流,防止零碎被超额流量过载;把 MongoDB 转换为读写拆散模式,配合代码逻辑优化实现性能晋升,引入分库实现业务分层与隔离,Redis 缓存热数据,分担数据库查问压力等。

通过上述一系列技术升级,新架构禁受住了一波又一波的流量峰值考验,甚至在高峰期 DAU 过亿后,游戏技术零碎仍旧体现稳固,这对于一个公布才几个月的小游戏来说,在国内也很难再找到这样的例子。

技术实战:扩容、运维、平安

上面咱们将从 扩容、运维、以及平安三大外围环节 动手,具体介绍在具体实操过程中,单方是 如何应答流量的暴发挑战 的。

3.1 一崩再崩,主动扩容为何不灵?**

在开展之前,先说下这次起到至关重要的一款产品 —-TKE Serverless,它是基于腾讯云 TKE 容器服务孵化进去的一种全新的无需治理服务器状态的 Kubernetes 容器服务平台,最外围的利器是领有一个全新的集群节点管理模式,称之为超级节点。

上云的开发者都晓得虚拟机,超级节点就相似于一台超大规格的 CVM 虚拟机,它是基于 Serverless 容器技术,模仿 Serverful 有节点治理体验的新形态容器集群节点。如果用户须要进行固定资源的扩缩容,仅须要对这台“超大规格的 CVM”进行升降配,简略点击几个鼠标,就能够配置实现,资源管理变得极为简略。

实际上,《羊了个羊》在 6 月上线初期就采纳了 TKE Serverless 的云原生形式部署游戏零碎,心愿借助产品的免运维及疾速扩缩容能力,撑持将来玩家的规模增长,但在 9 月上旬,《羊了个羊》忽然一夜爆火,玩家规模急剧回升,游戏零碎开始呈现不稳固的状况。

通过梳理发现,因为初始配置的容器规格比拟低,正本数也绝对较少,当初始玩家规模一直上涨时,《羊了个羊》团队依据 TKE 控制台的监控 / 告警能力,发现容器的 CPU/ 内存等各项指标都达到了最大值,运维同学过后随即做出调整,游戏服务的各项指标稳固了下来。

但随着玩家规模持续上涨达到千万级别时,游戏又开始呈现了偶发的不稳固问题,体现为内存指标疾速减少直到打满整个容器,且流量还在一直增长中。腾讯云团队紧急联结《羊了个羊》产研团队剖析利用的瓶颈,疾速解决了如服务内存泄露、服务分级缓存策略、云产品配额限度等多个问题,这才让游戏服务逐步稳固了下来。

因为《羊了个羊》技术团队配置了基于 CPU 指标的容器 HPA 动静扩缩容策略,在游戏日活继续陡增的状况下,零碎可能在秒级主动扩容了近万核容器资源。在此期间,也无需投入人力运维 Kubernetes 集群以及放心资源有余等问题,从而能够把精力都投入到游戏玩法优化上来。在随后的两周工夫,只管玩家规模增长到几百倍以上,最终达到了上亿的日活,这套服务仍旧保持稳定。

3.2 运维能力有余,如何疾速补齐?

通过技术架构的迭代以及一直激增的用户,《羊了个羊》技术团队也意识到,因为爆火太快,更须要疾速补齐运维能力,能力更好的继续调整和晋升游戏体验。

为此,《羊了个羊》抉择了开箱即用的日志服务 CLS,CLS 对游戏接口稳定性、异样调用趋势的监控可帮忙他们疾速观测产品质量,并第一工夫获取到异样 panic 统计分析和告警;在游戏经营方面,玩家登录链路耗时 / 对局工夫等数据亦可通过 CLS 剖析、校验及解决,进而调整和晋升游戏体验;同时还能满足游戏用户行为及审计对账等需要。

TKE Serverless 在提供短缺的计算资源后,能够应用 CLS 的云原生个性实现稳定性和程序调优。用户研发人员仅需在容器控制台点击新建日志采集按钮即可实现数据接入,无需在运维上投入人力。

借助云原生的能力和 CLS 的 SQL 剖析、仪表盘、监控告警能力,剖析出程序可优化点, 解决游戏开发商在初期和暴发期对游戏稳定性和经营数据分析的难题。

除了运维数据外,用户还将局部经营数据接入 CLS。在游戏调整玩法、剖析流动数据时,经营人员可借助 CLS 疾速观测数据变动,并作出应答策略。游戏开发商在将 CLS 用作简略运维工具查日志、做接口调用告警外的同时,还将游戏的通关数据、用户行为剖析、审计对账等经营数据在 CLS 中存储剖析。

3.3 歹意 BOT 抢刷排行,如何放弃游戏偏心?

哪里有流量,哪里就有黑产。

因为设计之初没有充分考虑平安问题,因而引来大量不法分子通过歹意 BOT 抢刷游戏排行,简直每分每秒,都有歹意流量拜访游戏接口,并且这一部分歹意群体通过互联网、QQ 群和微信群中流传歹意刷排行的脚本,极大的毁坏了游戏公平性,让本该属于游戏反抗的乐趣被歹意 BOT 抹杀。

而且更重要的是随着羊了个羊热度的岂但攀升,许多歹意 BOT 流量的大量涌入,导致游戏服务器 QPS、带宽疾速升高,一度影响服务可用性。通过单方产研团队单干,决定疾速接入腾讯云 WAF 进行防护,一开始接入 WAF 的时候,相干 QPS 峰值已达 21W,接入 WAF 之前 CPU 始终处于临界值水位、网络链接打满的导致服务不可用的状况。

通过抉择负载平衡型 WAF 即可在不改变网络架构的状况下 3 秒实现业务接入,实现在用户无感的状况下对歹意流量进行荡涤及防护。为了无效打击攻击者的歹意流量,WAF 中 BOT 行为治理也提供了全链路、全生命周期的的歹意行为流量体系,实现疾速高效的歹意流量治理。

小游戏设计的“三高”准则

通过腾讯云这次残缺反对《羊了个羊》团队在小游戏架构扩容、零碎运维以及平安防备畛域的实战经验,咱们也失去了一些启发,心愿给同行一些参考。比方面对突发流量,小游戏零碎在设计的过程中须要思考以下能力:第一是 高性能 ,可能承载刹时暴发流量,保障响应时长在可承受的范畴;其次是 高可用 ,零碎继续提供服务,小概率产生宕机时,过载爱护将故障管制在可接受范畴内,不影响外围业务;最初是 高扩大,服务零碎应该具备程度和垂直扩大能力,在老本和可用性中实现最佳平衡点。

咱们也看到,目前在国内甚至国内上,小游戏发行商还是以中小型游戏公司为主,公司大都处于晚期守业或融资阶段,对云产品不相熟、技术能力参差不齐,在算力资源、技术架构、业务逻辑、运维教训方面不足成熟的教训,这些都是小游戏公司晚期十分典型的窘境。通过腾讯云和《羊了个羊》产研团队的这次密切合作,不仅让腾讯云在服务相似客户上积攒了贵重的教训,也为将来的倒退指明了清晰的指标,就是 针对不同赛道搭建标准化架构,为游戏公司的业务保驾护航

扫码下图一键领红包封面

如被支付完 请关注开发者公众号

在公众号后盾回复【2023】持续支付

你可能感兴趣的腾讯工程师作品

| 你的 2022 年度开发者关键词,请查收 >>

| React 语境下前端 DDD 的长年摸索教训

| 国民级利用:微信是如何避免解体的?

| 从 Linux 零拷贝深刻理解 Linux-I/O

技术盲盒:前端 | 后端 |AI 与算法| 运维 | 工程师文化

正文完
 0