遊戲服務器存儲系統設計

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

1、數據存儲基礎

什麼是數據存儲?

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

data——>file(database)——>file system——>hard driver服務器

數據變爲文件,存入文件系統,文件系統經過OS這一層落到硬盤上面。數據結構

 

數據庫 - 關係型數據庫

數據庫表設計與範式架構

  • 1NF,2NF,3NF

優勢性能

  • 減小數據冗餘
  • 保證數據完整性
  • SQL語言提供了強大的查詢功能

問題設計

  • 數據結構複雜狀況下表結構難以維護
  • 性能通常,容易產生性能瓶頸
  • 可擴展性較差

 

數據庫 - NoSQL數據庫

NoSQL數據庫特色版本控制

  • Key - Value結構
  • 支持結構化查詢

優勢日誌

  • 易於維護
  • 性能較高
  • 可擴展性好

問題blog

  • 容易產生數據冗餘
  • 不支持SQL查詢

 

2、遊戲服務器架構與數據存儲設計

遊戲業務的特色

響應速度要求很是高

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

相關文章
相關標籤/搜索