游戏服务器的存储设计

游戏服务器本质上也是一个分布式系统,涉及到分布式系统就会涉及到一致性。

目标

  • 数据存储的概念
  • 游戏服务器的存储需求
  • 游戏服务器存储方案

问题

  • 游戏服务器有哪些数据存储需求呢?
  • 相比较web服务,游戏服务器对于存储的需求什么不一样呢?
  • 游戏服务器存储和其他网络服务有什么不一样呢?

游戏服务器相比较web服务,存储的数据更为复杂,而且变化的频率更快。

数据存储基础(基础背景)

什么是数据存储?

4933701-0c4e0a7583a31be1.png
数据存储

数据存储是指将内存中数据保存到硬盘上形成持久化数据的过程。

4933701-ce359343ede9d507.png
数据存储方式
4933701-ecbb5c96ae9e6748.png
数据存储方式

关系型数据库

数据库表设计与范式(1NF、2NF、3NF),关系型数据的优点在于减少数据冗余、保证数据完整性、SQL语言提供强大查询功能。缺点是数据结构复杂情况下表结构难以维护,性能一般且容易产生性能瓶颈、可扩展性较差。

4933701-cc0fc762e6984110.png
关系型数据库

NoSQL数据库

NoSQL数据库特点是Key-Value结构和支持结构化存储,其优点在于易于维护、性能较高、可扩展性好。缺点是容易产生数据冗余、不支持SQL查询。

4933701-562005f28be8c94e.png
NoSQL

DHT算法

游戏服务器应该如何选择存储方案?

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

游戏业务的特点

  • 响应速度要求非常高:100ms以上的延迟玩家就会有感知,一般在20~50ms之间。
  • 数据更新频率高:玩家数据每时每刻都在变化、如获取经验、获取金钱、获取成就等。

游戏数据的频繁操作程度:update > read > insert > delte

为实现高速响应,玩家数据全部在内存中。在登录时从DB从加载到内存,游戏过程中的数据变更通过操作内存数据完成。游戏服务器正常运行的时候,是不会动态地从DB中去load数据的。

4933701-5153117dd2d61f4e.png
游戏业务特点

传统的web服务其实大部操作时在读数据,所以它会很强调一个缓存的概念。但是游戏中主要是变更比较多,update的操作会非常频繁,所以更多地是在写数据,因此要考虑怎么去降低对DB的负载。

除此之外,还跟游戏的类型和架构有关。传统的MMORPG会有一个选择区服的概念,也就是业界说的比较多的全区全服和分区分服的概念。

游戏服务器架构介绍

4933701-31442c52d49486f6.png
分区分服服务器架构

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

4933701-7826c076789c5c92.png
全区全服服务器架构

两种架构直接导致了对db的性能的要求是不一样的,分区分服可以通过业务项或策划项来控制每个区服的人数。传统的RPG每个区分会限制在5k~6k之间,天刀可以做到单服4w人。

游戏服务器数据库选型

  • 分区分服存储特点:单服数据量较少、请求量少、无需动态在线扩容,因此比较适合采用RDBM。
  • 全区全服存储特点:数据量大、请求量大、需要动态在线孔融,因此采用NoSQL比较适合。

使用MySQL作为游戏数据库

  • Blob:A Blob is a binary large object that can hold a variable amount of data.

blob数据类型分为:tinyblob/blob/mediumblob/longblob,它们之间的区别主要在于容纳对象的大小不一样。

4933701-3cbc9363ea027029.png
blob

其实也可以把MySQL当作一个KV系统来使用

  • 混合式存储设计

稳定数据使用表字段来存储,复杂且不稳定的数据采用blob存储,充分利用SQL的查询优势和KV的便捷优势。

4933701-1b8b43e18043ad3a.png
image.png

数据库选择好了,那么如何设计存盘策略呢?

对游戏服务器来说,读不是问题因为很少,更新才是问题。更新首先会在内存中把它记录下来,最终落地综合考虑也是采用一种混合式的操作。

游戏服务器存盘策略设计

  • 游戏存盘需求特点:update>read>insert>delete
  • 定期自动存盘:3分钟自动存盘
  • 重要操作即时存盘:例如升级/下线/关服、获得高价值道具...
  • 存储缓冲队列:削峰填谷
4933701-f56303f0d8ea94d3.png
游戏服务器存盘策略

游戏服务器存储容灾

  • 热备:主从热备,自动切换
  • 冷备:每日全量备份,关键操作前做全量备份。
4933701-a6e26ede5efee2cd.png
存储容灾

运营日志存储

什么是运营日志呢?它是游戏中玩家重要行为的记录,诸如登录记录、等级变更、财产变化流水、交易记录等信息。

运营日志有什么用途呢?运营分析哟西中玩家动态,是做运营决策的数据基础。当发生异常时,是追查玩家在游戏内的活动轨迹的重要轨迹。

运营日志的存储,由于数据量巨大,单服每日可高达5~10G的未压缩数据。一些涉及游戏收入的流水,是需要永久存档备查的。另外一方面便于分析统计。

4933701-7ad1e6466033a6e7.png
运营日志
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值