此解決方案概述了用于在Cloud Platform上托管游戲基礎(chǔ)架構(gòu)的常見(jiàn)組件和設(shè)計(jì)模式。
在過(guò)去的幾十年中,視頻游戲已經(jīng)發(fā)展為一項(xiàng)繁榮的娛樂(lè)業(yè)務(wù)。隨著寬帶互聯(lián)網(wǎng)的普及,游戲業(yè)發(fā)展的關(guān)鍵因素之一就是在線游戲。
在線游戲有多種形式,例如基于會(huì)話(huà)的多人游戲?qū)?、大型多人游戲虛擬世界以及相互交織的單人游戲體驗(yàn)。
過(guò)去,使用客戶(hù)端-服務(wù)器模型的游戲需要購(gòu)買(mǎi)和維護(hù)專(zhuān)用的本地或共址服務(wù)器來(lái)運(yùn)行在線基礎(chǔ)架構(gòu),而這些只有大型工作室和發(fā)布商能夠承受。此外,還需要進(jìn)行廣泛的預(yù)測(cè)和容量規(guī)劃,以求在滿(mǎn)足客戶(hù)需求的同時(shí)避免過(guò)度的固定硬件投資。利用當(dāng)今基于云的計(jì)算資源,任何規(guī)模的游戲開(kāi)發(fā)者和發(fā)布商都可以按需請(qǐng)求和接收任何資源,從而有助于避免高額的前期貨幣支出以及過(guò)多或過(guò)少的硬件預(yù)配帶來(lái)的風(fēng)險(xiǎn)。
概要組件
下圖演示了游戲架構(gòu)的在線部分。
云游戲基礎(chǔ)架構(gòu)概覽
游戲架構(gòu)的前端組件包括:
游戲平臺(tái)服務(wù),提供額外的游戲相關(guān)功能。
托管游戲的專(zhuān)用游戲服務(wù)器。
游戲架構(gòu)的后端組件包括:
游戲狀態(tài),永久存儲(chǔ)在系統(tǒng)記錄中,通常存儲(chǔ)在游戲數(shù)據(jù)庫(kù)中。
分析堆棧,用于存儲(chǔ)和查詢(xún)分析和游戲內(nèi)容事件。
這些組件可以托管在各種環(huán)境中,包括本地、私有云或公共云,甚至是完全托管的解決方案。只要系統(tǒng)滿(mǎn)足組件與最終用戶(hù)之間通信的延遲要求,任何這些托管形式都可以采用。
前端
前端提供互聯(lián)網(wǎng)客戶(hù)直接或通過(guò)負(fù)載平衡器間接進(jìn)行交互的界面。
例如,在基于會(huì)話(huà)的第一人稱(chēng)射擊游戲中,前端服務(wù)通常包括配對(duì)服務(wù)。該服務(wù)將專(zhuān)用游戲服務(wù)器實(shí)例的連接信息分發(fā)給游戲客戶(hù)端。游戲客戶(hù)端通過(guò)互聯(lián)網(wǎng)向配對(duì)服務(wù)發(fā)送請(qǐng)求。當(dāng)它們從包含連接信息的配對(duì)服務(wù)接收到響應(yīng)時(shí),就可以使用用戶(hù)數(shù)據(jù)報(bào)協(xié)議(UDP)直接連接到專(zhuān)用游戲服務(wù)器實(shí)例。
前端服務(wù)不必由外部客戶(hù)端獨(dú)占使用,前端服務(wù)之間彼此通信以及與后端通信都很常見(jiàn)。但是,由于前端服務(wù)可以通過(guò)互聯(lián)網(wǎng)訪問(wèn),因此它們更可能受到攻擊。您應(yīng)該考慮強(qiáng)化前端服務(wù)安全,以抵御拒絕服務(wù)攻擊和格式錯(cuò)誤的數(shù)據(jù)包,幫助解決這些安全性和可靠性問(wèn)題。相比之下,后端服務(wù)通常只能使用您或受信任的第三方合作伙伴編寫(xiě)的代碼進(jìn)行訪問(wèn),因此可能更難被攻擊。
游戲平臺(tái)服務(wù)
此組件的通用名稱(chēng)是平臺(tái)服務(wù)或在線服務(wù)。平臺(tái)服務(wù)為基本的元游戲功能提供接口,例如允許玩家加入相同的專(zhuān)用游戲服務(wù)器實(shí)例,或者為您的游戲保留好友列表社交圖。您的游戲運(yùn)行平臺(tái)(例如Steam、Xbox Live或Google Play Games)通常會(huì)提供這些服務(wù)。
平臺(tái)服務(wù)示例:
排行榜和對(duì)抗歷史
配對(duì)
在線大廳
聊天
庫(kù)存管理
授權(quán)
群組/組
資料
公會(huì)
跨平臺(tái)解鎖
Feeds
社會(huì)身份映射
分析
狀態(tài)
游戲平臺(tái)服務(wù)的軟件設(shè)計(jì)策略類(lèi)似于網(wǎng)絡(luò)服務(wù)提供的功能和API,兩者都以類(lèi)似的模式發(fā)展:
在21世紀(jì)初,一套典型的平臺(tái)服務(wù)會(huì)作為單體式應(yīng)用服務(wù)運(yùn)行,通常作為單例實(shí)現(xiàn)。即使在聯(lián)合時(shí),也不建議將此模式用于云部署。
隨著該行業(yè)將各種服務(wù)改為可獨(dú)立擴(kuò)縮,現(xiàn)在熟知的面向服務(wù)的架構(gòu)模式(SOA)在2000年代中期開(kāi)始流行。此外,現(xiàn)在不僅可以通過(guò)游戲客戶(hù)端和服務(wù)器訪問(wèn)這些服務(wù),還可以通過(guò)網(wǎng)絡(luò)服務(wù)以及最終通過(guò)智能手機(jī)應(yīng)用訪問(wèn)這些服務(wù)。
在過(guò)去的五年中,許多開(kāi)發(fā)者采用了快速擴(kuò)縮型網(wǎng)絡(luò)公司所倡導(dǎo)的微服務(wù)方法。這是因?yàn)槠脚_(tái)服務(wù)和網(wǎng)絡(luò)應(yīng)用的許多基本挑戰(zhàn)是相同的,例如在全球范圍內(nèi)實(shí)現(xiàn)快速開(kāi)發(fā)周期和運(yùn)行高度分布式服務(wù)。微服務(wù)可以幫助解決這些問(wèn)題,因此對(duì)于設(shè)計(jì)在Cloud Platform上運(yùn)行的應(yīng)用是一個(gè)很好的選擇。
此外,現(xiàn)在有許多托管的服務(wù)可以提供構(gòu)建平臺(tái)服務(wù)的方法,也可以提供完全托管的平臺(tái)服務(wù)。
后端平臺(tái)服務(wù)
雖然大多數(shù)平臺(tái)服務(wù)都是由外部客戶(hù)端訪問(wèn),但有時(shí)僅由在線基礎(chǔ)架構(gòu)的其他部分訪問(wèn)某個(gè)平臺(tái)服務(wù)也合乎情理,例如一個(gè)不公開(kāi)的競(jìng)爭(zhēng)性玩家排名服務(wù)。雖然此類(lèi)后端平臺(tái)服務(wù)通常缺少外部網(wǎng)絡(luò)路由和IP地址,但它們遵循與前端平臺(tái)服務(wù)相同的設(shè)計(jì)實(shí)踐。
Google Cloud Platform平臺(tái)服務(wù)解決方案
以下解決方案提供了有關(guān)如何在Cloud Platform上構(gòu)建后端服務(wù)的更多信息。
基于Google App Engine和Firebase的移動(dòng)平臺(tái)服務(wù)
設(shè)計(jì)API以在App Engine上的微服務(wù)之間進(jìn)行通信
專(zhuān)用游戲服務(wù)器
專(zhuān)用游戲服務(wù)器提供游戲邏輯。為了最大限度地減少用戶(hù)感知的延遲時(shí)間,客戶(hù)端游戲應(yīng)用通常直接與專(zhuān)用游戲服務(wù)器通信。這使它們成為前端服務(wù)架構(gòu)的一部分。
注意:作為前端服務(wù),游戲服務(wù)器可能成為很多種類(lèi)的利用與攻擊的目標(biāo)。檢測(cè)不良操作者和作弊玩家值得重視,但這個(gè)主題不在本文的討論范圍內(nèi)。
該行業(yè)沒(méi)有標(biāo)準(zhǔn)術(shù)語(yǔ),因此就本文而言:
機(jī)器指的是運(yùn)行游戲服務(wù)器進(jìn)程的物理或虛擬機(jī)。
游戲服務(wù)器是指游戲服務(wù)器進(jìn)程。多個(gè)游戲服務(wù)器進(jìn)程可以在一臺(tái)機(jī)器上同時(shí)運(yùn)行。
實(shí)例指的是單個(gè)游戲服務(wù)器進(jìn)程。
專(zhuān)用游戲服務(wù)器的類(lèi)型
專(zhuān)用這個(gè)術(shù)語(yǔ)可能會(huì)誤導(dǎo)當(dāng)今對(duì)后端游戲服務(wù)器的理解。在其原始上下文中,專(zhuān)用是指游戲服務(wù)器與專(zhuān)用硬件的比例為1:1。如今,大多數(shù)游戲發(fā)布商在一臺(tái)機(jī)器上托管同時(shí)運(yùn)行的多個(gè)游戲服務(wù)器進(jìn)程。盡管這些進(jìn)程現(xiàn)在很少有為之專(zhuān)用的整臺(tái)機(jī)器,但游戲行業(yè)仍然經(jīng)常使用專(zhuān)用游戲服務(wù)器這個(gè)術(shù)語(yǔ)。
專(zhuān)用游戲服務(wù)器與其運(yùn)行的游戲類(lèi)型一樣是多種多樣的。以下部分將討論一些高級(jí)游戲服務(wù)器類(lèi)別。
實(shí)時(shí)模擬
直到近期,幾乎所有商用產(chǎn)品的專(zhuān)用游戲服務(wù)器都是實(shí)時(shí)模擬游戲的前端的一部分。從過(guò)往的記錄來(lái)看,實(shí)時(shí)模擬游戲服務(wù)器是垂直擴(kuò)縮的最大推動(dòng)力。但現(xiàn)在,要求最高的游戲已經(jīng)轉(zhuǎn)向手動(dòng)水平擴(kuò)縮策略,例如每臺(tái)機(jī)器運(yùn)行多個(gè)服務(wù)器進(jìn)程,或者在地理上將世界分片。具有自定義流控制、可靠性和擁塞避免的UDP通信已成為主流網(wǎng)絡(luò)范例。
大多數(shù)實(shí)時(shí)模擬游戲服務(wù)器都是以無(wú)限循環(huán)的方式實(shí)現(xiàn)的,其目標(biāo)是在給定的時(shí)間預(yù)算內(nèi)完成循環(huán)。典型的時(shí)間預(yù)算為16或33毫秒,分別生成每秒60或30次的狀態(tài)更新率。更新率也稱(chēng)為幀率或節(jié)拍率。雖然服務(wù)器正在以高頻率更新其模擬,但服務(wù)器在多次更新之后才將狀態(tài)更新傳遞給客戶(hù)端的做法很常見(jiàn)。這使網(wǎng)絡(luò)帶寬需求保持在合理的范圍??梢允褂弥T如延遲補(bǔ)償、內(nèi)插和外推之類(lèi)的策略緩解減少更新頻率的影響。
上述因素意味著在實(shí)時(shí)模擬游戲服務(wù)器上運(yùn)行那些對(duì)延遲時(shí)間敏感、計(jì)算密集型和帶寬密集型的工作負(fù)載時(shí),需要仔細(xì)考慮游戲服務(wù)器設(shè)計(jì)及其運(yùn)行的計(jì)算平臺(tái)。
基于會(huì)話(huà)或?qū)值挠螒?/span>
今天,將服務(wù)器設(shè)計(jì)用于運(yùn)行離散會(huì)話(huà)的游戲極為流行。典型的例子是第一人稱(chēng)射擊游戲(FPS)的多人游戲會(huì)話(huà),例如Call of Duty?、Overwatch?、Titanfall?或多人在線戰(zhàn)斗競(jìng)技場(chǎng)(MOBA)游戲,例如Dota 2?或Vainglory?。這些游戲的服務(wù)器需要應(yīng)對(duì)快速變化的游戲內(nèi)容和詳盡的游戲狀態(tài)計(jì)算,通常需要專(zhuān)門(mén)用于人工智能或物理模擬的線程。
大型持久性多人游戲世界
將近二十年前,Ultima Online?為大型多人在線(MMO)游戲的爆炸性發(fā)展鋪平了道路。今天最流行的大型多人在線游戲,如World of Warcraft?和Guild Wars?,都具有復(fù)雜的服務(wù)器設(shè)計(jì)和不斷發(fā)展的功能集的特點(diǎn)。
大型多人在線游戲服務(wù)器通常面臨復(fù)雜的問(wèn)題,例如在服務(wù)器實(shí)例之間傳遞游戲?qū)嶓w,分片或定相游戲世界,以及物理地共置實(shí)例以模擬相鄰的游戲世界區(qū)域。為了滿(mǎn)足計(jì)算包含數(shù)百或數(shù)千個(gè)玩家的持久游戲世界的狀態(tài)更新的計(jì)算和內(nèi)存要求,諸如Eve Online?所采用的時(shí)間膨脹之類(lèi)的解決方案應(yīng)運(yùn)而生。
基于請(qǐng)求/響應(yīng)的服務(wù)器
從技術(shù)上講,所有專(zhuān)用游戲服務(wù)器都基于一系列請(qǐng)求和響應(yīng)。然而,實(shí)時(shí)通信并非其關(guān)鍵需求的移動(dòng)游戲服務(wù)器采用了類(lèi)似網(wǎng)絡(luò)托管中使用的HTTP請(qǐng)求和響應(yīng)語(yǔ)義。
基于請(qǐng)求/響應(yīng)的游戲服務(wù)器面臨的挑戰(zhàn)與網(wǎng)絡(luò)服務(wù)相同,包括:
盡可能地縮短游戲服務(wù)器的響應(yīng)時(shí)間。
在全球范圍內(nèi)分布游戲服務(wù)器以減少延遲時(shí)間并增加冗余。
驗(yàn)證游戲客戶(hù)端在服務(wù)器上的操作,以防止攻擊程序或欺騙。
安全強(qiáng)化游戲服務(wù)器以抵御拒絕服務(wù)和其他攻擊。
在客戶(hù)端側(cè)實(shí)現(xiàn)通信重試的指數(shù)延遲。
創(chuàng)建粘性會(huì)話(huà)或外化流程狀態(tài)。
基于請(qǐng)求/響應(yīng)的游戲服務(wù)器的優(yōu)勢(shì)在于緊湊的通信語(yǔ)義,以及在發(fā)生應(yīng)用或網(wǎng)絡(luò)故障后可輕松重試,很適合回合制和移動(dòng)游戲。
外化游戲世界狀態(tài)
玩家對(duì)零游戲停機(jī)時(shí)間的呼聲日益高漲。這意味著您需要保護(hù)他們的體驗(yàn)免受單個(gè)服務(wù)器實(shí)例問(wèn)題的影響。為了做到這一點(diǎn),一款游戲應(yīng)該在單個(gè)游戲服務(wù)器進(jìn)程之外保持玩家狀態(tài)。這種方法有很多優(yōu)點(diǎn),例如針對(duì)崩潰的服務(wù)器進(jìn)程的彈性以及有效負(fù)載平衡的能力。
遺憾的是,僅僅使用在網(wǎng)絡(luò)服務(wù)中流行的外化狀態(tài)模式可能會(huì)導(dǎo)致很多問(wèn)題,原因包括:
當(dāng)您有許多每秒更新數(shù)十次的獨(dú)特實(shí)體時(shí),將更新寫(xiě)入外部狀態(tài)的速度可能是一個(gè)挑戰(zhàn)。即使您使用內(nèi)存緩存的鍵值存儲(chǔ)(如Memcached或Redis)也依舊如此。
針對(duì)外部狀態(tài)緩存的查詢(xún)的尾端延遲時(shí)間也是一個(gè)大問(wèn)題。如果有1%甚至是0.1%的查詢(xún)的延遲時(shí)間比更新截止時(shí)間大一個(gè)數(shù)量級(jí),就很難滿(mǎn)足狀態(tài)更新截止時(shí)間的要求。
確定哪些進(jìn)程對(duì)外部狀態(tài)緩存中的對(duì)象具有只讀與讀寫(xiě)權(quán)限會(huì)為服務(wù)器模型帶來(lái)復(fù)雜性。但是,這種訪問(wèn)管理方式可以更容易地將狀態(tài)從一個(gè)服務(wù)器實(shí)例傳輸?shù)搅硪粋€(gè)服務(wù)器示例。
然而,解決這些問(wèn)題可以帶來(lái)一些額外的益處。配備適當(dāng)?shù)脑L問(wèn)管理,成功的外化狀態(tài)可用于許多進(jìn)程,可以大幅度地簡(jiǎn)化并行計(jì)算部分游戲狀態(tài)更新的能力。它同樣有利于在實(shí)例之間遷移實(shí)體。
Cloud Platform專(zhuān)用游戲服務(wù)器解決方案
以下文章介紹了如何在Cloud Platform上運(yùn)行專(zhuān)用游戲服務(wù)器。
使用App Engine和Google Compute Engine的游戲服務(wù)器參考架構(gòu)
專(zhuān)用游戲服務(wù)器遷移指南
在Compute Engine上設(shè)置Minecraft服務(wù)器
在Kubernetes Engine中運(yùn)行專(zhuān)用游戲服務(wù)器
后端
從進(jìn)程角度來(lái)看,后端僅向其他前端和后端服務(wù)提供接口。外部客戶(hù)端無(wú)法直接與后端服務(wù)通信。后端服務(wù)通常為您提供存儲(chǔ)和訪問(wèn)數(shù)據(jù)的方式,例如數(shù)據(jù)庫(kù)中的游戲狀態(tài)數(shù)據(jù),或數(shù)據(jù)倉(cāng)庫(kù)中的日志記錄和分析事件。
游戲數(shù)據(jù)庫(kù)
可能導(dǎo)致玩家退出您的游戲并且不再返回的情況,包括服務(wù)器損壞和玩家進(jìn)度丟失。遺憾的是,如果您的數(shù)據(jù)庫(kù)層設(shè)計(jì)不佳,兩者都可能發(fā)生。
保存游戲世界的狀態(tài)和玩家進(jìn)度數(shù)據(jù)的數(shù)據(jù)庫(kù),可以說(shuō)是游戲基礎(chǔ)架構(gòu)中最關(guān)鍵的部分。
您對(duì)數(shù)據(jù)庫(kù)能力的評(píng)估,應(yīng)該是不僅能夠處理預(yù)期的工作負(fù)載,而且能應(yīng)對(duì)在游戲大獲成功的情況下需要的工作負(fù)載。按照預(yù)期的玩家數(shù)量進(jìn)行設(shè)計(jì)和測(cè)試的后端,如果突然收到超過(guò)一個(gè)數(shù)量級(jí)的更多負(fù)載,就不太可能為任何玩家提供可靠的服務(wù)。如果沒(méi)有規(guī)劃游戲意外成功所帶來(lái)的負(fù)載,就可能會(huì)導(dǎo)致游戲失敗,因?yàn)楫?dāng)玩家因數(shù)據(jù)庫(kù)停機(jī)而無(wú)法繼續(xù)參與時(shí),他們就可能會(huì)拋棄您的游戲。
游戲特別容易受到這個(gè)問(wèn)題的影響。雖然大多數(shù)擁有成功產(chǎn)品的企業(yè)都可以期望一種逐步的、有機(jī)的增長(zhǎng)。但對(duì)于游戲業(yè),更常見(jiàn)的模式是游戲剛推出時(shí)玩家有很大的興趣,然后就迅速下降到一個(gè)低得多的使用水平。如果您的游戲大熱,負(fù)擔(dān)過(guò)重的數(shù)據(jù)庫(kù)可能會(huì)在保存用戶(hù)進(jìn)度之前就出現(xiàn)大規(guī)模延遲,甚至完全無(wú)法保存進(jìn)度。被迫決定放棄支持某些游戲功能的實(shí)時(shí)更新,是任何游戲開(kāi)發(fā)者都不希望出現(xiàn)的情況,因此您應(yīng)該仔細(xì)規(guī)劃數(shù)據(jù)庫(kù)資源。
在設(shè)計(jì)游戲數(shù)據(jù)庫(kù)時(shí),請(qǐng)牢記以下幾點(diǎn):
做出明智的決定。不要因?yàn)槿菀诇y(cè)試而在開(kāi)發(fā)期間使用某個(gè)數(shù)據(jù)庫(kù),然后未經(jīng)評(píng)估所有的選項(xiàng),就讓其成為您的生產(chǎn)數(shù)據(jù)庫(kù)。重要的是,要了解在您預(yù)期的玩家數(shù)量基礎(chǔ)上,來(lái)自您的游戲的數(shù)據(jù)庫(kù)訪問(wèn)的類(lèi)型和頻率,以及比預(yù)期增大10倍的情況。然后,您才可以就哪種后端可以最好地處理這些局面做出明智的選擇。切勿讓自己陷入當(dāng)數(shù)據(jù)庫(kù)危機(jī)已經(jīng)來(lái)臨,才嘗試了解如何應(yīng)對(duì)的境地。
切忌假設(shè)一個(gè)解決方案是正確的選擇。請(qǐng)記住,您可以同時(shí)運(yùn)行多種類(lèi)型的數(shù)據(jù)庫(kù)。許多成功的游戲用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)帳號(hào)信息并處理游戲中的購(gòu)買(mǎi)操作,同時(shí)將游戲狀態(tài)信息保存在單獨(dú)的NoSQL數(shù)據(jù)庫(kù)中。原因在于NoSQL數(shù)據(jù)庫(kù)可以更好地處理大容量、低延遲的工作負(fù)載,而關(guān)系型數(shù)據(jù)庫(kù)可以提供有保證的事務(wù)處理。
備份數(shù)據(jù)。定期備份和按地理分布進(jìn)行備份都是從數(shù)據(jù)庫(kù)故障中恢復(fù)的重要手段。
關(guān)系型數(shù)據(jù)庫(kù)
許多游戲開(kāi)發(fā)團(tuán)隊(duì)在項(xiàng)目起步時(shí)會(huì)使用一個(gè)關(guān)系型數(shù)據(jù)庫(kù)。當(dāng)數(shù)據(jù)和流量增長(zhǎng)到數(shù)據(jù)庫(kù)性能無(wú)法再承受的程度時(shí),他們通常會(huì)優(yōu)先選擇擴(kuò)縮數(shù)據(jù)庫(kù)。一旦擴(kuò)縮不再可行,許多開(kāi)發(fā)者就會(huì)實(shí)現(xiàn)自定義數(shù)據(jù)庫(kù)服務(wù)層。在此層中,您可以?xún)?yōu)先處理查詢(xún)和緩存結(jié)果,因?yàn)檫@兩者都會(huì)限制對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。通過(guò)添加擴(kuò)縮和數(shù)據(jù)庫(kù)服務(wù)層,您可以生成能夠處理大量玩家操作的游戲后端,但這些方法可能會(huì)遇到一些常見(jiàn)問(wèn)題:
擴(kuò)縮-傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)專(zhuān)注于向上擴(kuò)縮(垂直擴(kuò)縮)的方法。但是,在規(guī)劃云原生游戲后端時(shí),強(qiáng)烈建議您使用橫向擴(kuò)縮(水平擴(kuò)縮)方法,因?yàn)閱蝹€(gè)虛擬機(jī)中可以存在的核心數(shù)量總是有限的,但向您的云項(xiàng)目添加更多虛擬機(jī)卻很容易。關(guān)系型數(shù)據(jù)庫(kù)具有水平擴(kuò)縮的模式,例如分片、集群和分層副本,但是如果沒(méi)有停機(jī)時(shí)間,您很難將它們添加到正在運(yùn)行的數(shù)據(jù)庫(kù)中。如果您的流量或數(shù)據(jù)有任何超過(guò)單個(gè)數(shù)據(jù)庫(kù)性能極限的可能性,您就應(yīng)該從使用一個(gè)小型集群開(kāi)始。這可避免在危機(jī)來(lái)臨時(shí)才去學(xué)習(xí)如何擴(kuò)縮數(shù)據(jù)庫(kù)。在集群運(yùn)行時(shí)向其添加節(jié)點(diǎn)并非簡(jiǎn)單的任務(wù),但終歸是可行的。
架構(gòu)更改-很少有成功的游戲從開(kāi)始就使用一種數(shù)據(jù)庫(kù)架構(gòu)并在整個(gè)游戲生命周期內(nèi)持續(xù)使用。玩家需要新的功能和內(nèi)容,而添加這些功能和內(nèi)容就需要將新類(lèi)型的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中。在開(kāi)發(fā)過(guò)程的早期階段,您就應(yīng)該決定如何更新架構(gòu)。游戲發(fā)布之后,嘗試在沒(méi)有固定流程的情況下更新架構(gòu)可能會(huì)導(dǎo)致意外停機(jī),甚至丟失玩家數(shù)據(jù)。
管理-擴(kuò)縮正在運(yùn)行的關(guān)系型數(shù)據(jù)庫(kù)并更新其架構(gòu)都是復(fù)雜的操作。雖然Cloud Platform提供了自動(dòng)托管的關(guān)系型數(shù)據(jù)庫(kù)等常用服務(wù),但目前在游戲后端,自動(dòng)托管數(shù)據(jù)庫(kù)的采用率很低。這是因?yàn)橛螒蚝蠖擞袑?xiě)入密集型的工作負(fù)載。
NoSQL數(shù)據(jù)庫(kù)
非關(guān)系型數(shù)據(jù)庫(kù)可以提供大規(guī)模操作的解決方案,尤其適合處理寫(xiě)入密集型的工作負(fù)載。但是,它們要求您了解NoSQL數(shù)據(jù)模型、訪問(wèn)模式和事務(wù)保證。
當(dāng)前有許多類(lèi)型的NoSQL數(shù)據(jù)庫(kù),那些非常適合存儲(chǔ)游戲世界狀態(tài)的數(shù)據(jù)庫(kù)具有以下特征:
擴(kuò)縮-它們的設(shè)計(jì)考慮了水平擴(kuò)縮,并且通常默認(rèn)使用這種模式。調(diào)整集群大小通常是一種無(wú)需停機(jī)即可完成的操作,但有時(shí)在完全集成其他節(jié)點(diǎn)之前會(huì)有一些性能損失。
架構(gòu)更改-架構(gòu)是動(dòng)態(tài)的,并由應(yīng)用層強(qiáng)制執(zhí)行。這是一個(gè)巨大的優(yōu)勢(shì),意味著為新游戲功能添加新字段的影響變得微不足道。
管理-大多數(shù)云提供商提供至少一個(gè)托管NoSQL數(shù)據(jù)存儲(chǔ)引擎,但Cloud Platform提供多個(gè)。
Google Cloud Platform游戲數(shù)據(jù)庫(kù)解決方案
使用Cloud SQL Second Generation作為移動(dòng)游戲后端數(shù)據(jù)庫(kù)
在Cloud Engine上部署MongoDB
如何使用熱備份設(shè)置PostgreSQL以實(shí)現(xiàn)高可用性和復(fù)制
分析
分析已成為現(xiàn)代游戲的重要組成部分。在線服務(wù)和游戲客戶(hù)端都可以將分析和遙測(cè)事件發(fā)送到公共收集點(diǎn),并在那里存儲(chǔ)到數(shù)據(jù)庫(kù)中。然后,從游戲程序員和設(shè)計(jì)師到商業(yè)情報(bào)分析師和客戶(hù)服務(wù)代表,每個(gè)人都可以查詢(xún)這些事件。隨著正在收集的數(shù)據(jù)分析的復(fù)雜性增加,這些事件需要新的格式以提供更方便快捷的查詢(xún)。
過(guò)去十年中,一個(gè)基于Google發(fā)布的成果的開(kāi)源框架Apache?Hadoop?迅速普及。Hadoop生態(tài)系統(tǒng)的擴(kuò)張?jiān)黾恿藦?fù)雜批量提取、轉(zhuǎn)換和加載(ETL)操作的使用,以便將分析事件格式化并存入數(shù)據(jù)倉(cāng)庫(kù)。MapReduce的使用又加快了可執(zhí)行結(jié)果的交付速度,而這一加速又有助于實(shí)現(xiàn)新的、更加計(jì)算密集型的分析。
與此同時(shí),云端可用的技術(shù)也在不斷發(fā)展。其中許多作為托管服務(wù)提供,可以快速學(xué)習(xí)并且不需要專(zhuān)門(mén)的操作人員。Google最新的流式ETL范例為批處理和流處理提供了統(tǒng)一的方法,既作為托管云服務(wù)提供,也通過(guò)開(kāi)源項(xiàng)目Apache Beam提供。云端數(shù)據(jù)存儲(chǔ)價(jià)格的持續(xù)下降,使得在大規(guī)模的托管云數(shù)據(jù)庫(kù)中保存大量日志和分析事件成為可能。這些數(shù)據(jù)庫(kù)優(yōu)化了數(shù)據(jù)的寫(xiě)入和讀取方式,其最新的查詢(xún)引擎能夠在幾秒鐘內(nèi)聚合TB級(jí)別的數(shù)據(jù)。有關(guān)這方面的示例,請(qǐng)參閱在5秒鐘內(nèi)分析500億次維基百科單頁(yè)點(diǎn)閱。
Google Cloud Platform游戲分析解決方案
構(gòu)建移動(dòng)游戲分析平臺(tái)-參考架構(gòu)
將Firebase Analytics數(shù)據(jù)導(dǎo)入BigQuery
后續(xù)事項(xiàng)
在線游戲解決方案遵循一種常見(jiàn)模式,即客戶(hù)端與服務(wù)和游戲服務(wù)器的前端進(jìn)行通信,后者與分析和狀態(tài)存儲(chǔ)的后端進(jìn)行通信。您可以在本地、云端或兩者的混合環(huán)境中運(yùn)行前述的所有組件。如需更深入地了解這些模式,請(qǐng)參閱游戲解決方案。