成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oline游戲的服務(wù)器負載均衡之基本分析

網(wǎng)絡(luò) 網(wǎng)絡(luò)優(yōu)化 網(wǎng)絡(luò)運維
文章摘要:本文主要對在線游戲的服務(wù)器負載均衡問題進行了詳細的分析和介紹,主要從靜態(tài)和動態(tài)的兩方面進行分析。

對于網(wǎng)絡(luò)上面很重要的一部分內(nèi)容——在線游戲來說,服務(wù)器的負載均衡是非常非常重要的。數(shù)以萬計的用戶同時在一個平臺上進行游戲,那么數(shù)據(jù)的交換和傳遞,以及每一個用戶的瀏覽速度,游戲質(zhì)量都是有一定標(biāo)準(zhǔn)的。那么,我們就來以QQ的在線游戲為例,說一下這方面的負載均衡問題。

近日在與業(yè)內(nèi)人士討論時,提到QQ游戲的實現(xiàn)方式并不是我原來所想的那樣,于是,今天又認真抓了一下QQ游戲的包,結(jié)果確如這位兄弟所言,QQ 游戲的架構(gòu)與我當(dāng)初所設(shè)想的那個架構(gòu)相差確實不小。下面,我重新給出QQ***在線的技術(shù)實現(xiàn)方案,并以此展開,談?wù)劥笮驮诰€系統(tǒng)中的負載均衡機制的設(shè)計。

從QQ游戲的登錄及游戲過程來看,QQ游戲中,也至少分為三類服務(wù)器。它們是:

***層:登陸/賬號服務(wù)器(Login Server),負責(zé)驗證用戶身份、向客戶端傳送初始信息,從QQ聊天軟件的封包常識來看,這些初始信息可能包括"會話密鑰"此類的信息,以后客戶端與后續(xù)服務(wù)器的通信就使用此會話密鑰進行身份驗證和信息加密;

第二層:大廳服務(wù)器(估且這么叫吧, Game Hall Server),負責(zé)向客戶端傳遞當(dāng)前游戲中的所有房間信息,這些房間信息包括:各房間的連接IP,PORT,各房間的當(dāng)前在線人數(shù),房間名稱等等。

第三層:游戲邏輯服務(wù)器(Game Logic Server),負責(zé)處理房間邏輯及房間內(nèi)的桌子邏輯。

從靜態(tài)的表述來看,以上的三層結(jié)構(gòu)似乎與我以前寫的那篇文章相比并沒有太大的區(qū)別,事實上,重點是它的工作流程,QQ游戲的通信流程與我以前的設(shè)想可謂大相徑庭,其設(shè)計思想和技術(shù)水平確實非常優(yōu)秀。具體來說,QQ游戲的通信過程是這樣的:

1.由Client向Login Server發(fā)送賬號及密碼等登錄消息,Login Server根據(jù)校驗結(jié)果返回相應(yīng)信息。可以設(shè)想的是,如果Login Server通過了Client的驗證,那么它會通知其它Game Hall Server或?qū)⑼ㄟ^驗證的消息以及會話密鑰放在Game Hall Server也可以取到的地方。總之,Login Server與Game Hall Server之間是可以共享這個校驗成功消息的。一旦Client收到了Login Server返回成功校驗的消息后,Login Server會主動斷開與Client的連接,以騰出socket資源。Login Server的IP信息,是存放在QQGame\config\QQSvrInfo.ini里的。

2.Client收到Login Server的校驗成功等消息后,開始根據(jù)事先選定的游戲大廳入口登錄游戲大廳,各個游戲大廳Game Hall Server的IP及Port信息,是存放在QQGame\Dirconfig.ini里的。Game Hall Server收到客戶端Client的登錄消息后,會根據(jù)一定的策略決定是否接受Client的登錄,如果當(dāng)前的Game Hall Server已經(jīng)到了上限或暫時不能處理當(dāng)前玩家登錄消息,則由Game Hall Server發(fā)消息給Client,以讓Client重定向到另外的Game Hall Server登錄。重定向的IP及端口信息,本地沒有保存,是通過數(shù)據(jù)包或一定的算法得到的。如果當(dāng)前的Game Hall Server接受了該玩家的登錄消息后,會向該Client發(fā)送房間目錄信息,這些信息的內(nèi)容我上面已經(jīng)提到。目錄等消息發(fā)送完畢后,Game Hall Server即斷開與Client的連接,以騰出socket資源。在此后的時間里,Client每隔30分鐘會重新連接Game Hall Server并向其索要***的房間目錄信息及在線人數(shù)信息。

3.Client根據(jù)列出的房間列表,選擇某個房間進入游戲。根據(jù)我的抓包結(jié)果分析,QQ游戲,并不是給每一個游戲房間都分配了一個單獨的端口進行處理。在QQ游戲里,有很多房間是共用的同一個IP和同一個端口。比如,在斗地主一區(qū),前50個房間,用的都是同一個IP和Port信息。這意味著,這些房間,在QQ游戲的服務(wù)器上,事實上,可能是同一個程序在處理!!!QQ游戲房間的人數(shù)上限是400人,不難推算,QQ游戲單個服務(wù)器程序的用戶承載量是2萬,即QQ的一個游戲邏輯服務(wù)器程序最多可同時與2萬個玩家保持TCP連接并保證游戲效率和品質(zhì),更重要的是,這樣可以為騰訊省多少money 呀!!!哇哦!QQ確實很牛。以2萬的在線數(shù)還能保持這么好的游戲品質(zhì),確實不容易!QQ游戲的單個服務(wù)器程序,管理的不再只是邏輯意義上的單個房間,而可能是許多邏輯意義上的房間。其實,對于服務(wù)器而言,它就是一個大區(qū)服務(wù)器或大區(qū)服務(wù)器的一部分,我們可以把它理解為一個龐大的游戲地圖,它實現(xiàn)的也是分塊處理。而對于每一張桌子上的打牌邏輯,則是有一個統(tǒng)一的處理流程,50個房間的50*100張桌子全由這一個服務(wù)器程序進行處理(我不知道QQ游戲的具體打牌邏輯是如何設(shè)計的,我想很有可能也是分區(qū)域的,分塊的)。當(dāng)然,以上這些只是服務(wù)器作的事,針對于客戶端而言,客戶端只是在表現(xiàn)上,將一個個房間單獨羅列了出來,這樣作,是為便于玩家進行游戲以及減少服務(wù)器的開銷,把這個大區(qū)中的每400人放在一個集合內(nèi)進行處理(比如聊天信息,"向400人廣播"和"向2萬人廣播",這是完全不同的兩個概念,那么具體的負載均衡問題我們也會分開來談)。

4.需要特別說明的一點。進入QQ游戲房間后,直到點擊某個位置坐下打開另一個程序界面,客戶端的程序,沒有再創(chuàng)建新的socket,而仍然使用原來大廳房間客戶端跟游戲邏輯服務(wù)器交互用的socket。也就是說,這是兩個進程共用的同一個socket!不要小看這一點。如果你在創(chuàng)建桌子客戶端程序后又新建了一個新的socket與游戲邏輯服務(wù)器進行通信,那么由此帶來的玩家進入、退出、逃跑等消息會帶來非常麻煩的數(shù)據(jù)同步問題,俺在剛開始的時候就深受其害。而一旦共用了同一個socket后,你如果退出桌子,服務(wù)器不涉及釋放socket的問題,所以,這里就少了很多的數(shù)據(jù)同步問題。關(guān)于多個進程如何共享同一個socket的問題,請去google以下內(nèi)容:WSADuplicateSocket。

以上便是我根據(jù)***的QQ游戲抓包結(jié)果分析得到的QQ游戲的通信流程,當(dāng)然,這個流程更多的是客戶端如何與服務(wù)器之間交互的,卻沒有涉及到服務(wù)器彼此之間是如何通信和作數(shù)據(jù)同步的。關(guān)于服務(wù)器之間的通信流程,我們只能基于自己的經(jīng)驗和猜想,得出以下想法:

1.Login Server與Game Hall Server之前的通信問題。Login Server是負責(zé)用戶驗證的,一旦驗證通過之后,它要設(shè)法讓Game Hall Server知道這個消息。它們之前實現(xiàn)信息交流的途徑,我想可能有這樣幾條:a. Login Server將通過驗證的用戶存放到臨時數(shù)據(jù)庫中;b. Login Server將驗證通過的用戶存放在內(nèi)存中,當(dāng)然,這個信息,應(yīng)該是全局可訪問的,就是說所有QQ的Game Hall Server都可以通過服務(wù)器之間的數(shù)據(jù)包通信去獲得這樣的信息。

2.Game Hall Server的***房間目錄信息的取得。這個信息,是全局的,也就是整個游戲中,只保留一個目錄。它的信息來源,可以由底層的房間服務(wù)器逐級報上來,報給誰?我認為就如保存的全局登錄列表一樣,它報給保存全局登錄列表的那個服務(wù)器或數(shù)據(jù)庫。

3.在QQ游戲中,同一類型的游戲,無法打開兩上以上的游戲房間。這個信息的判定,可以根據(jù)全局信息來判定。

以上關(guān)于服務(wù)器之間如何通信的內(nèi)容,均屬于個人猜想,QQ到底怎么作的,恐怕只有等大家中的某一位進了騰訊之后才知道了。呵呵。不過,有一點是可以肯定的,在整個服務(wù)器架構(gòu)中,應(yīng)該有一個地方是專門保存了全局的登錄玩家列表,只有這樣才能保證玩家不會重復(fù)登錄以及進入多個相同類型的房間。

在前面的描述中,我曾經(jīng)提到過一個問題:當(dāng)?shù)卿洰?dāng)前Game Hall Server不成功時,QQ游戲服務(wù)器會選擇讓客戶端重定向到另位的服務(wù)器去登錄,事實上,QQ聊天服務(wù)器和MSN服務(wù)器的登錄也是類似的,它也存在登錄重定向問題。

那么,這就引出了另外的問題,由誰來作這個策略選擇?以及由誰來提供這樣的選擇資源?這樣的處理,便是負責(zé)負載均衡的服務(wù)器的處理范圍了。由 QQ游戲的通信過程分析派生出來的針對負責(zé)均衡及***在線系統(tǒng)的更進一步討論,將在下篇文章中繼續(xù)。

責(zé)任編輯:佟健 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-05-07 12:15:49

服務(wù)器負載均衡

2010-04-26 11:51:01

服務(wù)器負載均衡

2010-04-20 11:29:28

服務(wù)器負載均衡

2010-05-10 14:02:53

服務(wù)器負載均衡

2010-05-05 18:44:27

服務(wù)器負載均衡

2010-05-05 18:28:16

負載均衡服務(wù)器

2010-04-30 09:40:41

2010-04-22 23:07:47

服務(wù)器負載均衡

2010-04-26 17:41:29

服務(wù)器負載均衡

2009-07-22 10:25:37

2010-05-06 14:15:02

流媒體服務(wù)器負載均衡

2009-01-10 18:53:01

服務(wù)器ServerDNS

2013-12-26 10:28:11

云服務(wù)器物理服務(wù)器

2013-12-27 09:49:51

云服務(wù)器物理服務(wù)器

2010-04-26 09:58:10

服務(wù)器負載均衡

2010-05-05 22:40:21

apache服務(wù)器負載均衡

2010-04-25 19:24:58

服務(wù)器負載均衡

2010-06-29 11:21:58

Web服務(wù)器

2011-11-22 21:26:59

pfSense配置Web服務(wù)器負載均衡

2010-04-20 17:12:57

服務(wù)器負載均衡
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91久久久久久久 | 99精品一区二区 | 欧美一页 | 亚洲一区欧美 | 欧美另类视频 | 日韩精品一区二区三区久久 | 欧美三级在线 | 一区在线视频 | 一区二区三区在线观看免费视频 | 日韩精品一区二区三区视频播放 | 中文字幕一区二区三区不卡在线 | 犬夜叉在线观看 | 欧美一卡二卡在线观看 | 日本高清视频在线播放 | 日韩欧美网 | 国产亚洲精品久久午夜玫瑰园 | 一区二区三区成人 | 中文字幕 欧美 日韩 | 97av视频在线 | 国产精品久久网 | 久久亚洲一区 | 99久久精品国产毛片 | 伊人伊成久久人综合网站 | 久久久精品一区二区三区 | 国产精品久久国产精品久久 | 韩国主播午夜大尺度福利 | 成人看片在线观看 | 国产二区精品视频 | 伊人精品久久久久77777 | 夏同学福利网 | 亚洲精品乱码 | 国产熟熟| 午夜寂寞影院在线观看 | 日韩视频在线播放 | 亚洲激情一区二区三区 | 99视频在线免费观看 | 成人超碰在线 | 欧美中文字幕在线观看 | 亚洲精品久久久久久久久久吃药 | 亚洲精品国产a久久久久久 午夜影院网站 | 欧美成人精品 |