本文討論將計算機(jī)游戲服務(wù)器遷移到Google Cloud Platform(GCP)的注意事項。當(dāng)今,大多數(shù)在線游戲都具有在虛擬或物理機(jī)器上運行的專用游戲服務(wù)器進(jìn)程。本指南適用于熟悉在本地或云端運行專用游戲服務(wù)器進(jìn)程的游戲開發(fā)者和運營團(tuán)隊。雖然在將游戲服務(wù)器遷移到GCP時需要考慮很多因素,但由此提升的靈活性可以帶來很多好處,包括有利的結(jié)算模式,業(yè)界領(lǐng)先的全球基礎(chǔ)架構(gòu)和最新的云技術(shù)。本指南旨在幫助您了解如何遷移。游戲行業(yè)沒有標(biāo)準(zhǔn)術(shù)語,因此就本文而言:
機(jī)器是指運行游戲服務(wù)器進(jìn)程的物理機(jī)器或虛擬機(jī)。
游戲服務(wù)器是指游戲服務(wù)器進(jìn)程。多個游戲服務(wù)器進(jìn)程可以在一臺機(jī)器上同時運行。
實例是指單個游戲服務(wù)器進(jìn)程。
在GCP上運行游戲服務(wù)器的原因
越來越多的游戲工作室正在將他們的專用游戲服務(wù)器轉(zhuǎn)移到云端,試圖填補自有硬件設(shè)施與游戲發(fā)布期間難以估計的玩家需求之間的差距。如果能夠無縫處理激增的服務(wù)器負(fù)載以及按需付費,就可以消除因發(fā)布游戲而帶來的巨大風(fēng)險。遷移帶來的一些好處包括:
Google Compute Engine虛擬機(jī)按分鐘而不是按小時計費。持續(xù)使用折扣會自動應(yīng)用于您運行的虛擬機(jī),因此您無需預(yù)留容量和承擔(dān)相關(guān)的費用風(fēng)險。
自定義虛擬機(jī)規(guī)模允許您僅支付專用游戲服務(wù)器實際使用的CPU和內(nèi)存量。
Compute Engine虛擬機(jī)啟動非??欤瑫r間僅為幾秒鐘(Linux)或幾分鐘(Windows)。
廣泛的區(qū)域可用性使您可以將游戲服務(wù)器部署在靠近客戶的位置。默認(rèn)的全局網(wǎng)絡(luò)空間允許這些服務(wù)器與現(xiàn)有服務(wù)輕松通信,而無需額外的工作。
只需幾分鐘即可為開發(fā)、質(zhì)量檢查測試或事件預(yù)配一次性環(huán)境,并在不再需要時立即將其丟棄,無需承擔(dān)任何長期成本且不會影響其他環(huán)境。
您可將托管在Google Cloud Storage中的構(gòu)建輕松配置為CDN來源,也可直接從存儲分區(qū)中分發(fā)構(gòu)建。
通過單獨磁盤上的構(gòu)建工件的快照,可輕松實現(xiàn)操作系統(tǒng)升級,還可使用符號鏈接將構(gòu)建提升到生產(chǎn)環(huán)境。
使用項目來分離環(huán)境
將開發(fā)、測試、預(yù)演環(huán)境和公共環(huán)境按照不同的項目分離是業(yè)界的常見做法。這是因為項目是輕量級的,可以輕松創(chuàng)建和銷毀。另一種流行的模式是為測試環(huán)境創(chuàng)建項目,部署構(gòu)建,在冒煙測試中進(jìn)行質(zhì)量檢查,并在構(gòu)建準(zhǔn)備好被提升或拒絕時銷毀項目。這也保證了資源和配額的分離。例如,測試中的錯誤構(gòu)建不會因過度消耗資源而影響生產(chǎn)服務(wù)。此外,銷毀項目時總是刪除其中的所有資源,確保您不會忘記刪除那些需付費的測試或開發(fā)環(huán)境。
將構(gòu)建遷移到云
將構(gòu)建上傳到Cloud Storage僅按每GB計算存儲費用。在云端,可將上傳的此構(gòu)建輕松用作CDN來源,或?qū)?gòu)建分發(fā)給其他工作室或承包商。您可以通過對象生命周期管理為上傳的對象設(shè)置生存時間,保證管理開銷的可管理性和費用限制。
分布
通常,業(yè)界會使用Cloud Storage等對象存儲或永久性磁盤等塊存儲來托管云端的資產(chǎn)和二進(jìn)制文件。如果您具有任何使用Amazon Web Service S3的現(xiàn)有進(jìn)程,則可輕松修改或擴(kuò)展這些進(jìn)程以使用Cloud Storage,因為它與API兼容。雖然將資產(chǎn)存儲在Cloud Storage是將構(gòu)建分發(fā)給客戶、CDN甚至遠(yuǎn)程辦公室的好方式,但從Cloud Storage復(fù)制到游戲服務(wù)器虛擬機(jī)可能會增加加載時間,因此不建議使用此方法。許多擁有大量專用游戲服務(wù)器的客戶已熟悉“復(fù)制”磁盤映像的模式,因為這些映像已擁有啟動新的專用游戲服務(wù)器虛擬機(jī)所必需的所有庫、資產(chǎn)和二進(jìn)制文件。此策略在GCP上與在本地或其他云端一樣有效。但是,建議將快照與只讀磁盤配對,如下一節(jié)所述,因為這具有明顯的優(yōu)勢。
將快照與只讀磁盤配對的策略
在大多數(shù)游戲中,操作系統(tǒng)和游戲服務(wù)器的構(gòu)建可以獨立更改。建議不要將游戲構(gòu)建放在操作系統(tǒng)磁盤上,而是放在單獨的永久性磁盤上,并將必要的構(gòu)建工件通過軟鏈接或符號鏈接的方式指向其預(yù)期的目錄。此設(shè)置創(chuàng)建了一個干凈的工作流,用于將多個構(gòu)建分發(fā)到虛擬機(jī)。只需將每個構(gòu)建放在其自己的磁盤上,將所有磁盤連接到虛擬機(jī),并在準(zhǔn)備好更改游戲服務(wù)器版本時更新符號鏈接即可。您可以保留不同磁盤上的舊構(gòu)建以實現(xiàn)快速回滾,直到您確信新版本穩(wěn)定后再斷開連接。您可以將永久性磁盤連接到多個虛擬機(jī),從而節(jié)省費用并且無需將資產(chǎn)分發(fā)給所有虛擬機(jī)。
在將此方法作為游戲開發(fā)流水線的一部分實現(xiàn)時,我們建議您為構(gòu)建系統(tǒng)配置必要的步驟來創(chuàng)建包含相應(yīng)目錄結(jié)構(gòu)中所有工件文件的磁盤。例如,您可以使用運行g(shù)cloud命令的簡單腳本,也可使用為您選擇的構(gòu)建系統(tǒng)運行GCP特定的插件。我們還建議您為磁盤創(chuàng)建多個副本,并讓虛擬機(jī)以平衡的方式連接到這些副本,以滿足吞吐量要求和管理故障風(fēng)險。請注意,您可以同時從單個快照創(chuàng)建多個永久性磁盤,這是快速生成同一游戲服務(wù)器構(gòu)建的多個磁盤副本的有效方法。
網(wǎng)絡(luò)
GCP運行在Google定制的專用光纖網(wǎng)絡(luò)上,在主要大城市接入點(PoP)和GCP數(shù)據(jù)中心之間提供極低的延遲。通過GCP的網(wǎng)絡(luò)模型,您可以盡可能地在托管服務(wù)器的區(qū)域與最靠近客戶ISP的Google PoP之間保持與Google網(wǎng)絡(luò)上至關(guān)重要的游戲內(nèi)容相關(guān)流量。與其他供應(yīng)商提供的更常見的hot-potato路由策略(試圖在離開虛擬機(jī)時立即將流量路由到公共互聯(lián)網(wǎng))相比,Google的網(wǎng)絡(luò)可以為您的玩家提供更高的可靠性和更可預(yù)測的延遲。
此外,GCP默認(rèn)是一個全局網(wǎng)絡(luò)空間。它無需使用VPN或其他網(wǎng)絡(luò)軟件連接不同的區(qū)域或地區(qū)。如果您在us-central1-b地區(qū)中啟動虛擬機(jī)而在eu-central1-a啟動另一個虛擬機(jī),并將它們配置為使用相同的網(wǎng)絡(luò),則它們可以相互連接而無需其他配置。地區(qū)之間的所有流量都保留在Google的專用網(wǎng)絡(luò)上,不會因BGP在公共互聯(lián)網(wǎng)上引起的額外跳躍而產(chǎn)生延遲。
項目之間的網(wǎng)絡(luò)
默認(rèn)情況下,您創(chuàng)建的每個GCP項目都代表其隔離的全局網(wǎng)絡(luò)。如果虛擬機(jī)在單獨的項目(不連接公共互聯(lián)網(wǎng))中,則它們將無法彼此通信。盡管有多種方法可以建立跨項目網(wǎng)絡(luò),但我們建議您使用單個項目來運行您希望在專用網(wǎng)絡(luò)空間中進(jìn)行相互通信的服務(wù)器和服務(wù)。
游戲服務(wù)器的GCP網(wǎng)絡(luò)
GCP上專用游戲服務(wù)器最常見的網(wǎng)絡(luò)模式是使用Google Cloud Platform Console創(chuàng)建游戲網(wǎng)絡(luò)。為此網(wǎng)絡(luò)配置適用于互聯(lián)網(wǎng)流量的游戲端口,以及用于運行狀況檢查、監(jiān)控或平臺服務(wù)通信的任何所需內(nèi)部端口。然后,在創(chuàng)建托管專用游戲服務(wù)器的虛擬機(jī)時指定此網(wǎng)絡(luò)。
最佳做法
將游戲服務(wù)器遷移到GCP后,您可能會發(fā)現(xiàn)進(jìn)一步優(yōu)化服務(wù)器構(gòu)建以使用GCP基礎(chǔ)架構(gòu)的好處。
vCPU優(yōu)化
每個vCPU的時鐘速度相當(dāng)穩(wěn)定,但Google提供了包含若干最新款I(lǐng)ntel CPU架構(gòu)的云區(qū)域。一些游戲客戶在使用架構(gòu)特定的標(biāo)志進(jìn)行編譯并在提供來自這些系列的CPU的區(qū)域中運行服務(wù)器時,發(fā)現(xiàn)Linux上的速度提升了高達(dá)20%。vCPU速度的這種一致性也適用于橫向擴(kuò)縮而不是縱向擴(kuò)縮到CPU密集型任務(wù)的方法。如果可能,使用工作器線程并并行化代碼以允許它使用多個CPU,而不是需要從幾個CPU中獲得更多的使用周期。
網(wǎng)絡(luò)優(yōu)化
雖然流量出口是收費的,但入口不收費。因此,您可以考慮非對稱通信模式,在這種模式中,來自客戶端的數(shù)據(jù)包的更新速率高于來自服務(wù)器的數(shù)據(jù)包的更新速率。很多時候,通過內(nèi)插或外推可以減輕較低服務(wù)器更新速率帶來的影響。此外,如果您的客戶端和服務(wù)器的封送處理/序列化代碼足夠有效,請考慮使用數(shù)據(jù)包壓縮來保持較小的數(shù)據(jù)包大小。
分析事件和日志記錄優(yōu)化
可以考慮為Google BigQuery或Cloud Storage建立一個高容量的分析事件和日志記錄路徑,并使每個游戲服務(wù)器進(jìn)程可以打開和關(guān)閉此功能。通過此方法,您可以快速調(diào)查報告的漏洞、分析游戲內(nèi)容以獲得平衡或生成ML訓(xùn)練數(shù)據(jù)。任一服務(wù)中存儲數(shù)據(jù)都很便宜(目前每月存儲5 TB數(shù)據(jù)的費用為102.40美元,且過往歷史記錄表明價格會穩(wěn)步下降),而且此數(shù)據(jù)還可設(shè)置為在給定日期后自動過期,使您可以輕松控制費用和數(shù)據(jù)量。
游戲狀態(tài)的外部化
我們在云游戲基礎(chǔ)架構(gòu)概覽中簡要介紹了外部化狀態(tài)的潛在優(yōu)勢。值得考慮的是,游戲狀態(tài)的哪些部分可以外部化。當(dāng)前可以實現(xiàn)一定數(shù)量的外部化狀態(tài),并且今后每天都會有更多的云技術(shù)可以提高這種能力。外部化狀態(tài)可以啟用許多有趣的功能,例如:
允許在玩家游玩期間在虛擬機(jī)之間遷移游戲服務(wù)器進(jìn)程,同時將中斷降至最低。這個功能可以在許多場景中使用,包括:
協(xié)同定位在同一區(qū)域甚至同一虛擬機(jī)上建立大量服務(wù)器內(nèi)通信的游戲服務(wù)器或服務(wù),而不需要提前預(yù)測用戶的流量模式。
隔離資源使用率較高的進(jìn)程。
無縫實時遷移進(jìn)程,無需關(guān)閉虛擬機(jī)以進(jìn)行更新,也無需在高峰需求過去后移除進(jìn)程以減少使用率。
允許多個進(jìn)程在模擬的不同部分工作,并且僅在更大的范圍內(nèi)以類似共享內(nèi)存的方式在彼此之間共享更新。
允許將狀態(tài)序列化保存到磁盤或共享給另一個游戲服務(wù)器,這可以為電子競技開辟新的可能性,例如:
服務(wù)器捕獲的權(quán)威重放與監(jiān)管鏈。
鏡像專用游戲服務(wù)器,可讓大量觀眾通過游戲客戶端實時觀看賽事。
后續(xù)步驟
云游戲基礎(chǔ)架構(gòu)概覽
架構(gòu):優(yōu)化分析事件和日志的大規(guī)模提取
在多個實例之間共享一個永久性磁盤
從快照創(chuàng)建永久性磁盤
試用其他Google Cloud功能。查閱我們的教程。