强扩展、强一致、高可用…GaussDB成为游戏行业的心头爱
摘要:看GaussDB for Redis强扩展、高可用、强一致、高安全,如何玩转各大游戏场景
本文分享自华为云社区《GaussDB为什么成为游戏行业的心头爱?》,作者: GaussDB 数据库 。
在结束忙碌工作回家的地铁上,难得闲暇的周末下午,和朋友再来一局的入睡前......游戏已经成为了当下大多数年轻人在紧张的工作之余最普遍的放松方式和社交手段之一。而游戏厂商想要增加用户粘性,不仅需要在游戏类别、情节故事、关卡设计上洞察用户喜好,让游戏足够新颖,更要在流畅程度上带给用户更极致的体验。游戏场景复杂多样,应用版本更新迭代,企业的运营成本也水涨船高,这让各大厂商在游戏开发过程中都极度重视一个同样的问题——如何选择一款可靠的数据库来支撑庞大的系统稳定运行?
每一款游戏都要经历开发、上线、运维等多个环节,在这过程中,数据库面临的应用场景非常丰富。不同的应用场景对数据库的要求也不尽相同,比如跨服对战对计算算力的要求,在线聊天产生的数据对存储空间的要求,排行榜实时刷新对数据可用性的要求......这些具体的游戏场景都要求数据库在存储空间、弹性扩容、数据强一致保障以及成本等各方面都交出满意的答卷。
在《迷你世界》、《余烬风暴》等大型游戏的开发和上线过程中,这些厂商都不约而同地将GaussDB for Redis数据库作为首选。为什么GaussDB for Redis成为了游戏行业的心头爱呢?我们不妨先看看在游戏行业,他们都面临着哪些共同的痛点,GaussDB for Redis有什么锦囊妙计。
强扩展——支持业务高峰期海量玩家在线对战畅聊
在一款游戏新开服、活动推广、重大版本上线或发放点券游戏币等时间段,玩家访问量突增,同时在线人数迅速飚高,这种情况下,往往需要提前增加节点扩算力,高峰期后再缩减节点,如果处理不好,极有可能在扩容时发生长时间业务阻塞,甚至出现游戏服务器故障而被迫停服,面临痛失大量游戏玩家的风险。
比如《迷你世界》春节期间在线玩家数从平时的百万级别突增到千万级,玩家协同创作与联机游玩产生大量实时聊天数据,需要存储空间在线快速扩容。而之前使用的开源Redis基于存算一体架构,存储扩容需要十几分钟,扩容期间大量玩家在协同创作、实时聊天时出现语音消息发不出、图片传输失败等问题,持续时间长达十几分钟,极大影响了玩家的游戏体验,极易造成用户流失。
龙图游戏的大型魔幻手游《余烬风暴》采用的是多人跨服对战的游戏模式,在大量玩家跨服战斗的业务高峰期,数据库不仅需要稳定支撑10万级高并发业务,还对算力有一定的要求,需要计算节点达到秒级扩容,才能轻松应对海量用户跨服对战的流量洪峰。
针对这些场景,GaussDB for Redis基于业界首创的存算分离架构,做到了存储空间的弹性伸缩和秒级扩容,扩容只需修改配额,最高可支持单实例TB级数据1秒扩容8倍,即从1TB扩容到8TB,能满足所有海量游戏聊天数据的在线扩容场景,助力千万级玩家畅聊不卡顿,极大提升玩家交流体验。计算节点做到分钟级扩容,扩容仅需修改数据映射,无需搬迁数据,在业务上仅有秒级的时延抖动,支撑《余烬风暴》业务高峰期单日同时在线玩家数达到百万级,且玩家数据访问几乎不受影响。
强一致——保障多个地图数据实时一致性
沙盒游戏是近几年的热门游戏题材之一,这类游戏常见的玩法有两种,一种是普通玩家可以进入多个地图联机游玩,通过“方块”的自由组合,搭建各种场景地图;另一种是高阶玩家与各地玩家联机,跨区域协同创作地图,形成全新的小游戏。
相信不少玩家都遇到过这样的问题:在游戏地图A购买完道具,立即切换到别的地图以后,打开背包发现道具竟丢失了;遇到美女玩家,关注对方后本应自动发送招呼语,对方却迟迟没有收到。
其实主要原因是两个地图从不同的节点读取数据,由于主节点的数据没有及时同步至从节点,更新存在一定的延迟性,最终导致多个地图之间的数据不一致。这说明一个问题,无论什么条件下,游戏地图数据必须要实时保持一致,这样才能为玩家带来良好的用户体验。
面对这种数据不一致的问题,GaussDB for Redis是怎么做的呢?首先不需要主从分离,在存储用户数据时,存储层使用3副本保存地图数据,基于一致性共识算法率先保证所有副本数据的一致性,避免了原有主从结构数据库在主数据库宕机后,从数据库中的地图数据跟主数据库中不完全一致的问题。玩家不论是在多个地图之间游玩,还是联机协同创作地图,都能实时保障数据的一致性,在游戏的体验感上得到极大的提升。
数据高可用——支持游戏排行榜数据实时刷新
在一款游戏热度逐渐高涨或新游戏上线时,玩家往往对游戏排行榜的参与感会非常强烈,排行榜的刷新对数据实时性的要求更强。因为排行榜的变化,数据变动非常频繁,需要高可用的数据库保证积分数据的稳定读取和实时刷新。
为了保证数据稳定读取,解决数据库高可用问题,基于存算分离架构的GaussDB for Redis将玩家积分数据统一存储在存储池中,而不是存储在计算节点中,这样做的好处是,如果某一个计算节点发生故障后,业务将自动将该节点的业务切换到其它计算节点,如下图所示:
只要集群中的任一节点存活,就可访问全量数据(友商采用的存算一体主从架构,单节点挂掉后,上面存储的积分数据将无法读取),避免了因为节点故障导致排行榜无法实时刷新的情况。
高安全——跨地域双活完整灾备轻松应对游戏故障
游戏场景是典型的互联网场景,用户的数据日志非常之多,一旦发生数据库宕机、机房断电、网络故障等情况造成数据丢失,玩家的游戏体验将大打折扣。当一个可用区或整个地域意外宕机,需要有其它的可用区和补救措施来及时修复数据,这对系统的安全保障能力和容灾能力都提出很高的要求。
GaussDB for Redis支持跨地域双活容灾,即在两个实例之间建立数据同步链路,其中主实例支持读写,备实例只读。如下图所示:
与开源Redis那种简单的命令转发不同,GaussDB for Redis的双活方案是基于WAL日志的数据同步,原理上更类似于MySQL数据库。在双活架构中,RsyncServer进程负责数据的全量和增量同步,数据同步链路采用华为云内部高速网络,同Region内仅毫秒级延迟。
GaussDB已经在游戏行业沉淀出了非常丰富、成功的经验。在《迷你世界》国产沙盒创意平台中,GaussDB for Redis支撑了多区域TB级别的地图数据同步更新,助力亿级用户跨区域协同创作,在整体成本相比开源Redis降低60%的同时,存储用户画像总量提升了3倍,保障了千万级玩家实时聊天数据毫秒级别访问。龙图游戏选择了GaussDB for Redis作为大型魔幻手游《余烬风暴》的核心底座,不仅开服首日流水就破千万,且在业务高峰期单日同时在线玩家数达到百万级,收获了众多玩家的喜爱。
游戏场景只是互联网行业中的其中一种通用型场景,这些核心技术和实践经验也只是GaussDB数据库多年来发展成果的冰山一角。GaussDB在技术上的创新和突破从未止步,在千行百业中的探索也一直在路上。
强扩展、强一致、高可用…GaussDB成为游戏行业的心头爱的更多相关文章
- MySQL高可用架构-MMM、MHA、MGR、PXC
主从复制如何工作 在主库把数据记录到binlog(二进制日志). 备库开IO线程把binlog复制到自己的relaylog(中继日志). 备库读取中继日志,重放到备库上. 半同步复制 半同步复制可以确 ...
- HAProxy+Varnish+LNMP实现高可用负载均衡动静分离集群部署
HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3. ...
- 翟佳:高可用、强一致、低延迟——BookKeeper的存储实现
分享嘉宾:翟佳 StreamNative 联合创始人 编辑整理:张晓伟 美团点评 出品平台:DataFunTalk 导读:多数读者们了解BookKeeper是通过Pulsar,实际上BookKeepe ...
- TDSQL MySQL版基本原理-水平分表 读写分离 弹性扩展 强同步
TDSQL MySQL版(TDSQL for MySQL)是部署在腾讯云上的一种支持自动水平拆分.Shared Nothing 架构的分布式数据库.TDSQL MySQL版 即业务获取的是完整的逻辑库 ...
- 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
- 11、可扩展MySQL+12、高可用
11.1.扩展MySQL 静态分片:根据key取hash,然后取模: 动态分片:用一个表来维护key与分片id的关系: 11.2.负载均衡 12. 12.2导致宕机得原因: 35%环境+35%性能+2 ...
- Puppetmaster高可用和可扩展的方案设计
Puppet是当前devops中常用于管理系统配置和应用部署,多数会使用其C/S架构的方式来进行部署,其中puppetmaster是集群中配置管理的核心节点.在实际的生产环境中,如果因为master节 ...
- php面试专题---19、MySQL高可扩展和高可用考点
php面试专题---19.MySQL高可扩展和高可用考点 一.总结 一句话总结: 要区别分区和分库分表,分区的话对用户是透明的,分库分表的话需要程序员做点事情,主从数据库同步的话借助的是二进制日志 1 ...
- PHP面试 MySQL的高可扩展和高可用
MySQL的高可扩展和高可用 面试题一 MySQL分表和分区的工作原理,分表和分区的使用场景和优缺点. 分区表的原理 对用户而言,分区表时一个独立的逻辑表,但是底层MySQL将其分成了多个物理子表,这 ...
随机推荐
- Java实现无界面计算器
## 要求### 1.四个方法加减乘除### 1.循环加switch### 1.传递2个数源码如下: ``` public class Jisuanqi { public static void ma ...
- 12.1 Android Studio如何手动下载Gradle文件
实际操作过程中,可能由于各方面原因,导致Gradle无法下载,或者下载比较慢,这个时候,其实我们可以手动下载,或者找一个最近的版本,替换他. 确认要下载的版本 不论是用命令编译Android项目,还是 ...
- NC16660 [NOIP2004]FBI树
NC16660 [NOIP2004]FBI树 题目 题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全&quo ...
- STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- 『现学现忘』Git后悔药 — 30、版本回退git reset --hard命令说明
git reset --hardcommit-id命令:回退到指定版本.(hard:强硬,严格的回退) 该命令不仅移动了分支中HEAD指针的位置,还将工作区和暂存区中数据也回退到了指定的版本. (提示 ...
- 自动登录token过期问题
之前遇到的一个也不算棘手的问题,自动登录本地存储了token却无法登录到主页. 先说一下我自动登录的思路:在用户登录成功时,将 token 存入 cookie :当用户下次来到本网站,读取 cooki ...
- [Java学习笔记] Java异常机制(也许是全网最独特视角)
Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...
- websocket、socket、http对比
简介 在之前的理解中,讲述了socket.websocket等相关的理解,本文就socket.websocket.http理解一下其对应的联系和区别. HTTP 协议 http 为短连接:客户端发送请 ...
- Docker默认桥接网络是如何工作的
1. 启动一个Docker容器 一般来说,我们起一个容器比如一个简单的nginx服务会向这样 docker run -d --rm nginx:XXX OK容器起来了,但是并不能通过宿主机被外面的机器 ...
- Nuget打包并上传教程
一.准备 1 . 下载 Download NuGet.exe 2 . windows 系统下设置环境变量 path中 或者 在dos 命令窗口下cd转到 nuget.exe 所在目录,这里为了每次使用 ...