游戲服務器存儲系統設計


本文內容源自騰訊游戲學院程序公開課_服務器第四節

一、數據存儲基礎

什么是數據存儲?

運行數據保存到硬盤上形成持久化數據。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM