遊戲伺服器架構概要

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

宣告:本筆記內容源自騰訊遊戲學院遊戲伺服器開發課程第二節
格式有些亂,有興趣的可以看原文連結 https://www.cnblogs.com/OctoptusLian/p/9408602.html

一、伺服器架構概念解析

1,什麼是“伺服器架構” 對伺服器軟體&硬體&執行的一體化規劃

框架結構:分層分塊。
構建技術選擇:程式語言;通訊方式;儲存技術。
執行質量:執行環境;部署工具方法;更新方案。

二、案例講解:分散式服務架構設計演講——MMORPG(大型多人線上角色扮演)《軒轅傳奇》

伺服器架構_分割槽多世界
1,運營視角
世界與世界是隔離的 世界之間的互通方式:跨服、轉服、合服

2,運維視角
SET部署:每開一組服就增加一組機器,部署一套程式。 3,客戶端視角
TCLS元件:顯示所有伺服器列表。

4,伺服器視角
一組服:一套程式。

軒轅伺服器為什麼要這麼多程式和機器_多維度切分
1,分割槽多世界原型v1
一個大區包含多臺物理機
一臺物理機僅運營一個遊戲世界
一個遊戲世界對應一個遊戲程式
問題:跨世界共享的功能?

遊戲賬號登陸
客戶端版本升級
遊戲大區列表
遊戲賬號資訊
2,公共服分離:將各遊戲世界公共的功能分離部署到公共服上。

問題:公共服的單點故障

“主-備-從”模式:主節點出問題切到從節點(熱切換),從節點出問題切到備份節點。
3,按“接入-邏輯-儲存”分離
分離業務邏輯(不穩定的)與基礎功能(穩定的)

問題:邏輯處理和持久化資料在一個物理機上

DB的檔案IO會拖慢整體系統(百萬級玩家,幾百個G資料)
程式執行中每日輸出大量的日誌(幾個G資料)
物理機故障時DB可能會丟失
4,按重要性分離邏輯計算與持久化儲存的部署
方案:資料庫獨立部署&熱備,log服分離

5,分割槽多世界原型v2
cluster級服務:整個遊戲一組
world級服務:每個遊戲世界一組
各組服均包含接入、邏輯、儲存(DB/DR/LOG分離)
6,繼續分離公共服
公共服 分離“伺服器列表”、“版本升級”、“賬號資訊”等功能
7,切分軒轅邏輯程式
現狀:所有的雞蛋都在一個籃子裡

所有玩家都在一個程式上;
好處:一個特性可以方便地操作到所有玩家;
風險:一個特性的BUG可能會影響所有玩家。
所有特性都在一個程式上;
風險:特性的不斷引入會使該程式穩定性和服務質量降低。
方案:切分xysvr,讓多個scene分別服務於一些使用者,world負責拉取資料。並協調控制多scene。

8,分割槽多世界原型v3
cluster級、world級服務按功能不能切分。
9,如何做切分_參考原則
為可擴充套件性:一組服一套程式;(SET部署)
為可運維性:一組服一套機器;
為可靠性:弱相關的功能可分離;
提高更新便利性:將頻繁更新的部分分離;
按服務重要性切分:如支付系統獨立;
按服務特點切分:接入、儲存、邏輯分離;
切分穩定的(基礎功能)與不穩定(業務邏輯)的。

三、案例講解:面向運營的架構設計

1,接入與負載
多tconnd:分離下行廣播包的壓力。

多scene:可擴充套件性(單服承載人數)。

2,可用性
resume機制

minidump

避免因為coredump導致resume時間過長;
支援輸出出錯時基本上下文:呼叫棧、暫存器。
3,線上控制
reload機制:資源、配置檔案熱載入;

GM系統:管理遊戲執行內容。

4,過載保護
請求頻率控制:按功能模組控制:移動、技能...
DB頻率控制:按業務模組配額;區分優先順序-存檔優先;
邊界情況檢測:某類記憶體分配佔用量超出閥值;某請求/time執行時間過長。
5,DB設計
表格設計:按QQ號分表;簡單列+統一blob格式(meta)
資料升級:旁路程式,自動分批升級。

四、案例講解:旁路服務

版本升級

tcus

支援升級策略:強制、推薦、後臺、預下載、自定義;
支援灰度更新。

tdir

顯示伺服器列表,繁忙程度(參照線上人數)

目錄服務

賬號服務與賬號登擼

角色登入

遊戲過程

運營支援

髒字過濾
驗證碼

五、參考資料

讓我們談談遊戲伺服器開發(上) http://gad.qq.com/article/detail/21401

遊戲伺服器架構演進(完整版) https://my.oschina.net/u/1859679/blog/1438724?p=2

相關文章