注意:此處純作收藏之用,如有再轉,請按如下方式詳細標明原創作者出處,以示尊重!!
著作權聲明:
[原創]龍之穀伺服器構架結構設計實現分析
by AKara 2010-07-24 @ http://blog.csdn.net/akara @ akaras@163.com
---------------------------------------------------------------------
由於朋友介紹,周末陸續玩了兩天 龍之穀(http://dn.sdo.com)。
如果一個網路動作遊戲可以打10分,那截止現在,我至少給它9分左右的高分。
無論從手感,動作技能設計,網路流暢度,情境風格,角色塑造,玩法設定,
新手引導,MM親和度等方面來看,均屬上乘之作。
強烈推薦喜歡玩動作類網遊的朋友嘗試一下。當作3D版的,更好玩的 DNF 吧。
我選了[華南電信二區] -> [3服-烈焰風暴]。角色名稱 AKara ,歡迎來組。
看來盛大又代理了一個能賺大錢的寵兒。
好的遊戲,不妨玩的過程順便猜測一下它的實現。
---------------------------------------------------------------------
從7月22日11點到7月24日晚,遊戲開了22個大區(電信16個,網通6個,教育網0),
每個大區分為4個獨立的資料服分區,玩家資料在這4個服內不能互連。
見 http://dn.sdo.com/web7/home/serverstat.asp
【下面的分析都針對我選的大區來進行】
dnlauncher.exe是選區和patch下載器,選定大區後,其他動作都在主進程。
DragonNest.exe是主進程,由dnlauncher.exe建立。
貌似龍之穀client指令碼用Lua?
主進程中的服列表是每次登陸都隨機排序,而每個服下的頻道列表也是隨機
排序。這個隨機應該是client對http下載回來的tree內容的client端隨機打亂,
這設定一定程度上分流了第一次選服的玩家(但對已有角色的使用者來說,不方便);
也分流了每次進服後選頻道的玩家(因為各頻道共用角色資料,所以是等價的)。
---------------------------------------------------------------------
先貼一下我初步猜測中的龍之穀的伺服器部署結構圖:
然後下面是對這個猜測的一些分析過程的資料。
希望同對這方面感興趣的朋友也提供一些糾正或想法~
---------------------------------------------------------------------
在 [進程開始->進入channel(的主城)->進入戰鬥副本->返回主城 ]
這四個遊戲中經常經曆的階段中,可以觀察到進程中的網路連接的變化:
(1)進程開始
tcp 串連一條,這裡先稱遠端進程為gate。
gate負責帳號驗證,大區下的伺服器組選擇,建立新角色,選擇角色等功能。
實驗多次,發現gate至少存在存在下面的6個。可看到每個伺服器部署兩個gate。
119.147.185.98:14300
119.147.185.98:14301
119.147.185.85:14300
119.147.185.85:14301
119.147.185.86:14300
119.147.185.86:14301
http串連多條,估計用於下載分服資訊的tree。
(2)進入channel(的主城)
此時client與gate的串連斷開。
並建立tcp新串連一條,這裡先稱遠端進程為channel。
經實驗,1~9級的普雷利鎮被劃分為下面20個line(不用channel來命名,避免混淆)來分流:
(A)
line_1:119.147.185.71:14401
line_2:119.147.185.71:14401
(B)
line_3:119.147.185.71:14402
(C)
line_4:119.147.185.71:14403
line_5:119.147.185.71:14403
line_6:119.147.185.71:14403
(D)
line_7:119.147.185.71:14404
line_8:119.147.185.71:14404
line_9:119.147.185.71:14404
(E)
line_10:119.147.185.72:14401
line_11:119.147.185.72:14401
(F)
line_12:119.147.185.72:14402
line_13:119.147.185.72:14402
line_14:119.147.185.72:14402
(I)
line_15:119.147.185.72:14403
line_16:119.147.185.72:14403
line_17:119.147.185.72:14403
(J)
line_18:119.147.185.72:14404
line_19:119.147.185.72:14404
line_20:119.147.185.72:14404
而9~16級的凱德拉關卡現在則只有12個line來服務它:
(B)
line_1:119.147.185.71:14402
(C)
line_2:119.147.185.71:14403
line_3:119.147.185.71:14403
(D)
line_4:119.147.185.71:14404
(E)
line_5:119.147.185.72:14401
line_6:119.147.185.72:14401
(F)
line_7:119.147.185.72:14402
line_8:119.147.185.72:14402
(I)
line_9: 119.147.185.72:14403
line_10:119.147.185.72:14403
(J)
line_11:119.147.185.72:14404
line_12:119.147.185.72:14404
選擇競技場channel則有12個line:
(B)
line_2:119.147.185.71:14402
line_2:119.147.185.71:14402
(C)
line_3:119.147.185.71:14403
line_4:119.147.185.71:14403
(D)
line_5:119.147.185.71:14404
line_6:119.147.185.71:14404
(F)
line_7:119.147.185.72:14402
line_8:119.147.185.72:14402
(I)
line_9:119.147.185.72:14403
line_10:119.147.185.72:14403
(J)
line_11:119.147.185.72:14404
line_12:119.147.185.72:14404
總結一下上面的line和channel資訊,
可以大致看出,龍之穀一台伺服器上一般部署了4個左右channel進程,
而每個channel進程合并了5~7個左右的line邏輯。
目測估計每個line邏輯承載的人數不應該超過500,就算它300吧。
PS:單進程超過2100人的7分割情境線上(一台伺服器就2100*4=8k人)。
由於進階line的人數不滿,競技場的人數不多,
安照上面的配比,就算每個line承載1/2負荷,即150人。
那可以粗略保守估算一下龍之穀現在的最高線上人數:
22大區 * 4小服 * 32個line * 150人/line = 42w
也就是每個大區有約1.9w玩家線上。
(3)進入戰鬥副本
此時client與channel的串連斷開。
並建立tcp新串連一條,這裡先稱遠端進程為war。
經實驗,war並不多:
119.147.185.70:14500
119.147.185.63:14500
119.147.185.64:14500
119.147.185.65:14500
119.147.185.69:14500
如此看來,一個小服內只有5台機器服務它的戰鬥。
用上面的估算人數來粗略平均一下,就是平均每個war進程負荷1000人的副本戰鬥。
如果是組隊進入戰鬥副本,則開始P2P的通訊:
龍之穀只允許最多4個人的組隊,P2P網路可能只用於動作同步。
留意了一下這個UDP通道的通訊量:
兩次2人組隊關卡:
858k/12min(平均1220byte/sec)
877k/10min(平均1496byte/sec)
一次4人組隊關卡:
706k/6min(平均2008byte/sec)
而如果是單人進入戰鬥副本,則完全只和war進程有tcp網路通訊:
怪物AI完全是伺服器驅動的。
玩一個關卡大概8分鐘,因為跑地圖花去時間,加上過地圖的載入。
下行 100k(平均213byte/sec), 上行90k(平均192byte/sec)。
(4)返回主城
此時client與war的串連斷開。
重新與某個channel建立串連。
這裡的"某個"其實就是之前(1)階段中的那個channel。
有一個假象就是:AKara角色 從 1~9級的普雷利鎮 經過副本到底 9~16級的凱德拉關卡 後,
會發現client中的line竟然 從12號 變成了 7號。
但參照上面的channel ip:port便能發現這兩line屬於同一個channel進程:
普雷利鎮 line_12:119.147.185.72:14402
凱德拉關卡 line_7: 119.147.185.72:14402
PS:
龍之穀的同一個channel進程中的line之間的切換,是不需要斷串連的。
但是,不在同一個channel進程中的line之間的切換,是斷舊連新的。
這樣歸併多個line實現到一個channel進程的好處是,這幾個line之間可以進行
某些形式的互動,比如組隊:和同channel其他line的玩家組隊,會即時跳轉line。
本質上相當於MMORPG中的情境跳轉而已。
---------------------------------------------------------------------
其實相比起這個伺服器結構猜測;更應該總結的是遊戲的各種優秀的策劃設定。
抽空另寫一篇總結一下。這遊戲我應該還會繼續玩下去*_*。
---------------------------------------------------------------------