Mangos源码分析(2):服务器结构探讨之登录服的负载均衡
回想一下我們在玩wow時的操作流程:運行wow.exe進入游戲后,首先就會要求我們輸入用戶名和密碼進行驗證,驗證成功后才會出來游戲世界列表,之后是排隊進入游戲世界,開始游戲...
可以看到跟前面的描述有個很明顯的不同,那就是要先驗證帳號再選擇游戲世界。這種結(jié)構(gòu)也就使得登錄服不是固定配備給個游戲世界,而是全區(qū)共有的。
我們可以試著從實際需求的角度來考慮一下這個問題。正如我們之前所描述過的那樣,登錄服在大多數(shù)情況下都是比較空閑的,也許我們的一個擁有20個游戲世界的大區(qū)僅僅使用10臺或更少的登錄服即可滿足需求。而當(dāng)在開新區(qū)的時候,或許要配備40臺登錄服才能應(yīng)付那如潮水般涌入的玩家登錄請求。所以,登錄服在設(shè)計上應(yīng)該能滿足這種動態(tài)增刪的需求,我們可以在任何時候為大區(qū)增加或減少登錄服的部署。
當(dāng)然,在這里也不會存在要求添加太多登錄服的情況。還是拿開新區(qū)的情況來說,即使新增加登錄服滿足了玩家登錄的請求,游戲世界服的承載能力依然有限,玩家一樣只能在排隊系統(tǒng)中等待,或者是進入到游戲世界中導(dǎo)致大家都卡。
另外,當(dāng)我們在增加或移除登錄服的時候不應(yīng)該需要對游戲世界服有所改動,也不會要求重啟世界服,當(dāng)然也不應(yīng)該要求客戶端有什么更新或者修改,一切都是在背后自動完成。
最后,有關(guān)數(shù)據(jù)持久化的問題也在這里考慮一下。一般來說,使用現(xiàn)有的商業(yè)數(shù)據(jù)庫系統(tǒng)比自己手工技術(shù)先進要明智得多。我們需要持久化的數(shù)據(jù)有玩家的帳號及密碼,玩家創(chuàng)建的角色相關(guān)信息,另外還有一些游戲世界全局共有數(shù)據(jù)也需要持久化。
好了,需求已經(jīng)提出來了,現(xiàn)在來考慮如何將其實現(xiàn)。
對于負載均衡來說,已有了成熟的解決方案。一般最常用,也最簡單部署的應(yīng)該是基于DNS的負載均衡系統(tǒng)了,其通過在DNS中為一個域名配置多個IP地址來實現(xiàn)。最新的DNS服務(wù)已實現(xiàn)了根據(jù)服務(wù)器系統(tǒng)狀態(tài)來實現(xiàn)的動態(tài)負載均衡,也就是實現(xiàn)了真正意義上的負載均衡,這樣也就有效地解決了當(dāng)某臺登錄服當(dāng)機后,DNS服務(wù)器不能立即做出反應(yīng)的問題。當(dāng)然,如果找不到這樣的解決方案,自己從頭打造一個也并不難。而且,通過DNS來實現(xiàn)的負載均衡已經(jīng)包含了所做的修改對登錄服及客戶端的透明。
而對于數(shù)據(jù)庫的應(yīng)用,在這種結(jié)構(gòu)下,登錄服及游戲世界服都會需要連接數(shù)據(jù)庫。從數(shù)據(jù)庫服務(wù)器的部署上來說,可以將帳號和角色數(shù)據(jù)都放在一個中心數(shù)據(jù)庫中,也可分為兩個不同的庫分別來處理,基到從物理上分到兩臺不同的服務(wù)器上去也行。
但是對于不同的游戲世界來說,其角色及游戲內(nèi)數(shù)據(jù)都是互相獨立的,所以一般情況下也就為每個游戲世界單獨配備一臺數(shù)據(jù)庫服務(wù)器,以減輕數(shù)據(jù)庫的壓力。所以,整體的服務(wù)器結(jié)構(gòu)應(yīng)該是一個大區(qū)有一臺帳號數(shù)據(jù)庫服務(wù)器,所有的登錄服都連接到這里。而每個游戲世界都有自己的游戲數(shù)據(jù)庫服務(wù)器,只允許本游戲世界內(nèi)的服務(wù)器連接。
最后,我們的服務(wù)器結(jié)構(gòu)就像這樣:
? 大區(qū)服務(wù)器?????? ?
/?? ?? |?????? \
???? /??????????? |????? \
????? 登錄服1? 登錄服2???? 世界服1?????? 世界服2
\??? ?? |????? ?? |???? ????? |? ?
\? ?? |?????? ?? |??????????????? |
帳號數(shù)據(jù)庫???? DBS????????? DBS
這里既然討論到了大區(qū)及帳號數(shù)據(jù)庫,所以順帶也說一下關(guān)于激活大區(qū)的概念。wow中一共有八個大區(qū),我們想要進入某個大區(qū)游戲之前,必須到官網(wǎng)上激活這個區(qū),這是為什么呢?
一般來說,在各個大區(qū)帳號數(shù)據(jù)庫之上還有一個總的帳號數(shù)據(jù)庫,我們可以稱它為中心數(shù)據(jù)庫。比如我們在官網(wǎng)上注冊了一個帳號,這時帳號數(shù)據(jù)是只保存在中心數(shù)據(jù)庫上的。而當(dāng)我們要到一區(qū)去創(chuàng)建角色開始游戲的時候,在一區(qū)的帳號數(shù)據(jù)庫中并沒有我們的帳號數(shù)據(jù),所以,我們必須先到官網(wǎng)上做一次激活操作。這個激活的過程也就是從中心庫上把我們的帳號數(shù)據(jù)拷貝到所要到的大區(qū)帳號數(shù)據(jù)庫中。
轉(zhuǎn)載于:https://www.cnblogs.com/zhangjing0502/archive/2012/05/25/2518462.html
總結(jié)
以上是生活随笔為你收集整理的Mangos源码分析(2):服务器结构探讨之登录服的负载均衡的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。