最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

騰訊內(nèi)部技術(shù):《軒轅傳奇》服務(wù)器架構(gòu)演變

2022-02-24 19:27 作者:小小游戲開發(fā)程序員  | 我要投稿

今天給大家分享一下騰訊游戲《軒轅傳奇》的服務(wù)器架構(gòu),講服務(wù)器架構(gòu)如果只是得一個結(jié)果,把架構(gòu)示意圖展示一下,這種沒有什么意義,今天我想從一個每個人都會寫的最簡單的架構(gòu)模型,如何一步一步的演變成《軒轅傳奇》分區(qū)分世界的架構(gòu)。

功能擴(kuò)展性切分與運(yùn)維擴(kuò)展性切分

最簡單的游戲服務(wù)器,一個進(jìn)程搞定所有的功能,比如支持500人同時在線,開一個服A對應(yīng)的玩家稱ClientA, Server一個進(jìn)程,架構(gòu)如下: ClientA------>Server。如果再開第二個服B,如何處理?

方案1: Server 一個進(jìn)程同時支持兩個服的玩家同時游戲,ClientA/B---->ServerA/B,這樣的好處就是跨服通訊非常的方便,在一個進(jìn)程里面,缺點就是ClientA服的玩家引起的宕機(jī)會影響B(tài)服的玩家。同一個進(jìn)程來跑A區(qū),B區(qū),無法發(fā)揮服務(wù)器的多核優(yōu)勢。那么就會演變成方案2。

方案2:A服玩家由ServerA進(jìn)程來提供服務(wù),B服玩家由ServerB進(jìn)程來提供服務(wù),他們部署到一臺機(jī)器上。這樣的相比方案1的優(yōu)點就是一臺機(jī)器上實現(xiàn)了擴(kuò)容,缺點仍然很明顯就是如果物理機(jī)器壞了,兩個服的玩家都不能正常的游戲。

ClientA------>ServerA

ClientB------>ServerB (ServerA,ServerB部署到一臺機(jī)器上)

再接著演變和拆分,得到方案3。

方案3: 我們把不同的服放到不同的物理機(jī)器上,這樣不同的服就真正的獨立起來。

ClientA------>ServerA

ClientB------>ServerB (ServerA,ServerB部署到不同機(jī)器上)

總結(jié)一下,方案1到方案2叫做功能可擴(kuò)展性切分,方案2到方案3叫做運(yùn)維擴(kuò)展性切分。

分離公共服

不同的服部署到不同的物理機(jī)器上,不同服之間有一些公共的服務(wù),不用每個服的實現(xiàn)一個,每個服都架設(shè)一個,所以把這些公共的服務(wù)里單獨分離出來,于是架構(gòu)演變成如下:

這個時候公共服就是全局唯一的,多個服共用,它就變成了一個單點,公共服的單點故障怎么辦?單點故障常用的解決方案就是主-備-從。

按功能分離每個服

上面軒轅里面所說的每個服都按照固定的功能來來分三層: 連接層(tconnd),邏輯層(logic srv), 存儲層(torm svr)如下圖

那么隨之而來的問題又來了,邏輯處理與數(shù)據(jù)持久化在一臺物理機(jī)器上,會到導(dǎo)致DB的文件IO拖慢整個系統(tǒng)(每個服百萬級玩家,幾百個G的數(shù)據(jù))。進(jìn)程運(yùn)行中每日輸出大量的日志,像軒轅每天日志量可達(dá)幾個G的數(shù)據(jù)。更致命的是如果物理機(jī)器崩潰,數(shù)據(jù)庫中的商業(yè)數(shù)據(jù)隨時會丟失,商業(yè)數(shù)據(jù)丟失在長期運(yùn)營的過程中已經(jīng)可以算一個很嚴(yán)重的運(yùn)營事故。所以每個服的架構(gòu)又會做后面的演變。

按重要性分離:分離邏輯計算與持久化存儲部署

游戲運(yùn)行中的重要數(shù)據(jù)包括了日志與數(shù)據(jù)庫數(shù)據(jù),我們講這些重要性的數(shù)據(jù)需要持久化存儲部署的與邏輯計算分離開來,重要的數(shù)據(jù)采用主-備-從的方式,確保商業(yè)數(shù)據(jù)的穩(wěn)定性。那么我們的服務(wù)器每個服務(wù)的架構(gòu)演變?nèi)缦?

分區(qū)多世界原型演變

總結(jié)上面的演變,我們把整個軒轅的架構(gòu)圖放出來給大家,存儲與邏輯分離,每個服按功能分成3部分。Cluster級服,全局只有唯一的一個,World級服,每個世界一組,每個服,包含接入,邏輯,存儲。存儲做好分離,做好DB, DR。

公共服進(jìn)一步分離

大體的架構(gòu)定下來了,接下來就是分離一些軒轅里面功能部分,先來分離公共服。如下圖

我們把公共服的一些固定功能,單獨的拆分出來不同的服務(wù)進(jìn)程,來提供對應(yīng)的服務(wù),比如目錄服,

版本升級,賬號服務(wù)等。這樣把公共服拆分成了一套進(jìn)程。運(yùn)維的時候根據(jù)運(yùn)維需求來把公共服部署一套機(jī)器。

切分軒轅邏輯進(jìn)程

當(dāng)前服的所有玩家都在一個進(jìn)程上,好處就是可以方便的操作到所有玩家,風(fēng)險也是有的,一個特性的bug會影響到當(dāng)前進(jìn)程上所有其它特性的玩家。接下來我們把邏輯進(jìn)程來進(jìn)行拆分,MMORPG里面拆分邏輯進(jìn)程常用的方法是按照場景來拆,那么我們的架構(gòu)演變?nèi)缦?,把邏輯拆分成世?多個Scene,如下:

讓多個Scene分別服務(wù)一些用戶,World負(fù)責(zé)拉取數(shù)據(jù),協(xié)調(diào)控制所有的Scene。游戲開發(fā)和其它應(yīng)用用開發(fā)最大的不一樣就是,一個產(chǎn)品上線了,結(jié)合玩家玩家運(yùn)營,要經(jīng)常改,上線了才剛剛開始,所有的功能和特性在一個進(jìn)程里面,不斷的更新特性會使得穩(wěn)定性降低,所以我們把那些相對更新少的功能拆分獨立出來,提升更新對系統(tǒng)穩(wěn)定性造成的風(fēng)險。

總結(jié)

最后總結(jié)一下,游戲框架如何切分,在軒轅中得到的一些總結(jié)經(jīng)驗,分享出來,供大家參考:

為可擴(kuò)展性: 一組服,一套進(jìn)程;

為可運(yùn)維性: 一組服,一套機(jī)器;

為可靠性: 弱相關(guān)的功能分離;

提高更新的便利性: 將平凡更新的部分分離;

按服務(wù)的重要性切分: 支付系統(tǒng)獨立;

按服務(wù)特點切分: 接入,存儲, 邏輯分離;

切分穩(wěn)定 (基礎(chǔ)功能)的與不穩(wěn)定(業(yè)務(wù)邏輯)的

好了,今天的《軒轅傳奇》架構(gòu)演變就分享到這里了,我詳細(xì)的講解了一節(jié)課程,除了分析演變以外,還分享了長線運(yùn)營中的一些經(jīng)驗,分享給沒有開發(fā)過大型玩家在線游戲的開發(fā)者。

附教學(xué)視頻:

騰訊內(nèi)部分享:《軒轅傳奇》MMO服務(wù)器技術(shù)架構(gòu)分享bycwedu.vipwan.cn/promotion_channels/987877417


騰訊內(nèi)部技術(shù):《軒轅傳奇》服務(wù)器架構(gòu)演變的評論 (共 條)

分享到微博請遵守國家法律
施甸县| 桑日县| 齐齐哈尔市| 北海市| 昭觉县| 万安县| 万盛区| 灵台县| 定陶县| 林芝县| 社会| 东源县| 龙井市| 佛学| 兰坪| 临江市| 绥江县| 增城市| 那曲县| 凭祥市| 阳春市| 保德县| 清原| 丹寨县| 许昌县| 湄潭县| 香港 | 雅安市| 灵山县| 黄山市| 瑞昌市| 谢通门县| 金塔县| 庐江县| 团风县| 灌南县| 通许县| 荔波县| 禄劝| 平远县| 安平县|