强扩展、强一致、高可用…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将其分成了多个物理子表,这 ...
随机推荐
- 基于thinkphp6 layui的优秀极速后台开发框架推荐
很多时候我们在做项目开发的时候,苦于没有好一点的轮子,自己动手开发的话,太耗费时间了,如果采用VUE的话,学习成本跟调试也比较麻烦, 而且有时候选用的东西甲方也不太容易接受,现在给大家介绍一款优秀的极 ...
- python+requests+yaml实现接口自动化用例
前言:最近也思考了一下怎么做接口自动化,以下内容属于自己目前阶段所学习到的内容,也逐渐投入自己实际工作中,把最近的学习新得跟大家分享下,话不多说,切入正题. 对接口自动化测试用例的思考:接口测试大多测 ...
- C#中List实体类转换为object 并把参数返回到前端
用ConvertAll方法转换: List<Object> m= list.ConvertAll(s=> (object)s); 返回的结果:
- NC25025 [USACO 2007 Nov G]Sunscreen
NC25025 [USACO 2007 Nov G]Sunscreen 题目 题目描述 To avoid unsightly burns while tanning, each of the \(C\ ...
- D2C小练习
前端智能化现状及未来展望 简介 DEsign: Sketch,Photoshop ,Figma 起源:微软2017年, Design to code code: 前端 核心原理 design----& ...
- Markdown扩展语法
目录 Markdown 语法补充 一.快速生成 HTML 表格代码 在线表格编辑器--TablesGenerator 二. 插入视频.音频或GIF 1. 视频 2. 音频 方法一 方法二 方法三 3. ...
- 《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(6)-Fiddler状态面板详解
1.简介 按照从上往下,从左往右的计划,今天就轮到介绍和分享Fiddler的状态面板了. 2.状态面板概览 Fiddler的状态面板概览,如下图所示: 3.状态面板详解 Fiddler底端状态栏面板详 ...
- jdbc 04: 配置连接信息
jdbc连接mysql,将需要的信息配置到文件中 package com.examples.jdbc.o4_配置连接信息; import java.sql.Connection; import jav ...
- &&与||的优先级比较
&&与||的优先级比较类似于一种思维体操,更多的是造成矛盾,使得两者因为先后顺序的不同而造成的不同结果,当然有时候需要注意c语言中的短路运算. 方法1. 代码如下: 点击查看代码 #i ...
- Python算法之动态规划(Dynamic Programming)解析:二维矩阵中的醉汉(魔改版leetcode出界的路径数)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_168 现在很多互联网企业学聪明了,知道应聘者有目的性的刷Leetcode原题,用来应付算法题面试,所以开始对这些题进行" ...