zoukankan      html  css  js  c++  java
  • 游戏服务器存储系统设计

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

    一、数据存储基础

    什么是数据存储?

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

    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——>磁带

  • 相关阅读:
    Flex随笔
    Flex中实现类似Javascript的confirm box
    正则表达式
    MySQL存储过程
    cvc-complex-type.2.4.a: Invalid content was found starting with element
    Spket在Eclipse/MyEclipse下的安装和配置(图文教程)
    关于安装linux时要怎么分区的考虑的參考方式?
    BZOJ 1975 SDOI2010 魔法猪学院 A*k短路
    使用scipy进行聚类
    Android 下拉刷新上拉载入效果功能
  • 原文地址:https://www.cnblogs.com/OctoptusLian/p/9479120.html
Copyright © 2011-2022 走看看