峰值21WQps亿级DAU,小游戏《羊了个羊》是怎么架构的?

Posted 40岁资深老架构师尼恩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了峰值21WQps亿级DAU,小游戏《羊了个羊》是怎么架构的?相关的知识,希望对你有一定的参考价值。

小游戏《羊了个羊》 短短的7天内,DAU突破了1亿、吞吐量峰值21WQps。

《羊了个羊》运营后台数据显示,在短短的7天内,这款小游戏的DAU就突破了1亿。

要知道,除了王者荣耀、原神等屈指可数的现象级手游之外,1亿DAU是这个行业的天花板,

可是,它却被一个看上去设计粗糙的小程序游戏轻松实现了。

然而,其最初技术架构仅支撑 5000QPS并发,7天内突破了1亿、吞吐量峰值21WQps

如何通过架构优化,让一款小程序游戏可以在短时间内实现对上亿DAU的支持?

技术架构、运维体系、以及安全防范等技术体系都存在巨大的挑战。

那么:峰值21WQps、亿级DAU,超高吞吐小游戏,是怎么架构的?

1 低吞吐、低可用的最初技术架构

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

因为技术以及时间等因素,在设计上有些简单,

如下图1所示,

玩家流量通过一个接入层 LB进入,

传输给服务层几个 POD 进行游戏逻辑处理,

再将数据进行存储,

其中,热数据存储在Redis中, 持久化数据存在MongoDB。

最初的服务层几个 POD ,都是单点服务

单点服务的性能瓶颈,再加上代码未进行充分优化,造成当时的系统最高只能承受5000的QPS

但实际流量增长很快, 并且持续升高并到达性能瓶颈,游戏服务开始瘫痪,全部玩家无法再进行游戏。

2 技术架构全面升级

大部分项目,都存在低吞吐、低可用的最初技术架构

但是,如果吞吐量一上来,就面临着优化

so,

面对服务中断, 《羊了个羊》团队在详细分析原来架构的不足之后,

《羊了个羊》 做了 技术架构全面升级

具体如下图:

接入层的架构优化:

  • 启用CDN做游戏动静态资源分离,让玩家使用的游戏资源实现就近下载,减轻网络端压力;
  • 设计多LB入口实现入口高可用和限流,避免系统被超额流量过载;

服务层的架构优化:

  • 优化服务层的自动扩容,应对巨量的 突发流量
  • 具体措施上,首先通过引入腾讯云TKE Serverless 的弹性机制,实现游戏服自动纵向和横向扩展,
  • 实现服务解藕,增加容错和熔断机制;

Cache层的架构优化:

  • Redis缓存热数据,分担数据库查询压力等。

存储层的架构优化:

  • 把MongoDB转换为读写分离模式,配合代码逻辑优化实现性能提升,
  • 引入分库实现业务分层与隔离,

优化之后,《羊了个羊》最新技术架构

经过上述一系列技术升级, 新架构经受住了一波又一波的流量峰值考验,

在高峰期DAU过亿后,游戏技术系统依旧表现稳定,

这对于一个发布才几个月的小游戏来说,在国内也很难再找到这样的例子。

3 运维体系的升级

通过技术架构的迭代以及不断激增的用户,《羊了个羊》技术团队也认识到,因为爆火太快,更需要快速补齐运维能力,才能更好的持续调整和提升游戏体验。

在运维体系这块,包括 业务日志、性能监测等。

为快速补齐运维能力,通过业务日志诊断程序性能,配合业务调优以减少服务器压力;

《羊了个羊》选择了开箱即用的日志服务 云服务度 CLS,

当然,有条件的团队,使用自建的 elk平台,或者基于clickhouse的高并发分布式日志监测平台,也是可以的。

CLS 对游戏接口稳定性、异常调用趋势的监控可帮助他们快速观测产品质量 ,并第一时间获取到异常panic统计分析和告警 ;

在游戏运营方面,玩家登录链路耗时/对局时间等数据亦可通过 CLS 分析、校验及处理,进而调整和提升游戏体验;同时还能满足游戏用户行为及审计对账等需求。

CLS的云原生特性,辅助进行稳定性和程序性能调优。另外,CLS用作简单运维工具查日志、做接口调用告警

借助CLS的SQL分析、仪表盘、监控告警能力,

可以分析出程序可优化点,解决游戏开发商在初期和爆发期对游戏稳定性和运营数据分析的难题。

除了运维数据外,

CLS还提供了数据观测功能

在游戏调整玩法、分析活动数据时,运营人员可借助CLS快速观测数据变化,并作出应对策略。

另外,还将游戏的通关数据、用户行为分析、审计对账等运营数据在CLS中存储分析。

4 安全防范领域的升级

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

许多恶意BOT流量大量涌入到游戏中,导致游戏服务器 QPS、带宽快速升高,影响服务可用性等情况

由于设计之初没有充分考虑安全问题,因此引来大量不法分子通过恶意BOT抢刷游戏排行,

几乎每分每秒,都有恶意流量访问游戏接口,

并且这一部分恶意群体通过互联网、QQ群和微信群中传播恶意刷排行的脚本,

极大的破坏了游戏公平性,让本该属于游戏对抗的乐趣被恶意BOT抹杀。

而且更重要的是随着羊了个羊热度的不但攀升,许多恶意BOT流量的大量涌入,导致游戏服务器 QPS、带宽快速升高,一度影响服务可用性。

《羊了个羊》接入腾讯云WAF进行防护,

一开始接入WAF的时候,相关 QPS 峰值已达 21W,

接入WAF之前CPU一直处于临界值水位 、网络链接打满的导致服务不可用的情况。

通过选择负载均衡型WAF, 即可在不改动网络架构的情况下3秒完成业务接入WAF,实现在用户无感的情况下对恶意流量进行清洗及防护。

为了有效打击攻击者的恶意流量,

WAF 中 BOT 行为管理也提供了全链路、全生命周期的的恶意行为流量体系,实现快速高效的恶意流量治理。

最后在安全防范领域,通过安全方案抵抗异常流量攻击。

注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请从这里获取:码云

5 互联网应用设计的“三高”原则

通过《羊了个羊》团队在小游戏架构扩容、系统运维以及安全防范领域的实战经验,可以给大家一些参考。

面对突发流量,互联网应用在设计的过程中需要考虑以下能力:

第一是高并发,能够承载瞬时爆发流量,保证响应时长在可接受的范围;

其次是高可用,系统持续提供服务,小概率发生宕机时,过载保护将故障控制在可承受范围内,不影响核心业务;

最后是高扩展,服务系统应该具备水平和垂直扩展能力,在成本和可用性中实现最佳平衡点。

推荐阅读:

Docker面试题(史上最全 + 持续更新)

场景题:假设10W人突访,你的系统如何做到不 雪崩?

尼恩Java面试宝典

Springcloud gateway 底层原理、核心实战 (史上最全)

Flux、Mono、Reactor 实战(史上最全)

sentinel (史上最全)

Nacos (史上最全)

分库分表 Sharding-JDBC 底层原理、核心实战(史上最全)

TCP协议详解 (史上最全)

clickhouse 超底层原理 + 高可用实操 (史上最全)

nacos高可用(图解+秒懂+史上最全)

队列之王: Disruptor 原理、架构、源码 一文穿透

环形队列、 条带环形队列 Striped-RingBuffer (史上最全)

一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之间混乱关系(史上最全)

单例模式(史上最全)

红黑树( 图解 + 秒懂 + 史上最全)

分布式事务 (秒懂)

缓存之王:Caffeine 源码、架构、原理(史上最全,10W字 超级长文)

缓存之王:Caffeine 的使用(史上最全)

Java Agent 探针、字节码增强 ByteBuddy(史上最全)

Docker原理(图解+秒懂+史上最全)

Redis分布式锁(图解 - 秒懂 - 史上最全)

Zookeeper 分布式锁 - 图解 - 秒懂

Zookeeper Curator 事件监听 - 10分钟看懂

Netty 粘包 拆包 | 史上最全解读

Netty 100万级高并发服务器配置

Springcloud 高并发 配置 (一文全懂)

以上是关于峰值21WQps亿级DAU,小游戏《羊了个羊》是怎么架构的?的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB | 使用MATLAB制作羊了个羊小游戏

MATLAB | 使用MATLAB制作羊了个羊小游戏

爆火小游戏《羊了个羊》,我偏不玩

羊了个羊,惊动了马化腾!

如何制作一个羊了个羊游戏1:堆叠牌的拾取

如何给《羊了个羊》配置一套智能客服系统?