• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            [轉(zhuǎn)貼]關(guān)于游戲服務(wù)器的架構(gòu)

            今天開始寫些技術(shù)的題材,一方面記錄一些自己的本分工作的東西,另外一方面也是充實一下BLOG,工作太忙也沒有什么太多的思緒來一直寫其他的題材,所以就拿工作來填充了.同時如果有人有幸看到了這些文章,并且也有興趣的話也希望多多探討.

            先簡單介紹一下,由于本人的工作就是游戲開發(fā)公司的,一直與游戲開發(fā)打交道,主要做休閑類的游戲,目前又以棋牌游戲為主,在這個行業(yè)中摸爬滾打了整3年了,從運營開始做起,運營過當(dāng)時國內(nèi)一流的游戲平臺中游系列的產(chǎn)品,然后由于合作方面的原因又自主開發(fā)過一套游戲平臺,然后由于發(fā)展方向上的分歧出來單獨做,目前在開發(fā)并運維一套全新的產(chǎn)品.

            這篇主要是對于游戲服務(wù)器的一些想法,結(jié)合目前自身的產(chǎn)品的一些問題延伸開來的.

            目前我們的服務(wù)器還是屬于Windows平臺的架構(gòu),暫時還沒有考慮到跨平臺,主要原因有2:
            1.成本:作為公司來說首先得考慮的就是成本了,雖然說Linux類的平臺存在著操作系統(tǒng)成本低廉,性能優(yōu)異,穩(wěn)定性高這幾個特色,但是作為全局考慮來說,一個Linux的系統(tǒng)管理員,以及開發(fā)人員的成本要比Windows平臺要高很多,并且作為操作系統(tǒng)方面是免費的,但是支持幾乎是沒有的只有一些不適合商業(yè)應(yīng)用的開源社區(qū)作為支撐,要得到更加好的服務(wù)或者額外的支持還是得通過大廠商的高額的產(chǎn)品或服務(wù)來實現(xiàn),而Windows平臺則不同,雖然操作系統(tǒng)貌似價格不扉,但是本身就帶了很多的模塊,比如組件服務(wù),日志服務(wù)等等,加上平臺上各種軟件的數(shù)量也和Linux下的不是同一量級的,可選擇性要大的多,而讓Linuxer所詬病的Win32的安全性其實完全可以通過另外獨立的安全模塊,如硬件防火墻等來完善,畢竟操作系統(tǒng)不是專門做安全防護(hù)的Linux也存在很多的漏洞,并且隨著Linux發(fā)行版的日益增多,用戶的逐漸了解,漏洞也日益的增多.
            2.開發(fā)效率.無疑Visual Studio系列開發(fā)套件是目前開發(fā)領(lǐng)域最方便最強(qiáng)大的IDE環(huán)境,這已是不爭的事實,而如果用VI + GCC的模式去開發(fā)LINUX下面的服務(wù)器其效率和質(zhì)量至少從我目前的水平(可以部分代表國內(nèi)目前中小游戲軟件開發(fā)商實際現(xiàn)狀)要徹底的領(lǐng)悟并轉(zhuǎn)換需要一定的時間,并且還沒有成熟的開發(fā)平臺作為保證, JAVA好象有 但是C++還沒有聽說有超過VC++的.
            ?


            作為游戲服務(wù)器的結(jié)構(gòu)方面(以下只討論休閑游戲部分,MMORPG服務(wù)器不屬于討論范圍)的設(shè)計已經(jīng)相對于成熟并且統(tǒng)一,結(jié)構(gòu)方面和3年前我所接觸的中游系的那套平臺沒有太大的差異,無非是服務(wù)器群采用星狀的結(jié)構(gòu),以1個中心節(jié)點作為核心,然后向四周擴(kuò)散出一些應(yīng)用服務(wù)器,如負(fù)責(zé)登陸的LoginServer,負(fù)責(zé)具體游戲邏輯的GameServer等等,當(dāng)然最精簡的結(jié)構(gòu)是這樣的,這樣的結(jié)構(gòu)可以滿足50萬以下同時在線的容量,如果為了滿足更大的容量,如QQGAME這樣的目前已經(jīng)有200萬以上同時在線的超大容量的應(yīng)用則需要額外的優(yōu)化,從這個結(jié)構(gòu)中分離出一些子應(yīng)用獨立開發(fā)出一些服務(wù)器端來處理,一方面降低偶合度,另外一方面作為高可用性系統(tǒng)為負(fù)載均衡提供條件.

            關(guān)于負(fù)載均衡,作為整個游戲平臺的所有服務(wù)器.我覺得除了具體的游戲邏輯服務(wù)器以外都是可以采用負(fù)載均衡,多點分擔(dān)的方式來處理,惟獨邏輯服務(wù)器不可以,因為休閑游戲,都是分層次的,不管泡泡堂也好,QQGAME也好這些游戲其實在客戶端的表現(xiàn)形式都是分層次的,如QQGAME就是LOBBY-HALL-ROOM這樣的結(jié)構(gòu),LOBBY這層就是游戲廣場了,可以看到所有的游戲類別,游戲服務(wù)器和具體的游戲大廳,比如:牌類–斗地主–新手場–新手場1 這樣的順序,傳統(tǒng)的設(shè)計中新手場1就是屬于一個獨立的游戲邏輯服務(wù)器擁有一個獨立的IP以及偵聽端口,在服務(wù)器端通常也是一個獨立的進(jìn)程.一般的游戲服務(wù)器允許的連接數(shù)通常都是300-600人之間超過的就提示服務(wù)器已滿了,這樣做的原因并不是因為進(jìn)程的限制因為一個進(jìn)程完全可以做到同時讓3000以上的玩家同時游戲,而是人為設(shè)計的考慮,因為在游戲邏輯服務(wù)器中有很多需要廣播的消息,如游戲玩家的聊天信息,某個房間的開始信息,結(jié)束信息,某人進(jìn)出的信息等,而對于廣播來說,給300個人廣播和給3000個人廣播所消耗的資源是絕對沒有可比性的。但是通過從進(jìn)程上獨立來處理這個傳統(tǒng)的方式也有個缺陷,比如通過開10個進(jìn)程來達(dá)到3000人和1個進(jìn)程達(dá)到3000人,如果不考慮廣播的因素在內(nèi)的話前者的資源是要高與后者的資源的,并且進(jìn)程間的通訊也要比進(jìn)程內(nèi)的通訊要耗費資源和復(fù)雜度方面要高很多,比如說如果要實現(xiàn)一個需求讓玩家可以在同一類游戲中可以使用小喇叭類或者跨游戲服務(wù)器找人之類的功能的話,同一個進(jìn)程的優(yōu)勢就顯示出來了,為此QQGAME所使用的是Channel(頻道)的概念,即一個游戲邏輯服務(wù)器的進(jìn)程可以容納5000人左右,然后服務(wù)器端通過設(shè)置分割出很多的Channel如新手1,新手2,新手3之類的傳統(tǒng)意義上的游戲大廳,將消息的分發(fā)范圍進(jìn)行隔離,節(jié)約了資源。這一點可以通過查看連接屬性看到,連接QQGAME的同類型靠近的幾個游戲大廳其實端口和IP都是一致的。

            我們目前的游戲服務(wù)器類型主要有3類:CenterServer,管理著所有的服務(wù)器連接,LoginServer 負(fù)責(zé)處理用戶的登陸、注冊,并且用來給用戶傳遞游戲邏輯服務(wù)器列表等功能, GameServer具體邏輯服務(wù)器,根據(jù)不同的邏輯來實現(xiàn)不同的游戲需求。

            當(dāng)然,根據(jù)業(yè)務(wù)的發(fā)展需要,我們正準(zhǔn)備把用戶的狀態(tài)在服務(wù)器端保存,并且增加一個類似IM服務(wù)器的功能來滿足玩家跨服務(wù)器聊天和查詢其他玩家狀態(tài)的需要。以及GM服務(wù)器實現(xiàn)多功能的網(wǎng)管室的需求,這些將在以后慢慢寫。



            說起高性能的網(wǎng)絡(luò)游戲,有2個典范,1個是暴雪的WOW,另外一個要數(shù)騰訊的QQGame了,因為對于MMPRPG的體系接觸不深,幾乎屬于文盲,沒有太多的發(fā)言權(quán),而自己又是搞休閑游戲開發(fā)的所以本文就主要談?wù)凲QGame了。

            前些天通過朋友得到了QQGame的一個系統(tǒng)分析的文檔,看完后很是震驚,徹底被QQ的設(shè)計所折服了,到底是千萬人在線系統(tǒng)經(jīng)驗的擁有者,牛!

            通過資料了解到QQGame目前有以下讓我欣賞的特性:

            1. 單機(jī)最高容納35,000人同時在線,對沒有看錯是這么多,由于它適用了Linux下高性能的網(wǎng)絡(luò)處理模型ePoll技術(shù),并且一系列高超的優(yōu)化技術(shù)輕松破萬人,當(dāng)然為了穩(wěn)定性考慮單機(jī)保持了2萬人的容量,此時的帶寬消耗為近30M;
            2. 采用共享內(nèi)存方式高速完成進(jìn)程間高速通訊;
            3. 服務(wù)器的擴(kuò)充方式不是平面的方式,而是裂變式的擴(kuò)充方式,形成負(fù)載均衡陣列樹狀結(jié)構(gòu);
            4. 所有的游戲服務(wù)器不是直接和數(shù)據(jù)庫聯(lián)系,而是和數(shù)據(jù)proxy(qq管叫數(shù)據(jù)交換機(jī)和路由器)進(jìn)行聯(lián)系,由此帶來的就是游戲用戶數(shù)據(jù)的分布存儲,我分析著應(yīng)該是proxy上記錄著這個用戶數(shù)據(jù)所在的實際的dbserver的信息,然后定時的將最新的用戶信息寫回到db中去,這樣就大大緩解了數(shù)據(jù)庫服務(wù)器的壓力,而且可以非常平滑的將數(shù)據(jù)分裂開來,數(shù)據(jù)庫服務(wù)器也就可以無限的擴(kuò)充,當(dāng)然我覺得肯定有個數(shù)據(jù)庫信息索引了用戶的id和對應(yīng)的存儲地點的關(guān)聯(lián)關(guān)系,這點就類似于google的原理了,所以對于數(shù)據(jù)庫的硬件要求也就不是那么高了,qqgame的一組服務(wù)器通常是7臺服務(wù)器,可以容納5萬人,其中就包含了數(shù)據(jù)庫服務(wù)器,這點就不是棋牌游戲所常使用的數(shù)據(jù)集中存儲了;
            5. 游戲服務(wù)器的網(wǎng)絡(luò)和邏輯分開,不僅僅是層次上的分開,而是在進(jìn)程上分開,然后中間通過共享通道進(jìn)行管理和協(xié)調(diào),并且增加了輔助線程,在主線程處理大壓力的異步的操作的時候直接交給輔助線程處理,保障了游戲服務(wù)器的高效性運轉(zhuǎn)。

            未完待續(xù)



            轉(zhuǎn)自http://liubaishui.com/category/gamedev/

            posted on 2006-04-15 21:12 楊粼波 閱讀(746) 評論(1)  編輯 收藏 引用

            評論

            # re: [轉(zhuǎn)貼]關(guān)于游戲服務(wù)器的架構(gòu) 2008-10-07 22:41 phpman

            兄弟! 你自己最后的貼的說QQ用的是Linux的epoll如何如何,怎么還打開頭就說將Linux系統(tǒng)排除在外呢?

            我也算是游戲行業(yè)的了,據(jù)我所知,除非是不想搞大,否則現(xiàn)在還有誰拿Windows做游戲服務(wù)器?
              回復(fù)  更多評論   


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            99久久综合狠狠综合久久| 亚洲国产精品无码久久青草 | 久久久国产精品福利免费| 婷婷国产天堂久久综合五月| 国产成人香蕉久久久久| 色99久久久久高潮综合影院| 亚洲成人精品久久| 久久99国产精品二区不卡| 久久久久久久97| 狠狠色丁香婷婷久久综合五月| 亚洲国产综合久久天堂| 99久久精品午夜一区二区| 久久久久久无码Av成人影院| 久久国产精品一国产精品金尊| 狠狠色综合网站久久久久久久| 久久乐国产精品亚洲综合| 久久五月精品中文字幕| 成人国内精品久久久久影院| 青青青青久久精品国产h| 久久国产免费直播| 久久久久无码精品国产app| 欧美精品福利视频一区二区三区久久久精品 | 国产精品美女久久久久久2018| 亚洲а∨天堂久久精品9966| 99久久亚洲综合精品成人| 2021少妇久久久久久久久久| 欧美黑人又粗又大久久久 | 久久成人18免费网站| 99re久久精品国产首页2020| 精品久久久久久久久免费影院| 国产—久久香蕉国产线看观看 | 亚洲国产高清精品线久久 | 1000部精品久久久久久久久| 国内精品久久久久影院薰衣草 | 精品久久久久久亚洲| 色综合久久久久久久久五月| 国产亚洲精品美女久久久| 99久久无色码中文字幕人妻| 欧美精品国产综合久久| 亚洲国产精品狼友中文久久久| 无夜精品久久久久久|