一種經典的網路遊戲伺服器架構

2021-06-02 16:43:55 字數 4222 閱讀 2914

首先,二話不說,上圖(用windows畫圖畫的。。。)

這個圖是乙個區的架構圖,所有區的架構是一樣的。上面虛線框的servergroup和旁邊方框內的架構一樣。圖上的所有x n的伺服器,都是多台一起的。紅線,綠線,和藍線圖上也有圖示,這裡就不多介紹了。關於agent server大家也能看出來,其實就是gate。

這裡主要介紹下圖上的標記了號碼的位置的資料連線的內容和意義。

1-   這是一條webservice的管道,在使用者啟用該區帳號,或者修改帳號密碼的時候,通過這條通道來插入和更新使用者的帳號資訊。

2-   這也是一條webservice管道,用來獲取和控制使用者該該組內的角色資訊,以及進行付費**代幣之類的更新操作。

4-   這也是一條本地tcp/ip連線,這條連線用來對連線到gameserver的客戶端進行驗證,以及獲取角色資料資訊,還有傳回gameserver上角色的資料資訊改變。

5-   這條連線也是一條本地的tcp/ip連線,它用來進行公共資訊伺服器和數個遊戲伺服器間的互動,用來交換一些遊戲世界級的資訊(比如公會資訊,跨服組隊資訊,跨服聊天頻道等)。

6-   這裡的兩條連線,想表達的意思是,userserver和gameserver的agent是可以互換使用的,也就是玩家進入組內之後,就不需要再切換agent。如果不怕亂套,也可以把登陸伺服器的agent也算上,這樣使用者整個過程裡就不需要再更換agent,減少重複連線的次數,也提高了穩定性。(畢竟連線次數少了,也降低了連不上伺服器的出現機率)

在這個架構裡面,gameserver實際上是乙個遊戲邏輯的綜合體,裡面可以再去擴充套件成幾個不同的邏輯伺服器,通過publicserver進行公共資料交換。

userserver實際上扮演了乙個servergroup的領頭羊的角色,它負責向loginserver註冊和更新伺服器組的資訊(名字,當前人數),並且對agent進行排程,對選擇了該組的玩家提供乙個使用者量最少的agent。同時,它也兼了乙個角色管理伺服器的功能,傳送給客戶端當前的角色列表,角色的建立,刪除,選擇等管理操作,都是在這裡進行的。而且,它還是乙個使用者資訊的驗證伺服器,gameserver需要通過它來進行客戶端的合法性驗證,以及獲取玩家選擇的角色資料資訊。

採用這種架構的遊戲,通常有以下表現。

1- 使用者必須啟用乙個大區,才能在大區內登陸自己的帳號。

2- 使用者啟動客戶端的時候,彈出乙個登陸器,選擇大區。

3- 使用者啟動真正的客戶端的時候,一開始就是輸入帳號密碼。

4- 帳號驗證完成之後,進行區內的伺服器選擇。

5- 伺服器選擇完成之後,進入角色管理。同時,角色在不同的伺服器裡不能共享。

市面上符合上面幾個表現特徵的遊戲相當的多,而且也不乏曠世巨作。這個架構不是乙個新的架構,但是它足夠經典和完善,並且邏輯簡單而清晰,用來做mmorpg,或者其它網路遊戲的伺服器架構,是一種不錯的選擇。

#re: 一種經典的網路遊戲伺服器架構 2008-04-16 09:43 alittlewolf

有幾個問題:

(1) public server是否會成為瓶頸呢?

(2) user server壓力會不會過大?

(3) login server是不是也要考慮分布式?

(4) group db是通過何種方式保證效能? 分布式資料庫? 引入**的儲存裝置?

#re: 一種經典的網路遊戲伺服器架構 2008-04-16 09:46 alittlewolf

另外乙個不解的地方是, 為什麼所有server前面都放著agent server? 從安全性方面考慮? 告別game server group前面的agent server group, 望解釋.

#re: 一種經典的網路遊戲伺服器架構 2008-04-16 09:47 alittlewolf

另外乙個不解的地方是, 為什麼所有server前面都放著agent server? 從安全性方面考慮? 特別是game server group前面的agent server group, 望解釋.

#飯中淹

@alittlewolf

(1) 每組承載量,一般是10000人左右。在目前主流伺服器硬體條件下,publicserver為這些人做服務是輕鬆的。

(2) userserver 沒有太大壓力,只是做為乙個驗證平台,角色管理的資源消耗也不大,這個在實際中已經驗證過了。

(3) loginserver 沒什麼必要分布式,雖然一般登陸的壓力比較大,但是對於乙個組來說,登陸驗證都是消耗最小的乙個操作,沒有長期壓力。而且它的硬體條件也是比較好的,所以不用分布式的,那樣會增加整個系統的複雜性。

(4) 一般這種架構下,groupdb和userserver之間會做乙個cache,杜絕頻繁的資料庫讀寫。處於安全性和效能考慮,可以選擇帶有集群功能的資料庫。不過從成本出發,一般是單台的db伺服器,乙個庫搞定。

(5) agent是用來進行使用者過濾,分流和排程的。同時也是出於安全性考慮。另外也是為了降低後台伺服器的壓力。而且用agent可以實現很多比較效率的處理方式。

#hellfire

目前主流的mmo應該都是這種架構,足夠用了。關鍵點在乙個agent,

安全性,負載均衡, 後台服務的遮蔽,都有保障了。 

#re: 一種經典的網路遊戲伺服器架構 2008-08-13 11:43 非風

一些疑問,希望得到博主的解答:

publicserver要完成跨服組隊資訊,跨服聊天頻道功能,那麼它不應該放置在方框中,不能屬於特定的組中,因為它還需要和其他組交換資料。

controlanddatacenter的功能是什麼?是不是它僅僅就是乙個db 中心,全國所有區域伺服器的乙個資料中心,區域伺服器從它拿玩家的帳號資訊?

如果是userserver為什麼要連線它,前面在啟用時候所有資料已經獲取到了areadb中?

areadb僅僅是乙個db它如何通過○1 向controlanddatacenter要資料?

#飯中淹

1- publicserver是組內跨服組隊和聊天,也就是在乙個伺服器名字下面的跨服.這裡跨服是物理服.

2- 控制和資料中心的功能是提供資料推送和資訊收集,以及伺服器狀態控制.

他和userserver進行通訊,是為了進行資料更新,資訊收集和狀態控制,在2的說明裡已經提到了。

3- 這裡面的所有db都不是單純的乙個資料庫,而是一套稱為dbproxy或者dbagent的東西,它有邏輯處理能力。

但是,它不會向資料中心要資料。在我的設計裡,資料中心是請求者,而非被請求者。所有資料更新的發起者都是資料中心,因為所有使用者資訊的修改都在這裡進行。areadb只是被動的接受資料中心的資料更新,而不向資料中心要資料。

#re: 一種經典的網路遊戲伺服器架構 2008-08-15 14:53 非風

@飯中淹

多謝樓主解答,不過還是有一些疑問,我說一下自己對這個架構的理解。

從使用者登入開始,使用者登入連線閘道器,發資料到loginserver校驗賬戶密碼,如果areadb中沒有賬戶資訊,向資料中心要賬戶密碼,插入areadb,以後校驗賬戶就可以直接在區域db中做了,如果賬戶密碼校驗成功,傳送本區的組列表給客戶端,玩家選擇某個伺服器,login獲取生成乙個key發給userserver,同時把key發給客戶端以及乙個閘道器的ip埠,客戶端使用其連線,傳送key到userserver,比對key,非法踢掉客戶端連線,合法userserver向資料中心獲取賬戶詳細資訊,比如賬戶上剩餘點卡等,同時向groupdb獲取本組中的自己的角色,得到這些資訊都發給客戶端,客戶端選擇乙個角色進入遊戲,userserver從資料庫讀取該角色的完全資訊,根據玩家之前的位置確定進入那個gameserver(我認為遊戲伺服器是根據地圖劃分的,不知道對不對?),角色資料傳到gameserver,同時客戶端根據這些資料進入場景,gameserver得到資訊同時告知publicserver(publicserver連db做什麼?我猜測可以獲取工會以及工會成員資訊,對否?)

#飯中淹

@非風是的,差不多的.

不過我不會讓areadb去資料中心請求資料。

我在上面說的是,只有使用者進行啟用,才會把使用者資料放到areadb

而且點卡都是按照area來衝值的。

所有的遊戲需要的資料都在area本地提供,不會向資料中心請求資料。

#re: 一種經典的網路遊戲伺服器架構 2008-08-15 18:13 非風

@飯中淹

明白,官網提供功能,玩家自己到官網啟用,完成資料中心到區域資料的轉移。充值自己選區,資料中心把資料更新到相應的areadb中,這樣避免很多程式問題。

#飯中淹

@非風玩家登入登出,userserver不需要和資料中心交換資料.

資料中心只是查詢和收集伺服器資訊或者個人資訊的時候才需要和userserver進行互動。

玩家的角色資訊都是儲存在groupdb裡面的。

一種經典的網路遊戲伺服器架構

首先,二話不說,上圖 用windows畫圖畫的。這個圖是乙個區的架構圖,所有區的架構是一樣的。上面虛線框的servergroup和旁邊方框內的架構一樣。圖上的所有x n的伺服器,都是多台一起的。紅線,綠線,和藍線圖上也有圖示,這裡就不多介紹了。關於agent server大家也能看出來,其實就是ga...

一種經典的網路遊戲伺服器架構

首先,二話不說,上圖 用windows畫圖畫的。這個圖是乙個區的架構圖,所有區的架構是一樣的。上面虛線框的servergroup和旁邊方框內的架構一樣。圖上的所有x n的伺服器,都是多台一起的。紅線,綠線,和藍線圖上也有圖示,這裡就不多介紹了。關於agent server大家也能看出來,其實就是ga...

伺服器架構 一種經典的網路遊戲伺服器架構

首先,二話不說,上圖 用windows畫圖畫的。這個圖是乙個區的架構圖,所有區的架構是一樣的。上面虛線框的servergroup和旁邊方框內的架構一樣。圖上的所有x n的伺服器,都是多台一起的。紅線,綠線,和藍線圖上也有圖示,這裡就不多介紹了。關於agent server大家也能看出來,其實就是ga...