游戏服务器存储系统设计

本文内容源自腾讯游戏学院程序公开课_服务器第四节

一、数据存储基础

什么是数据存储?

运行数据保存到硬盘上形成持久化数据。

data——>file(database)——>file system——>hard driver

数据变为文件,存入文件系统,文件系统通过OS这一层落到硬盘上面。

数据库 - 关系型数据库

数据库表设计与范式

  • 1NF,2NF,3NF

优点

  • 减少数据冗余
  • 保证数据完整性
  • SQL语言提供了强大的查询功能

问题

  • 数据结构复杂情况下表结构难以维护
  • 性能一般,容易产生性能瓶颈
  • 可扩展性较差

数据库 - NoSQL数据库

NoSQL数据库特点

  • Key - Value结构
  • 支持结构化查询

优点

  • 易于维护
  • 性能较高
  • 可扩展性好

问题

  • 容易产生数据冗余
  • 不支持SQL查询

二、游戏服务器架构与数据存储设计

游戏业务的特点

响应速度要求非常高

  • 100ms以上的延迟玩家就会有感知

数据更新频率高

  • 玩家数据每时每刻都在变化
  • 获取经验,获取金钱,获取成就
  • update > read > insert > delete

解决方案

  • 为了实现高速响应,玩家数据全部在内存中
  • 在登录时从DB加载进内存
  • 游戏过程中的数据变更通过操作内存数据完成

游戏服务器架构介绍

分区分服服务器架构(天涯明月刀、梦幻西游)

Player 1——>Game Server 1——>Database 1

Player 2——>Game Server 2——>Database 1

Player 3——>Game Server 3——>Database 1

每个玩家可以选择不同的服务器进行游戏,每个服务器后面的存储都是相互独立的,这样每个服务器的存储压力也会变得比较小。

全区全服服务器架构(王者荣耀、皇室战争、吃鸡)

Player 1——>Game Server Cluster——>Database

Player 2——>Game Server Cluster——>Database

Player 3——>Game Server Cluster——>Database

游戏服务器数据库选型

分区分服存储特点——>选择 RDBM(关系型数据库)

  • 单服数据量较少
  • 请求量少
  • 无需动态在线扩容

全区全服存储特点——>选择 NoSQL

  • 数据量大
  • 请求量大
  • 需要动态在线扩容

使用MySQL作为游戏数据库

软件工程思想:分离稳定和不稳定

稳定,使用MySQL表字段,例如:NAME、职业、角色的性别、等级;

不稳定,打包放入GAMEBLOB里面,再通过DR技术进行版本控制和管理,例如:道具、学会的技能;

混合式存储设计

REDIS高速缓存,MySQL真实落地。

游戏服务器存盘策略设计

Player——>Game Server 1(Player Runtime Data)<——(load)DB

游戏存盘需求特点:update > read > insert > delete

定期自动存盘:3分钟自动存盘

重要操作即时存盘:升级/下线/关服;获得高价值道具

存储缓冲队列:削峰填谷

游戏服务器存储容灾介绍

热备:主从热备,自动切换

冷备:每日全量备份;关键操作前全量备份

注:此模型较简单,真正设计时会比这个复杂的多。

运营日志存储

什么是运营日志?

  • 游戏中玩家重要行为的记录
  • 诸如登录记录,等级变更,财产变化流水,交易记录等信息

运营日志的用途有哪些?

  • 运营分析游戏中玩家的动态,做出运营决策的数据基础
  • 当发生异常时,追查玩家在游戏内的活动轨迹的重要依据

运营日志的存储

  • 数据量巨大,单服每日约5~10G(未压缩)
  • 永久存档,涉及到游戏收入,需要永久存档备查
  • 需要便于分析统计

存储流程:Game Server——>Database——>磁带

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

分布式架构的套路No.74

今天小蕉跟大伙一起聊聊分布式系统的架构的套路。在开始说套路之前,大家先思考一个问题,为什么要进行分布式架构? 大多数的开发者大多数的系统可能从来没接触过分布式系...

3839
来自专栏云加头条

韩伟:解谜腾讯游戏海量服务架构

网络游戏和其他互联网服务一样,需要面对承载海量用户的压力,同时还需要满足游戏所要求的低延迟、业务逻辑高复杂度的特性。腾讯游戏研发部资深架构师韩伟为大家带来了“解...

5329
来自专栏NetCore

对于大数据大流量情况下微软架构的水平扩展的遐想(瞎想)

最近回顾SAAS的书籍,书中的扩展架构都有点让我痴迷,但书中介绍的都是以Java,Apache,JBoss,Hadloop等技术实现负载均衡,大数据处理,对于微...

2258
来自专栏数据和云

【从根源出发,化风险为可控】应用到数据库的连接数管控

作者介绍 ? 巩飞(Morinson) 云和恩墨技术专家 网名Morinson,现服务于云和恩墨西北区,有14年在IT公司的技术类工作经验,特别是在 Ora...

3155
来自专栏CSDN技术头条

微博热点事件背后数据库运维的“功守道”

【导语】 微博拥有超过3.76亿月活用户,是当前社会热点事件传播的主要平台。而热点事件往往具有不可预测性和突发性,较短时间内可能带来流量的翻倍增长,甚至更大。如...

27310
来自专栏韩伟的专栏

如何设计运维友好的服务器端系统

如果我们在开发的时候,就充分考虑到系统的运维需求,就算只进行了一些简单的约束,都能让运维工作有巨大的改进。我想这也是所谓DevOps流行起来的原因吧。

6150
来自专栏直播系统开发

专业直播APP开发服务商教你直播平台搭建需要准备些什么——流媒体CDN服务篇

网络直播可谓是近年来互联网的“热门关键词”,如今直播平台已经深入到了各行各业,诞生了数不尽的行业解决方案。这些解决方案都离不开直播系统源码,通过一套功能全面的直...

4174
来自专栏腾讯云TStack专栏

腾讯私有云MySQL解决方案—TDSQL

TDSQL是腾讯提供的一套完整的MySQL数据库集群化管理解决方案,作为私有云TStack平台重要的数据库产品能力,旨在解决高可用、高性能、分布式、配套设施等方...

7249
来自专栏魏艾斯博客www.vpsss.net

wodpress 博客禁止对某篇文章发表评论的方法

1893
来自专栏IT大咖说

XpmJS —— 小程序后端开发思考和实践

摘要 Linux容器技术很早就有,LXC的容器方案也早2008年就已面世;但直到 2013年 Docker 推出,才让容器技术红遍全球。Docker 没有高深底...

4406

扫码关注云+社区

领取腾讯云代金券