游戲服務(wù)器動(dòng)態(tài)伸縮設(shè)計(jì)

一臺(tái)服務(wù)器的承載量是有限的,對(duì)于一個(gè)區(qū)來(lái)說(shuō),平時(shí)可能只需要支持500到1500人左右,這樣一臺(tái)服務(wù)器可能就可以搞定,但是如果有運(yùn)營(yíng)搞活動(dòng),打廣告拉流量,可能一個(gè)區(qū)的承載量需要支持300到6000的量,甚至更多。為了適應(yīng)這樣的不同情況,在游戲服務(wù)器設(shè)計(jì)的時(shí)候,最好能做到服務(wù)器可以動(dòng)態(tài)擴(kuò)展和收縮,可以根據(jù)情況,運(yùn)行不同的服務(wù)器配置。

玩家進(jìn)入游戲之前就要確定進(jìn)入哪個(gè)區(qū),這個(gè)區(qū)在哪個(gè)服務(wù)器上面是由服務(wù)器端分配的。所以需要以下幾張表,來(lái)存儲(chǔ)游戲的區(qū)信息和服務(wù)器信息

1,游戲區(qū)信息表

分區(qū)ID,分區(qū)名字,分區(qū)狀態(tài)(主要是:新區(qū),熱門(mén),活躍,維護(hù)等)

2,游戲區(qū)對(duì)應(yīng)的服務(wù)器表

分區(qū)ID,服務(wù)器Id,服務(wù)器ip,服務(wù)器端口,服務(wù)器狀態(tài)(正常,不可用等),當(dāng)前在線人數(shù)(在分配服務(wù)器做為參考值),權(quán)重值

第二張表是一個(gè)一對(duì)多的關(guān)系,一個(gè)區(qū)對(duì)應(yīng)多個(gè)服務(wù)器地址,當(dāng)用戶選擇某一個(gè)區(qū)之后,向服務(wù)器請(qǐng)求獲取這個(gè)區(qū)所在的服務(wù)器地址。這時(shí),服務(wù)器可能根據(jù)當(dāng)前區(qū)所對(duì)應(yīng)的服務(wù)器的在線人數(shù)或者其它條件,按照一定的算法,給當(dāng)前玩家分配一個(gè)可以連接的服務(wù)器地址,返回它的ip和端口。這樣就可以實(shí)現(xiàn)服務(wù)器的動(dòng)態(tài)擴(kuò)展了,當(dāng)一個(gè)區(qū)需要增加承載量時(shí),只需要給這個(gè)區(qū)增加服務(wù)器數(shù)量即可。當(dāng)流量減少,穩(wěn)定之后,可以減少服務(wù)器數(shù)量。


分配服務(wù)器地址的算法一般有以下幾種:

1,用戶id求余法

假如當(dāng)前一區(qū)對(duì)應(yīng)著6臺(tái)服務(wù)器,當(dāng)用戶選擇一區(qū)時(shí),可以根據(jù)用戶的id和服務(wù)器數(shù)量求余,比如serverIdIndex = userId % 6,serverIndex的值是0到5之間的某個(gè)值。這個(gè)算法可以讓同一臺(tái)用戶使用分配到同一臺(tái)服務(wù)器上面。

2,加權(quán)隨機(jī)法

假如當(dāng)前有一區(qū)對(duì)應(yīng)3臺(tái)服務(wù)器A,B,C,它們有一個(gè)權(quán)重的屬性,A(1),B(3),C(4),可以這樣計(jì)算:

代碼請(qǐng)到此查看,簡(jiǎn)書(shū)的編輯器對(duì)代碼支持太差了:http://www.coc88.com/h-nd-166.html?_np=2_323?

3,輪詢法

這個(gè)是按照請(qǐng)求順序,比如一個(gè)區(qū)對(duì)應(yīng)3臺(tái)服務(wù)器A,B,C,第一個(gè)用戶請(qǐng)求時(shí)分配A,第二個(gè)用戶分配B,第三個(gè)用戶給C,每四個(gè)用戶再給A,如果循環(huán)下去。

4,最小在線人數(shù)

這個(gè)應(yīng)該是最精確的,不過(guò)需要統(tǒng)計(jì)每個(gè)服務(wù)器的在線人數(shù),每次用戶請(qǐng)求分配服務(wù)器時(shí),遍歷服務(wù)器列表,把最小在線人數(shù)的服務(wù)器地址分配給這個(gè)用戶。

如果游戲服務(wù)器沒(méi)有網(wǎng)關(guān),以上方案可以直接使用,如果游戲服務(wù)器有一層網(wǎng)關(guān),需要添加網(wǎng)關(guān)的信息,分配給用戶的連接地址就是網(wǎng)關(guān)的地址,一個(gè)區(qū)可能對(duì)應(yīng)著一個(gè)網(wǎng)關(guān),一個(gè)網(wǎng)關(guān)對(duì)應(yīng)多個(gè)服務(wù)器,確定網(wǎng)關(guān)之后,再確定網(wǎng)關(guān)之后哪個(gè)服務(wù)器處理業(yè)務(wù)消息,需要給客戶端再分配一個(gè)服務(wù)器ID,網(wǎng)關(guān)根據(jù)服務(wù)器的ID轉(zhuǎn)發(fā)客戶端的請(qǐng)求。

在實(shí)際應(yīng)用可,可能會(huì)有更多的條件加入進(jìn)來(lái),以確定用戶連接到哪個(gè)服務(wù)器,比如服務(wù)器是否在維護(hù)狀態(tài),人數(shù)是否過(guò)多等等,所以要根據(jù)實(shí)際情況選擇和設(shè)計(jì)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容