龍之穀伺服器構架結構設計實現分析

來源:互聯網
上載者:User

注意:此處純作收藏之用,如有再轉,請按如下方式詳細標明原創作者出處,以示尊重!!

著作權聲明:

[原創]龍之穀伺服器構架結構設計實現分析
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中的情境跳轉而已。

---------------------------------------------------------------------

  其實相比起這個伺服器結構猜測;更應該總結的是遊戲的各種優秀的策劃設定。
抽空另寫一篇總結一下。這遊戲我應該還會繼續玩下去*_*。

---------------------------------------------------------------------

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.