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

news2024/9/27 9:29:01

小游戏《羊了个羊》 短短的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 高并发 配置 (一文全懂)》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode刷题模版:131 - 140

目录 简介131. 分割回文串132. 分割回文串 II133. 克隆图134. 加油站135. 分发糖果136. 只出现一次的数字137. 只出现一次的数字 II138. 复制带随机指针的链表139. 单词拆分140. 单词拆分 II【未理解】结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您…

【GitHub仓库上传和克隆】

GitHub仓库上传和克隆1. 安装1.1 WindowR:cmd1.2 选择写代码的文件夹右键Git Bash Here1.3 分支管理2. 本地仓库推送给网络仓库2.1 忽略推送文件2.2 本地初始推送3. 克隆3.1 克隆下载3.2 克隆代码修改上传3.2.1 初次推送3.2. 2 后续推送其他1. 安装 1.1 WindowR:cmd //是否安…

Redis从入门到精通(一:Redis入门)

Redis 简介 问题现象 海量用户 高并发 罪魁祸首——关系型数据库性能瓶颈:磁盘IO性能低下扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群解决思路降低磁盘IO次数,越低越好 —— 内存存储去除数据间关系&#xff0…

ucore lab1,lab2,lab3,lab4链表详解 获取结构体成员偏移

ucore版链表介绍 ucore是清华大学操作系统实验课要完成的操作系统,里面有个链表数据结构我觉得很有意思,记录下来。 ucore将链表与数据对象分离,使得任意数据对象,只要加上一个链表组件就能组织成一个链表。 要使得一个本来不具…

双目相机国产、非国产统计参数对比分析

双目相机国产、非国产统计参数对比分析 ZED ZED是STEREOLABS出品的双目摄像头,广泛应用在科研机构的无人车、协作机械臂上,如图2-1所示。其3D分辨率在Ultra模式下可达到RGB时的分辨率,具体见图2-2,物理尺寸为1753033mm&#xff…

记录一次gateway HandlerStrategies.withDefaults().messageReaders() 导致的内存炸裂的问题

背景 年前出现了一次内存炸裂的生产事故。导致其他请求无法请求通过。 [boundedElastic-55] [Loggers.java:314]:Scheduler worker in group main failed with an uncaught exception [TID:] 2023-01-18 10:40:33.189 [INFO] [boundedElastic-55] [AccessTokenGatewayFilterF…

Arduino基础学习——meArm(太极创客第二部分)

面包板电源模块为机器臂单独供电,机器臂本身有四个小电机驱动作用,如果单独靠arduino来为这四个小电机供电,机器臂可能不会稳定工作,将会抖动。 机械臂的四个动作主要靠四个电机来控制,这四个电机主要连接在我们的ard…

云端IDE系列教程4:TitanIDE + Typora = 鱼和熊掌

概述 目前,大部分技术人员使用 Markdown 编写技术文档已经成了日常工作的一部分,现在市场上也有各种各样的文字编辑工具:石墨文档、有道云笔记、语雀、金山文档、腾讯文档、Google文档,WPS、Office、Typora等。但在云原生时代&am…

vue3学习笔记(总)——ts+组合式API(setup语法糖)

文章目录1. ref全家桶1.1 ref()1.2 isRef()以及isProxy()1.3 shallowRef()1.4 triggerRef()1.5 customRef()1.6 unref()2. reactive全家桶2.1 reactive()2.2 readonly()2.3 shallowReactive() 和 shallowReadonly()3. to系列全家桶3.1 toRef()3.2 toRefs()3.3 toRaw()4. comput…

【年度总结】回看2022,展望2023,做更好的自己

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…

Mac 下ZooKeeper安装和使

Mac 下ZooKeeper安装和使用 Apache ZooKeeper分布式协调系统是构建分布式应用程序的高性能服务。 1.下载ZooKeeper 环境要求:ZooKeeper服务器是用Java创建的,它运行在JVM之上。需要安装JDK 7或更高版本。 https://zookeeper.apache.org/releases.html …

1.3 PCIe——硬件实现架构

PCIe的设计可以分为controller和PHY,整体设计较为复杂,一般可向IP厂商定制设计,controller和PHY模块的接口是PIPE接口 一、一般实现架构 1.1 PCIE controller 控制器逻辑包含了IP的host设计,以及PCIe协议中所规定的事务层、数…

AirServer电脑投屏软件免费版使用及切换中文教程

AirServer是由App Dynamic打造的一款投屏软件。AirServer是适用于Mac和Windows的先进的屏幕镜像接收器。可以将手机设备,如iPhone、iPad、安卓上的屏幕投送到电脑屏幕上。特别我们日常开会要给客户演示手机上的操作时,投屏就显得非常专业。当然&#xff…

关于java位移运算的一点讨论

框架乱飞的年代,时常还得往框架源码里看,对内在原理没点理解,人家就会认为你不太行。平时开发你可能没咋用过位移运算,但往源码里一看,就时常能看到它。我也是看着看着,突然仔细一琢磨,又不由得…

【机器学习 - 4】:线性回归算法

文章目录线性回归线性回归的理解损失函数简单线性回归封装线性回归算法线性回归算法在sklearn中调用线性回归算法向量化运算线性回归模型中的误差均方误差 MSE均方根误差平均绝对误差调用sklearn中的均方根误差和平均绝对误差函数R squared error (常用)…

结构光相机国产、非国产统计参数对比分析

结构光相机国产、非国产统计参数对比分析 1. Kinect v1 Kinect v1深度相机拥有一个RGB彩色摄像头,一个红外线CMOS摄像机和一个红外发射器。相机的红外线CMOS摄像机和红外发射器以左右水平的方式分布。该相机采用的是以结构光为基础进行改进后的光编码(…

【SpringCloud16】SpringCloud Sieuth分布式请求链路跟踪

1.概述 1.1 为什么会出现这个技术? 问题: 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中…

Linux服务器离线安装Gitlab

1、下载 1.1、网址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 1.2、选择版本 2、安装 2.1、将安装包上传到服务器 2.2、检查相关依赖是否安装 使用命令 rpm -qa | grep -i (要查看的依赖名);如果安装了&#…

OpenAI DALL·E 绘画机器人

快过年了,在公司也没啥任务,索性尝试使用OpenAI的DALLE生成一些好玩的图片。 OpenAI DALLE 官方介绍: DALLE 是一种由 OpenAI 开发的大型语言模型,其能够通过生成图像和文本来完成各种任务。其名称来源于绘画机器人 WALLE 和艺术家…

2023年准备报考软考,考哪个?

一般建议从软考中级考试考,科目多,难度也不大!关于中级科目。计算机软件类包括:软件评测师、软件设计师、软件过程能力评估师。计算机网络类包括:网络工程师。计算机应用技术类包括:多媒体应用设计师、嵌入…