遊戲伺服器儲存系統設計

不會飛的章魚發表於2018-08-16

本文內容源自騰訊遊戲學院程式公開課_伺服器第四節
原文連結https://www.cnblogs.com/OctoptusLian/p/9479120.html

一、資料儲存基礎

什麼是資料儲存?

執行資料儲存到硬碟上形成持久化資料。

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作為遊戲資料庫
enter image description here

軟體工程思想:分離穩定和不穩定
穩定,使用MySQL表欄位,例如:NAME、職業、角色的性別、等級;
不穩定,打包放入GAMEBLOB裡面,再通過DR技術進行版本控制和管理,例如:道具、學會的技能;

混合式儲存設計
REDIS快取記憶體,MySQL真實落地。

遊戲伺服器存檔策略設計

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

遊戲存檔需求特點:update > read > insert > delete

定期自動存檔:3分鐘自動存檔

重要操作即時存檔:升級/下線/關服;獲得高價值道具

儲存緩衝佇列:削峰填谷

遊戲伺服器儲存容災介紹

熱備:主從熱備,自動切換
冷備:每日全量備份;關鍵操作前全量備份

enter image description here

注:此模型較簡單,真正設計時會比這個複雜的多。

運營日誌儲存

什麼是運營日誌?
遊戲中玩家重要行為的記錄
諸如登入記錄,等級變更,財產變化流水,交易記錄等資訊

運營日誌的用途有哪些?
運營分析遊戲中玩家的動態,做出運營決策的資料基礎
當發生異常時,追查玩家在遊戲內的活動軌跡的重要依據

運營日誌的儲存
資料量巨大,單服每日約5~10G(未壓縮)
永久存檔,涉及到遊戲收入,需要永久存檔備查
需要便於分析統計
儲存流程:Game Server——>Database——>磁帶。

相關文章