日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

网游服务器架构变迁

發(fā)布時(shí)間:2024/3/12 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网游服务器架构变迁 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、早期網(wǎng)游服務(wù)器
網(wǎng)游剛出現(xiàn)的時(shí)候,游戲服務(wù)器和小Web服務(wù)器沒(méi)有區(qū)別。
從《傳奇》的時(shí)代開(kāi)始,游戲服務(wù)器內(nèi)部就出現(xiàn)了游戲邏輯,既能用于同步每個(gè)玩家看到的世界,又能讓邏輯與客戶(hù)端分離,避免早期的網(wǎng)絡(luò)游戲那種毫無(wú)防范的邏輯體系(對(duì)外掛防御能力為0)。

這種服務(wù)器在客戶(hù)端通過(guò)某種形式驗(yàn)證登陸以后,就和服務(wù)器通過(guò)TCP直接連接了。這種服務(wù)器的承載能力不高。 靠多開(kāi)服務(wù)器來(lái)彌補(bǔ)單服人數(shù)不足的問(wèn)題 。

二、早期游戲服務(wù)器的改進(jìn)版本

游戲邏輯服務(wù)依舊是在一臺(tái)服務(wù)器上,單進(jìn)程(邏輯處理本身肯定是在一個(gè)線程中,可以有子線程負(fù)責(zé)內(nèi)網(wǎng)通信)。但是我們自然地想到,儲(chǔ)存負(fù)載和網(wǎng)絡(luò)負(fù)載可以從邏輯服務(wù)器上拆出來(lái)。

連接服務(wù)器負(fù)責(zé)把客戶(hù)端和服務(wù)器之間的消息轉(zhuǎn)化為服務(wù)器的消息,可以順便做一下加密的工作。
由于連接服務(wù)器本身沒(méi)有時(shí)序性,很容易做分布式的(其實(shí)大部分游戲還是只有一個(gè)連接服),存儲(chǔ)服務(wù)不要求高實(shí)時(shí)性,高峰期存盤(pán)間隔可以稍長(zhǎng)一些,不會(huì)對(duì)游戲服造成影響。

三、成熟形態(tài)的服務(wù)器框架
邏輯服務(wù)器的負(fù)載均攤方法一:按照功能劃分多個(gè)服務(wù)器進(jìn)程

邏輯服務(wù)器的負(fù)載均攤方法二:按照?qǐng)鼍皠澐侄鄠€(gè)服務(wù)器進(jìn)程

這種服務(wù)器的難點(diǎn)就在邏輯的設(shè)計(jì)上,要想做手術(shù)一樣把本來(lái)一體的功能切開(kāi),并抽象出若干個(gè)API來(lái)保持聯(lián)系(服務(wù)器之間是TCP連接)。 在分解時(shí),要找聯(lián)系相對(duì)最薄弱的環(huán)節(jié)入手比如 場(chǎng)景和場(chǎng)景之間分開(kāi)、單獨(dú)抽出聊天服務(wù)、組隊(duì)服務(wù)、好友服務(wù)。 無(wú)論如何分解,最終結(jié)果只能是有限個(gè)服務(wù)。而且分解的越細(xì),開(kāi)發(fā)難度越大。因?yàn)榭绶?wù)器邏輯時(shí)把簡(jiǎn)單的同步邏輯編程異步Callback邏輯,而且容易出現(xiàn)時(shí)序問(wèn)題等不易測(cè)試的問(wèn)題。單個(gè)場(chǎng)景在服務(wù)幾乎是無(wú)法分解的。分解單個(gè)場(chǎng)景難度巨大以至于出現(xiàn)BigWorld引擎來(lái)專(zhuān)門(mén)解決場(chǎng)景分隔問(wèn)題。

附:開(kāi)房間式的網(wǎng)絡(luò)游戲

開(kāi)房間式的網(wǎng)絡(luò)游戲是游戲的重要分支,moba和卡牌類(lèi)游戲都屬于這種形式。 這些游戲房間內(nèi)幾乎沒(méi)有交互,只有大廳內(nèi)有交互,可以理解為原始形態(tài)的游戲服務(wù)器的平行拓展。 房間式游戲擴(kuò)展難度較小,只是需要根據(jù)玩家數(shù)量動(dòng)態(tài)擴(kuò)展游戲房間的數(shù)量、服務(wù)數(shù)量。很像網(wǎng)站的架構(gòu)。

小結(jié):游戲服務(wù)器框架特點(diǎn)
1.真正的數(shù)據(jù)都在內(nèi)存中,數(shù)據(jù)庫(kù)性能不那么重要(注:很多大型游戲采用了共享內(nèi)存,避免宕機(jī)時(shí)損失過(guò)大)

2.單CPU性能比CUP數(shù)量重要得多3.目前有很多游戲,特別是手游,使用Redis讀寫(xiě)代替內(nèi)存讀寫(xiě),甚至也有用Mongo的。4.開(kāi)新服、舊區(qū)合服的情況特別適合云平臺(tái)。

四、先進(jìn)服務(wù)器框架
? BigWorld
BigWorld的核心理念時(shí)場(chǎng)景分割,利用平面切分的原理,將場(chǎng)景劃分為小塊,不同的塊可以運(yùn)行在不同的服務(wù)器上。而且塊的劃分是動(dòng)態(tài)的,根據(jù)玩家密度程度,數(shù)量動(dòng)態(tài)調(diào)整動(dòng)態(tài)整塊的大小。
具體技術(shù)上,使用了Actor模型,要求每個(gè)對(duì)象都是獨(dú)立的Entity,對(duì)象之間只能通過(guò)消息協(xié)作,嚴(yán)格限制對(duì)象之間的直接交互。
? Skynet
Skynet是新興的一種通用型服務(wù)器框架(完全開(kāi)源),它游走在傳統(tǒng)不易分布服務(wù)器和分布式服務(wù)器之間。
? 以Go語(yǔ)言為主的其他框架
Go語(yǔ)言的goroutine特性,給游戲開(kāi)發(fā)者帶來(lái)巨大的想象空間。

戲服務(wù)器特征
游戲服務(wù)器端,是一個(gè)會(huì)長(zhǎng)期運(yùn)行的程序,并且它還要服務(wù)于多個(gè)不定時(shí)、不定點(diǎn)的網(wǎng)絡(luò)請(qǐng)求。
所以這類(lèi)軟件的特點(diǎn)是要非常關(guān)注 穩(wěn)定性和 性能。這類(lèi)程序如果需要多個(gè)協(xié)作來(lái)提高承載能力,則還要關(guān)注部署和擴(kuò)容的便利性;同時(shí),還需要考慮如何實(shí)現(xiàn)某種程度的容災(zāi)需求。由于多進(jìn)程協(xié)同工作,也帶來(lái)了開(kāi)發(fā)的復(fù)雜度,這也是需要關(guān)注的問(wèn)題。

功能約束,是架構(gòu)設(shè)計(jì)的決定性因素?;谟螒蝾I(lǐng)域的功能特征,對(duì)服務(wù)器端系統(tǒng)來(lái)說(shuō),有以下幾個(gè)特殊的需求:? 對(duì)于游戲數(shù)據(jù)和玩家數(shù)據(jù)的存儲(chǔ) ? 對(duì)玩家數(shù)據(jù)進(jìn)行數(shù)據(jù)廣播和同步 ? 把一部分游戲邏輯在服務(wù)器上運(yùn)算,做好驗(yàn)證,防止外掛。針對(duì)以上的需求特征,在服務(wù)器端,我們往往會(huì)關(guān)注對(duì)電腦內(nèi)存和 CPU 的使用,以求在特定業(yè)務(wù)代碼下,能盡量滿(mǎn)足承載量和響應(yīng)延遲的需求。最基本的做法就是 空間換時(shí)間,用各種緩存的方式來(lái)求得 CPU 和內(nèi)存空間上的平衡。在 CPU 和內(nèi)存之上,是另外一個(gè)約束因素:網(wǎng)卡。網(wǎng)絡(luò)帶寬直接限制了服務(wù)器的處理能力,所以游戲服務(wù)器架構(gòu)也必定要考慮這個(gè)因素。

游戲服務(wù)器架構(gòu)要素
對(duì)于游戲服務(wù)端架構(gòu),最重要的三個(gè)部分就是,如何使用 CPU、內(nèi)存、網(wǎng)卡的設(shè)計(jì):
? 內(nèi)存架構(gòu):主要決定服務(wù)器如何使用內(nèi)存,以最大化利用服務(wù)器端內(nèi)存來(lái)提高承載量,降低服務(wù)延遲。
? 邏輯架構(gòu):設(shè)計(jì)如何使用進(jìn)程、線程、協(xié)程這些對(duì)于 CPU 調(diào)度的方案。選擇同步、異步等不同的編程模型,以提高服務(wù)器的穩(wěn)定性和承載量??梢苑謪^(qū)分服,也可以采用世界服的方式,將相同功能模塊劃分到不同的服務(wù)器來(lái)處理。
? 通信模式:決定使用何種方式通訊。基于游戲類(lèi)型不同采用不同的通信模式,比如 http,tcp,udp 等。
服務(wù)器基于游戲類(lèi)型不同,所采用的架構(gòu)也有所不同,我們先講一下簡(jiǎn)單的模型,采用 HTTP 通信模式架構(gòu)的服務(wù)器:

這種服務(wù)器架構(gòu)和我們常用的 web 服務(wù)器架構(gòu)差不多,也是采用 Nginx 負(fù)載集群支持服務(wù)器的水平擴(kuò)展,memcache 做緩存。唯一的不同點(diǎn)在于通信層需要對(duì)協(xié)議再加工和加密。一般每個(gè)公司都有自己的一套基于 HTTP 的協(xié)議層框架,很少采用開(kāi)源框架。長(zhǎng)連接游戲服務(wù)器長(zhǎng)連接游戲和弱聯(lián)網(wǎng)游戲不同的地方在于,長(zhǎng)連接中,玩家是有狀態(tài)的,服務(wù)器可以時(shí)時(shí)和 client 交互。數(shù)據(jù)的傳送,不像弱聯(lián)網(wǎng)一般每次都需要重新創(chuàng)建一個(gè)連接,消息傳送的頻率以及速度上都快于弱聯(lián)網(wǎng)游戲。

服務(wù)器的三種類(lèi)型功能:
場(chǎng)景服務(wù)器:它負(fù)責(zé)完成主要的游戲邏輯,這些邏輯包括角色在游戲場(chǎng)景中的進(jìn)入與退出、角色的行走與跑動(dòng)、角色戰(zhàn)斗(包括打怪)、任務(wù)的認(rèn)領(lǐng)等。場(chǎng)景服務(wù)器設(shè)計(jì)的好壞是整個(gè)游戲世界服務(wù)器性能差異的主要體現(xiàn),它的設(shè)計(jì)難度不僅僅在于通信模型方面,更主要的是整個(gè)服務(wù)器的體系架構(gòu)和同步機(jī)制的設(shè)計(jì)。

非場(chǎng)景服務(wù)器:它主要負(fù)責(zé)完成與游戲場(chǎng)景不相關(guān)的游戲邏輯,這些邏輯不依靠游戲的地圖系統(tǒng)也能正常進(jìn)行,比如公會(huì)聊天或世界聊天,之所以把它從場(chǎng)景服務(wù)器中獨(dú)立出來(lái),是為了節(jié)省場(chǎng)景服務(wù)器的 CPU 和帶寬資源,讓場(chǎng)景服務(wù)器能夠盡可能快地處理那些對(duì)游戲流暢性影響較大的游戲邏輯。網(wǎng)關(guān)服務(wù)器: 在類(lèi)型一種的架構(gòu)中,玩家在多個(gè)地圖跳轉(zhuǎn)或者場(chǎng)景切換的時(shí)候采用跳轉(zhuǎn)的模式,以此進(jìn)行跳轉(zhuǎn)不同的服務(wù)器。還有一種方式是把這些服務(wù)器的節(jié)點(diǎn)都通過(guò)網(wǎng)關(guān)服務(wù)器管理,玩家和網(wǎng)關(guān)服務(wù)器交互,每個(gè)場(chǎng)景或者服務(wù)器切換的時(shí)候,也有網(wǎng)關(guān)服務(wù)器統(tǒng)一來(lái)交換數(shù)據(jù),如此玩家操作會(huì)比較流暢。 通過(guò)這種類(lèi)型服務(wù)器架構(gòu),因?yàn)閴毫Ψ稚⒘?#xff0c;性能會(huì)有明顯提升,負(fù)載也更大了,包括目前一些大型的 MMORPG 游戲就是采用此架構(gòu)。不過(guò)每增加一級(jí)服務(wù)器,狀態(tài)機(jī)復(fù)雜度可能會(huì)翻倍,導(dǎo)致研發(fā)和找 bug 的成本上升,這個(gè)對(duì)開(kāi)發(fā)組挑戰(zhàn)比較大,沒(méi)有經(jīng)驗(yàn),很容出錯(cuò)。3、三類(lèi)型 - 無(wú)縫地圖 魔獸世界的中無(wú)縫地圖,想必大家印象深刻,整個(gè)世界的移動(dòng)沒(méi)有像以往的游戲一樣,在切換場(chǎng)景的時(shí)候需要 loading 等待,而是直接行走過(guò)去,體驗(yàn)流暢。 現(xiàn)在的游戲大地圖采用無(wú)縫地圖多數(shù)采用的是 9 宮格的樣式來(lái)處理,由于地圖沒(méi)有魔獸世界那么大,所以采用單臺(tái)服務(wù)器多進(jìn)程處理即可,不過(guò)類(lèi)似魔獸世界這種大世界地圖,必須考慮 2 個(gè)問(wèn)題:? 多個(gè)地圖節(jié)點(diǎn)如何無(wú)縫拼接,特別是當(dāng)?shù)貓D節(jié)點(diǎn)比較多的時(shí)候,如何保證無(wú)縫拼接? 如何支持動(dòng)態(tài)分布,有些區(qū)域人多,有些區(qū)域人少,保證服務(wù)器資源利用的最大化 為了解決這個(gè)問(wèn)題,需要一組服務(wù)器來(lái)處理,每臺(tái) Node 服務(wù)器用來(lái)管理一塊地圖區(qū)域,由 NodeMaster(NM)來(lái)為他們提供總體管理。更高層次的 World 則提供大陸級(jí)別的管理服務(wù)。 一個(gè) Node 所負(fù)責(zé)的區(qū)域,地理上沒(méi)必要連接在一起,可以統(tǒng)一交給一個(gè) Node 去管理,而這些區(qū)塊在地理上并沒(méi)有聯(lián)系在一起的必要性。一個(gè) Node 到底管理哪些區(qū)塊,可以根據(jù)游戲?qū)崟r(shí)運(yùn)行的負(fù)載情況,定時(shí)維護(hù)的時(shí)候進(jìn)行更改 NodeMaster 上面的配置。

結(jié)語(yǔ)
游戲服務(wù)開(kāi)發(fā)需要應(yīng)對(duì)高并發(fā),低時(shí)延的業(yè)務(wù)場(chǎng)景,必須要懂得正確地分拆各個(gè)模塊。

總結(jié)

以上是生活随笔為你收集整理的网游服务器架构变迁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。