400-638-8808
|
微信公眾號




穩(wěn)定可靠 永不間斷

海外收發(fā) 暢通無阻

協(xié)同辦公 資源管理

超大郵件 超級功能

智能反垃圾郵件技術(shù)
易管理 免維護

在中國的互聯(lián)網(wǎng)諸多業(yè)務領(lǐng)域中,游戲一直是充當“現(xiàn)金牛”而存在的。但是,在游戲服務器端開發(fā)領(lǐng)域中的很多重要問題,并沒有被明確的分辨出其特異性,從而得到專門的對待。我們不管是在業(yè)界開源領(lǐng)域,還是內(nèi)部分享中,很少會有專門針對游戲業(yè)務特征進行專門設(shè)計的組件、類庫或者框架。我們從游戲的客戶端方面來看,一款專業(yè)的游戲客戶端引擎,已經(jīng)是游戲開發(fā)的標配,比如最早的Flash Builder,到后期的Cocos2d-X,Unity,Unreal;但是服務器端,我們幾乎找不到同樣重量級的產(chǎn)品。
在游戲服務器端開發(fā)所有要面對的問題中,有兩個是最核心和最普遍的:一是和客戶端的通訊;二是游戲登錄用戶的數(shù)據(jù)處理。對于和客戶端通訊的這個問題,大量的游戲開發(fā)者會使用“通用”的開源組件,比如Protocol Buffer,Thrift,Jetty,Node.js等等通信或RPC框架。雖然針對游戲,還是要做大量的改造,但一般都有很多現(xiàn)成的代碼可供修改。
在一般的互聯(lián)網(wǎng)應用中,我們一般認為服務都是通過請求-響應的方式來完成的。而在游戲業(yè)務領(lǐng)域中,請求-響應可以看成是一種類型的通訊方式,但還有另外一種重要的通訊模型,就是“數(shù)據(jù)同步”方式:游戲中某個角色的HP、位置坐標改變了,需要在客戶端和服務器之間、客戶端和客戶端之間同步。這造成了一般情況下通信協(xié)議的大量增加。
對于第二個問題,不管是memcache還是MySQL,或者是Redis,都不能完全滿足游戲開發(fā)者的需求。很多團隊嘗試過各種組合和修改,試圖創(chuàng)造出利用現(xiàn)有開源軟件,建設(shè)既能迎合靈活的需求變化,又具備高延遲和高可用的數(shù)據(jù)處理系統(tǒng),但最后這些努力基本上都很難圓滿成功。因此我們在游戲服務器端代碼中,還是充斥著大量的內(nèi)存、緩存管理,數(shù)據(jù)同步、落地等等代碼。而且每個游戲都要重新去寫一遍這些類似的功能,不能不說一種浪費。
如果我們要想出一種能滿足“游戲”這個業(yè)務領(lǐng)域的數(shù)據(jù)系統(tǒng)設(shè)計,那么就一定要搞清楚為什么在如此之多的開源項目和游戲團隊中,沒能實現(xiàn)完美契合的原因。
電子商務/一般互聯(lián)網(wǎng)業(yè)務的C-S通訊流程
基于WebService類型的通訊模型,現(xiàn)在基本已經(jīng)成為互聯(lián)網(wǎng)開源組件的標準。由此而誕生的RESTful API,或者各種RPC模型,其實都是基于這樣的客觀事實:

l 用戶主動請求,服務器產(chǎn)生回應。典型的就是網(wǎng)頁的點擊、表單的提交。
l 主動通知的消息,僅僅是提示用戶發(fā)起查詢請求。比如在APP按鈕上的小紅點,消息頁的數(shù)字提示等等,這些主動通知都是為了通知用戶去刷新頁面。

游戲類業(yè)務的通信模型
游戲中的通信,一般和操作有關(guān)。這些操作一般分為兩類:
l UI面板類操作
l 戰(zhàn)斗場景操作
這兩者的最大區(qū)別,就是UI面板類操作一般無需讓其他玩家看見。而戰(zhàn)斗場景操作則需要廣播給所有玩家看到。


在第二種情況下,一般就不是客戶端主動發(fā)起,而是服務器端直接推送實際數(shù)據(jù),然后客戶端直接顯示這些數(shù)據(jù)。這個模式和簡單的“推送”還不一樣,而應該更進一步,是一種從服務器端發(fā)起的,向客戶端“同步”數(shù)據(jù)的請求。
因此,一個好的游戲服務器端框架,應該是能同時支持請求-響應模型和“推送同步”模型的。
電子商務/一般互聯(lián)網(wǎng)類業(yè)務的數(shù)據(jù)處理流程
Memcache、Redis、MySQL在一般互聯(lián)網(wǎng)業(yè)務中的應用非常廣泛。而且基本上能很好的應對各種常見的應用場景,包括類似BBS的社區(qū)、新聞門戶、電子商務類系統(tǒng)。在企業(yè)內(nèi)部信息系統(tǒng)中(Intranet),這一類數(shù)據(jù)軟件也能發(fā)揮非常好的功效。由于電子商務類是其中最復雜的系統(tǒng),所以我在這里以此為例說明,一般數(shù)據(jù)處理的流程是如何的。

假設(shè)我們?yōu)g覽了一個網(wǎng)店,選中了一個商品,點擊了下單這個流程,實際上需要的后臺流程可能是下圖所示:

從上面的分析大概可以總結(jié)出幾個特點:
一、忍受延遲:每個操作的延遲要求較低,操作頻率不會太高。一般我們頁面在5秒內(nèi)打開,都不會引起太多客戶的抗議。所以,就算我們處理一個請求的時候,后臺進行多次的進程間調(diào)用,產(chǎn)生的延遲和帶寬消耗也是可以忍受的。
二、在線交互少:互聯(lián)網(wǎng)業(yè)務大多數(shù)是基于瀏覽器的,所以在線用戶之間很少實時交互。
三、數(shù)據(jù)分散:一般來說,互聯(lián)網(wǎng)應用的數(shù)據(jù)可以在多個不同的業(yè)務系統(tǒng)中共用,但是需要專門的業(yè)務模塊來做管理,以維持數(shù)據(jù)的一致性。
四、數(shù)據(jù)變更面廣:系統(tǒng)需要持續(xù)處理很多數(shù)據(jù)變更,互聯(lián)網(wǎng)業(yè)務有很大一部分數(shù)據(jù)是來源于普通用戶、網(wǎng)絡編輯、店主等等使用者,在使用的過程中,他們會大量的修改系統(tǒng)所存儲的數(shù)據(jù)。
以上四個特點,導致了我們一般會把后臺要處理的數(shù)據(jù),分別用Cache系統(tǒng)和DB系統(tǒng)來處理。并且,我們一般會按業(yè)務功能劃分模塊,同時也劃分業(yè)務系統(tǒng)。由于延遲和在線交互的需求較弱,所以使用大量進程來做模塊隔離,依然是非?尚械,總體來說,就是一種比較“分散”的數(shù)據(jù)使用方式。
游戲類業(yè)務的數(shù)據(jù)處理流程
在各種游戲中,MMORPG是數(shù)據(jù)處理最為復雜的一類,也是最典型的一種“重服務器端”的游戲類型,因此可以作為游戲業(yè)務中通用性的參考標準。在MMORPG中,我們可以發(fā)現(xiàn),數(shù)據(jù)的處理需求,和一般互聯(lián)網(wǎng)業(yè)務大相徑庭,它體現(xiàn)出的是一種明顯的“集中”式的數(shù)據(jù)處理需求。我們可以從一般MMORPG的服務器架構(gòu)中體現(xiàn)出來:

在游戲業(yè)務中,一般我們都會發(fā)現(xiàn)以下的特點:
一、延遲敏感:游戲中用戶會產(chǎn)生大量操作,都要求“實時”進行反饋,所以一般都不能忍受1秒以上的延遲,在大量動作類型的游戲中,一般都會要求服務器的反饋時延在50ms左右。因此游戲開發(fā)者都習慣于盡量減少后臺進程間的交互,盡管這對提高系統(tǒng)吞吐量很不利。所以大部分游戲服務器端都有一個所謂“GameServer”,里面運行了游戲70%以上的功能。
二、大量實時交互:在線游戲的特點,就是很多玩家可以通過服務器“看見”彼此,能實時的互動。因此我們必須要把用戶的在線數(shù)據(jù),集中到一起,才能提供互相操作的可能;而且A用戶操作B用戶的數(shù)據(jù),是最常見的數(shù)據(jù)操作,所謂戰(zhàn)斗玩法,就是互相修改對方的數(shù)據(jù)的過程。
三、數(shù)據(jù)集中:游戲是一個幾乎完全虛擬的世界,在游戲中的數(shù)據(jù),實際上很少能在其他系統(tǒng)中產(chǎn)生價值。而游戲邏輯也禁止通過游戲以外的方式,修改游戲的數(shù)據(jù)。所以游戲中的數(shù)據(jù),一般都會集中存放在單獨的數(shù)據(jù)庫中。由于沒有數(shù)據(jù)共用的需求,所以也不需要把GameServer里面集中的邏輯劃分出很多單獨的進程模塊來。
四、數(shù)據(jù)變更少:實際上游戲的數(shù)據(jù)變更還是很快的,比如游戲中的每次中彈,都要減少HP的數(shù)值。但是游戲里的數(shù)據(jù),一般都遵守這樣一個規(guī)則:“變化越快的數(shù)據(jù),重要性越低”。也就是說,游戲中是可以容忍一定程度的數(shù)據(jù)不一致和不完整的。而游戲中的數(shù)據(jù),一般會分成兩類:玩家存檔和游戲設(shè)置。對于玩家存檔來說,其單條數(shù)據(jù)量一般不大,但會有大量的記錄數(shù),因為每個玩家都會有一個存檔。但是其讀取、修改,一般很典型的和玩家的登錄、登出、升級等業(yè)務邏輯密切關(guān)聯(lián),所以其緩存時機是比較容易根據(jù)業(yè)務邏輯來把握的。而對于游戲設(shè)置數(shù)據(jù)來說,幾乎只有升級游戲版本的時候才會修改,大部分運行時是只讀的,其緩存簡單的讀入內(nèi)存就解決問題了。
一般的緩存系統(tǒng)的特點在游戲中的問題
根據(jù)以上的分析,我們可以看到,普通的緩存系統(tǒng),如memcache和Redis,實際上其特點是不太適合游戲業(yè)務的:
l 一般跨進程的緩存系統(tǒng),無法解決游戲要求的低延遲問題。級別是同機房,每次數(shù)據(jù)存取都需要10-20ms的時間,對于游戲戰(zhàn)斗中大量的數(shù)據(jù)讀、寫來說,是很難接受的。(但是一些回合制戰(zhàn)斗、低頻操作還是有用的)
l 通用型的緩存系統(tǒng)或者數(shù)據(jù)庫,一般都比較難集結(jié)多個進程,形成一個完整的數(shù)據(jù)存儲網(wǎng)格。這讓玩家間的互相交互產(chǎn)生了額外的難度,開發(fā)者必須先想辦法確定玩家的數(shù)據(jù)在哪個后臺進程上,然后才能去讀寫。一般的數(shù)據(jù)庫或緩存系統(tǒng),為了保證數(shù)據(jù)的一致性或者完整性,往往會需要犧牲一些分布式的能力。而這種犧牲在游戲業(yè)務中,其實是一種浪費,因為游戲的很多數(shù)據(jù)都無需這種能力。
l 通用性數(shù)據(jù)系統(tǒng)一般不依賴于特定的語言,所以很少能直接把某種“對象”存入到數(shù)據(jù)系統(tǒng)中。在游戲開發(fā)中,需要存儲的數(shù)據(jù)結(jié)構(gòu)數(shù)量往往是非常大量的:一個普通的游戲,基本上都會超過100種數(shù)據(jù)結(jié)構(gòu)。對于每個數(shù)據(jù)結(jié)構(gòu),都去建表或者編寫序列化/反序列化配置,是一種非常累人的工作。--明明在代碼中,已經(jīng)用編程語言定義了他們的結(jié)構(gòu),還要重復的搞一次。
根據(jù)上面說的這些問題,我們實際上是需要另外一種完全不同設(shè)計思想的數(shù)據(jù)系統(tǒng)。
對于游戲業(yè)務來說,一個好用的數(shù)據(jù)系統(tǒng),應該包括這樣一些特點:
l 可以利用GameServer進程內(nèi)的內(nèi)存進行自動化的緩存管理。由于GameServer進程往往集中了大部分的邏輯運算,所以大部分的數(shù)據(jù)緩存也應該在這個進程中,這樣才能符合游戲所需的延遲要求。
l 自動進行數(shù)據(jù)落地和容災管理。由于游戲數(shù)據(jù)中有大量的“過程數(shù)據(jù)”,所以其一致性和完整性要求會稍微低于其他業(yè)務,所以應該利用這一點,讓GameServer本身也可以是分布式的程序,從而提高系統(tǒng)整體的吞吐量。
l 具備良好的編程易用性。最好是能直接存取編程中的對象,避免反復對數(shù)據(jù)結(jié)構(gòu)的描述,節(jié)省大量的開發(fā)時間。
總結(jié)
游戲服務器和普通互聯(lián)網(wǎng)業(yè)務服務器端,最大的區(qū)別實際上就在于“狀態(tài)”。游戲服務器的狀態(tài)是實時快速變化的、可以容忍丟失的、需要大量廣播同步的;普通互聯(lián)網(wǎng)業(yè)務服務器的狀態(tài)一般是持久化的、不容忍丟失的、只和特定客戶端相關(guān)的。所以一個好的游戲服務器框架,在通訊和數(shù)據(jù)這兩個基本層面,會和一般我們所接觸的開源組件有很大的差異。這也是作為游戲服務器端開發(fā)者,需要去共同建設(shè)行業(yè)標準的地方。
天下數(shù)據(jù)專業(yè)提供最安全的海外游戲解決方案、游戲數(shù)據(jù)安全解決方案、游戲服務器配置安全、游戲服務器架設(shè)方案。詳詢在線客服!
產(chǎn)品與服務
香港服務器 香港高防服務器 美國服務器 韓國服務器 新加坡服務器 日本服務器 臺灣服務器云服務器
香港云主機 美國云主機 韓國云主機 新加坡云主機 臺灣云主機 日本云主機 德國云主機 全球云主機高防專線
海外高防IP 海外無限防御 SSL證書 高防CDN套餐 全球節(jié)點定制 全球?qū)>GPLC關(guān)于我們
關(guān)于天下數(shù)據(jù) 數(shù)據(jù)招商加盟 天下數(shù)據(jù)合作伙伴 天下數(shù)據(jù)團隊建設(shè) 加入天下數(shù)據(jù) 媒體報道 榮譽資質(zhì) 付款方式關(guān)注我們
微信公眾賬號
新浪微博
天下數(shù)據(jù)手機站 關(guān)于天下數(shù)據(jù) 聯(lián)系我們 誠聘英才 付款方式 幫助中心 網(wǎng)站備案 解決方案 域名注冊 網(wǎng)站地圖
天下數(shù)據(jù)18年專注海外香港服務器、美國服務器、海外云主機、海外vps主機租用托管以及服務器解決方案-做天下最好的IDC服務商
《中華人民共和國增值電信業(yè)務經(jīng)營許可證》 ISP證:粵ICP備07026347號
朗信天下發(fā)展有限公司(控股)深圳市朗玥科技有限公司(運營)聯(lián)合版權(quán)
深圳總部:中國.深圳市南山區(qū)深圳國際創(chuàng)新谷6棟B座10層 香港總部:香港上環(huán)蘇杭街49-51號建安商業(yè)大廈7樓
7×24小時服務熱線:4006388808香港服務電話:+852 67031102
本網(wǎng)站的域名注冊業(yè)務代理北京新網(wǎng)數(shù)碼信息技術(shù)有限公司的產(chǎn)品