Google Cloud構(gòu)建移動(dòng)游戲分析平臺(tái) 參考架構(gòu),谷歌云游戲未來的計(jì)劃Google Cloud構(gòu)建移動(dòng)游戲分析平臺(tái) 參考架構(gòu)移動(dòng)游戲應(yīng)用生成大量的玩家遙測(cè)和游戲事件數(shù)據(jù)。這些數(shù)據(jù)有可能提供有關(guān)玩家行為及其與游戲互動(dòng)的數(shù)據(jù)分析。移動(dòng)游戲的本質(zhì),即大量客戶端設(shè)備、不規(guī)則和慢速的互聯(lián)網(wǎng)連接、電池和電源管理問題等意味......
移動(dòng)游戲應(yīng)用生成大量的玩家遙測(cè)和游戲事件數(shù)據(jù)。這些數(shù)據(jù)有可能提供有關(guān)玩家行為及其與游戲互動(dòng)的數(shù)據(jù)分析。移動(dòng)游戲的本質(zhì),即大量客戶端設(shè)備、不規(guī)則和慢速的互聯(lián)網(wǎng)連接、電池和電源管理問題等意味著玩家遙測(cè)和游戲事件分析面臨著獨(dú)特的挑戰(zhàn)。
該參考架構(gòu)提供了一種在Google Cloud Platform上收集、存儲(chǔ)和分析大量玩家遙測(cè)數(shù)據(jù)的高級(jí)方法。
更具體地說,您將學(xué)習(xí)兩種用于分析移動(dòng)游戲事件的主要架構(gòu)模式:
使用流處理模式實(shí)時(shí)處理各個(gè)事件
使用批處理模式批量處理聚合事件
圖1:游戲遙測(cè)參考架構(gòu)
圖1顯示了兩種模式的處理流水線,以及一些可選組件,以進(jìn)一步探索、可視化和共享結(jié)果。參考架構(gòu)具有高可用性,可以隨著數(shù)據(jù)量的增加而擴(kuò)縮。另請(qǐng)注意,此架構(gòu)僅由數(shù)據(jù)分析流水線的托管服務(wù)組成,無需運(yùn)行虛擬機(jī)或管理操作系統(tǒng)。如果您的游戲服務(wù)器通過App Engine處理用戶身份驗(yàn)證,則尤其如此。本文的其余部分將逐步介紹此架構(gòu)。
使用流處理模式的實(shí)時(shí)事件處理
本節(jié)探討了一個(gè)示例架構(gòu)模式,它從許多不同的數(shù)據(jù)源同時(shí)提取、處理和分析大量事件。處理過程在游戲中的事件展開時(shí)發(fā)生,使您能夠?qū)崟r(shí)響應(yīng)并做出決策。
許多移動(dòng)游戲會(huì)產(chǎn)生大量的事件消息。有些是由玩家觸發(fā),有些是在一天中的某個(gè)時(shí)間觸發(fā)等等。因此,數(shù)據(jù)集是無限制的,您不知道要提前處理多少事件。對(duì)此,正確的方法是使用流處理執(zhí)行引擎處理數(shù)據(jù)。
想象一下,您的移動(dòng)應(yīng)用是一個(gè)角色扮演游戲,允許玩家通過接受任務(wù)擊敗強(qiáng)大的怪物來對(duì)抗邪惡勢(shì)力。為了跟蹤玩家的進(jìn)度,典型的事件消息包括玩家的唯一標(biāo)識(shí)符、事件時(shí)間戳、指示任務(wù)的指標(biāo)、玩家的當(dāng)前生命值等等。在某種程度上它看起來與本示例類似,顯示了一個(gè)事件標(biāo)識(shí)符為
playerkillednpc
的戰(zhàn)斗結(jié)束事件消息。
{ | |
eventTime:20151027T20:34:12.675362426+08:00, | |
userId:gamer@example.com, | |
sessionId:b6ff88810c309add374cc32052cee256, | |
eventId:playerkillednpc, | |
… | |
attackRoll:17, | |
damageRoll:13 | |
} |
此示例包含與戰(zhàn)斗相關(guān)的事件,但事件消息可包括與您的業(yè)務(wù)相關(guān)的任何類型的信息,例如,游戲內(nèi)的購(gòu)買事件。
由于您無法預(yù)測(cè)將來要對(duì)您的數(shù)據(jù)做出哪些操作,一個(gè)很好的策略是盡可能多地記錄數(shù)據(jù)點(diǎn)。這為您將來的數(shù)據(jù)查詢提供了所需的其他上下文。例如,以下哪個(gè)事件數(shù)據(jù)更具洞察力,是玩家在游戲中進(jìn)行了價(jià)值50美分的購(gòu)買行為,還是他們?cè)谌蝿?wù)15中為了對(duì)抗頭目而購(gòu)買了強(qiáng)大的法術(shù),或者玩家在沒有購(gòu)買該法術(shù)時(shí),僅30分鐘內(nèi)就被該頭目連續(xù)擊敗了5次?如果能夠捕獲豐富的事件數(shù)據(jù),就可讓您詳細(xì)了解游戲中正在發(fā)生的事情。
消息來源:移動(dòng)設(shè)備還是游戲服務(wù)器?
無論事件消息的內(nèi)容字段如何,您都必須決定是將事件消息直接從運(yùn)行移動(dòng)應(yīng)用的最終用戶設(shè)備發(fā)國(guó)際快遞Cloud Pub/Sub提取層,還是通過游戲服務(wù)器發(fā)快遞。通過游戲服務(wù)器發(fā)快遞事件消息的最大優(yōu)點(diǎn)是身份驗(yàn)證和驗(yàn)證由您的應(yīng)用處理。缺點(diǎn)是需要額外的服務(wù)器處理能力來處理來自移動(dòng)設(shè)備的事件消息的負(fù)載。
注意:要直接從手機(jī)向Cloud Pub/Sub發(fā)快遞消息,您需要手動(dòng)處理客戶端應(yīng)用的身份驗(yàn)證和密鑰管理。這可能是一項(xiàng)非常重要的工作。如果采用這種方法,一種方案是在每一代移動(dòng)應(yīng)用中部署一個(gè)新的服務(wù)帳號(hào),并為該帳號(hào)關(guān)聯(lián)一個(gè)不同的Cloud Pub/Sub主題。這將允許您隨著時(shí)間的推移輪播您的密鑰。要提升安全性,您還可以包含可由Cloud Dataflow驗(yàn)證的簽名。
圖2:實(shí)時(shí)處理來自游戲客戶端和游戲服務(wù)器的事件
無論數(shù)據(jù)源如何,后端架構(gòu)基本保持不變。如圖2所示,這個(gè)架構(gòu)有五大部分,包括:
1、實(shí)時(shí)事件消息由大量數(shù)據(jù)源(如數(shù)百萬個(gè)移動(dòng)應(yīng)用)發(fā)快遞。
2、身份驗(yàn)證由游戲服務(wù)器處理。
3、Cloud Pub/Sub提取并臨時(shí)存儲(chǔ)這些消息。
4、Cloud Dataflow將JSON事件轉(zhuǎn)換為基于架構(gòu)的結(jié)構(gòu)化數(shù)據(jù)。
5、這些數(shù)據(jù)被加載到BigQuery分析引擎中。
Cloud Pub/Sub:大規(guī)模提取事件
要處理此負(fù)載,您需要一個(gè)能夠接收和臨時(shí)存儲(chǔ)這些事件消息的可擴(kuò)縮服務(wù)。由于每個(gè)單獨(dú)的事件都非常小,因此相比整體存儲(chǔ)要求,消息總數(shù)才更值得注意。
此提取服務(wù)的另一個(gè)要求是允許多種輸出方法。這意味著事件應(yīng)該可以被多個(gè)目的地提取。最后,應(yīng)該在充當(dāng)隊(duì)列的服務(wù)(每個(gè)目的地輪詢以獲取新消息)和推快遞方法之間選擇其一,以便在收到事件時(shí)主動(dòng)發(fā)快遞事件。
幸運(yùn)的是,Cloud Pub/Sub服務(wù)提供了所有這些功能。例如下圖3顯示的推薦提取層,它能夠每秒處理數(shù)百萬條消息,并在永久性存儲(chǔ)上存儲(chǔ)7天之久。Cloud Pub/Sub采用發(fā)布/訂閱模式,因此您可以讓一個(gè)或多個(gè)發(fā)布商向一個(gè)或多個(gè)主題發(fā)快遞消息。此外,每個(gè)主題也可以有多個(gè)訂閱者。
圖3:具有永久性存儲(chǔ)的Cloud Pub/Sub發(fā)布訂閱模型
您可以選擇主題數(shù)量和每個(gè)主題的分組。因?yàn)橹黝}數(shù)量與您創(chuàng)建的Cloud Dataflow流水線數(shù)量之間存在直接關(guān)系,所以最好將邏輯連接的事件分組。例如,發(fā)布者可以是單個(gè)移動(dòng)設(shè)備或游戲服務(wù)器,而多個(gè)發(fā)布者又可以訂閱單個(gè)主題。您需要的只是通過HTTPS進(jìn)行身份驗(yàn)證和發(fā)快遞格式正確的消息的能力。
Cloud Pub/Sub服務(wù)接收消息(在本例中是玩家遙測(cè)事件)后,就會(huì)將其永久地存儲(chǔ)在Message Store中,直到每個(gè)主題訂閱都已經(jīng)檢索到該消息。
Cloud Dataflow流處理流水線
Cloud Dataflow提供了一種高級(jí)語言,可以輕松地描述數(shù)據(jù)處理流水線。您可以使用Cloud Dataflow托管服務(wù)運(yùn)行這些流水線。Cloud Dataflow流水線以流處理模式運(yùn)行,并通過訂閱在消息到達(dá)時(shí)從Cloud Pub/Sub主題獲取消息。然后,Cloud Dataflow會(huì)在將消息添加到BigQuery表之前進(jìn)行必需的處理操作。
此處理可以采用簡(jiǎn)單的元素智能形式,例如將所有用戶名設(shè)置為小寫;或者將元素與其他數(shù)據(jù)源連接,例如將用戶名表加入到玩家統(tǒng)計(jì)信息中。
圖4:將JSON消息轉(zhuǎn)換為BigQuery表格式
Cloud Dataflow可以執(zhí)行任意數(shù)量的數(shù)據(jù)處理任務(wù),包括輸入數(shù)據(jù)的實(shí)時(shí)驗(yàn)證。一個(gè)用例是作弊檢測(cè),例如突出顯示最大生命值超出合理范圍的玩家。另一個(gè)用例是數(shù)據(jù)清理,例如確保事件消息格式正確并與BigQuery架構(gòu)匹配。
圖4中的示例解組了來自游戲服務(wù)器的原始JSON消息,并將其轉(zhuǎn)換為BigQuery架構(gòu)。關(guān)鍵是您無需管理任何服務(wù)器或虛擬機(jī)來執(zhí)行此操作,Cloud Dataflow就可以啟動(dòng)、運(yùn)行和停止計(jì)算資源以并行處理您的流水線。不僅如此,您還可以在進(jìn)行流處理和批處理時(shí)使用相同的代碼。
開源Cloud Dataflow SDK提供與Cloud Dataflow程序執(zhí)行獨(dú)立的流水線執(zhí)行。具體來說,您的Cloud Dataflow程序構(gòu)造流水線,而您編寫的代碼生成一系列由流水線運(yùn)行程序執(zhí)行的步驟。流水線運(yùn)行程序可以是GCP上的Cloud Dataflow托管服務(wù)、Spark和Flink之類的第三方運(yùn)行程序服務(wù),也可以是直接在本地環(huán)境中執(zhí)行步驟的本地流水線運(yùn)行程序(尤為適合開發(fā)和測(cè)試)。
Cloud Dataflow確保每個(gè)元素只處理一次,您還可以利用時(shí)間窗口和觸發(fā)器功能以根據(jù)事件發(fā)生的實(shí)際時(shí)間(事件時(shí)間)聚合事件,而不是根據(jù)將這些事件發(fā)國(guó)際快遞Cloud Dataflow的時(shí)間(處理時(shí)間)。雖然由于移動(dòng)互聯(lián)網(wǎng)連接或電池電量耗盡等問題,某些消息可能會(huì)從數(shù)據(jù)源開始延遲發(fā)快遞,但您仍希望最終按照用戶會(huì)話將事件分組。借助Cloud Dataflow的內(nèi)置會(huì)話窗口功能即可實(shí)現(xiàn)。請(qǐng)參閱批處理之外的世界:流處理入門以了解數(shù)據(jù)窗口的策略。
或者,如果您的事件包含唯一的會(huì)話字段,例如通用唯一標(biāo)識(shí)符(UUID),您也可以使用此密鑰對(duì)相關(guān)事件進(jìn)行分組。最合適的選擇視您的具體情況而定。
BigQuery:用于大規(guī)模數(shù)據(jù)分析的完全托管數(shù)據(jù)倉(cāng)庫(kù)
BigQuery由兩大部分組成,包括一個(gè)存儲(chǔ)系統(tǒng),通過地理冗余和高可用性提供數(shù)據(jù)的永久存儲(chǔ)。另一個(gè)是分析引擎,使您能夠?qū)Υ罅繑?shù)據(jù)集運(yùn)行類似SQL的查詢。由于BigQuery將其數(shù)據(jù)組織到可包含多個(gè)表的數(shù)據(jù)集中,因此需要為每個(gè)表定義一個(gè)架構(gòu),上一節(jié)就介紹過Cloud Dataflow的主要作業(yè)是使用內(nèi)置的BigQuery連接器將JSON格式的原始事件數(shù)據(jù)構(gòu)建為BigQuery架構(gòu)結(jié)構(gòu)。
將數(shù)據(jù)加載到BigQuery表后,您可以對(duì)其運(yùn)行交互式SQL查詢以提取有價(jià)值的情報(bào)。BigQuery是為大規(guī)模數(shù)據(jù)構(gòu)建的,允許您對(duì)具有快速響應(yīng)時(shí)間的PB級(jí)數(shù)據(jù)集運(yùn)行聚合查詢。這非常適合交互式分析。
數(shù)據(jù)可視化工具
Google Data Studio允許您創(chuàng)建和共享訪問各種數(shù)據(jù)源(包括BigQuery)的交互式信息中心。
不僅如此,BigQuery還集成了幾種流行的第三方BI和可視化工具,例如Tableau和QlikView。如果您熟悉Jupyter(以前稱為IPython)筆記本,Cloud Datalab服務(wù)也提供與BigQuery的內(nèi)置連接。最后,您可以直接從Google表格和Microsoft Excel運(yùn)行BigQuery查詢。
使用批處理模式進(jìn)行批量處理
另一個(gè)主要模式是定期處理不要求實(shí)時(shí)的大型有界數(shù)據(jù)集。批處理流水線通常用于創(chuàng)建報(bào)告或與實(shí)時(shí)數(shù)據(jù)源相結(jié)合,以實(shí)現(xiàn)兩全其美的結(jié)果,即得到可靠的歷史數(shù)據(jù),包括通過實(shí)時(shí)流處理流水線傳入的最新信息。
圖5:從游戲服務(wù)器批處理事件和日志
Cloud Storage是存儲(chǔ)大文件的推薦方案。它是一種具備耐用性、高可用性且經(jīng)濟(jì)高效的對(duì)象存儲(chǔ)服務(wù)。但您可能會(huì)疑惑,如何先將數(shù)據(jù)導(dǎo)入Cloud Storage?答案取決于您的數(shù)據(jù)源,這也是接下來幾節(jié)將介紹的主題。其中您將了解三種不同的數(shù)據(jù)源場(chǎng)景,包括本地部署、其他云提供商和GCP。
場(chǎng)景1:從本地服務(wù)器傳輸文件
您可以使用多種方法從本地?cái)?shù)據(jù)中心安全地傳輸日志文件。最常見的方法是使用開源
gsutil
命令行實(shí)用程序來設(shè)置周期性文件傳輸。
gsutil
命令提供了一些有用的功能,包括多線程并行上傳大量文件、自動(dòng)同步本地目錄、大文件的可恢復(fù)上傳,以及對(duì)于非常大的文件,將文件分成更小的部分并并行上傳這些小文件。這些功能可縮短上傳時(shí)間,并盡量利用您的網(wǎng)絡(luò)連接。
如果您沒有足夠的互聯(lián)網(wǎng)帶寬來實(shí)現(xiàn)及時(shí)上傳,您可以使用直接對(duì)等互連或運(yùn)營(yíng)商對(duì)等互連直接連接到GCP?;蛘?,如果您希望發(fā)快遞物理媒體,那么可使用一個(gè)名為離線媒體導(dǎo)入/導(dǎo)出的第三方服務(wù)以接收您的媒體并代您進(jìn)行上傳。
場(chǎng)景2:從其他云提供商傳輸文件
某些日志文件可存儲(chǔ)在其他云提供商處。也許您在那里運(yùn)行游戲服務(wù)器并將日志輸出到該云提供商的存儲(chǔ)服務(wù)?;蛘吣褂镁哂心J(rèn)存儲(chǔ)目標(biāo)的服務(wù)。例如,Amazon Cloudfront(一種內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù))將其日志存儲(chǔ)在Amazon S3存儲(chǔ)分區(qū)中。幸運(yùn)的是,將數(shù)據(jù)從Amazon S3遷移到Cloud Storage非常簡(jiǎn)單。
如果您每天將大量文件從Amazon S3傳輸?shù)紺loud Storage,則可以使用Storage Transfer Service從包括Amazon S3和HTTP/HTTPS服務(wù)在內(nèi)的數(shù)據(jù)源傳輸文件。Storage Transfer Service提供了多種高級(jí)選項(xiàng),以便您可以定期設(shè)置周期性傳輸。該服務(wù)利用主要云提供商之間的大網(wǎng)絡(luò)帶寬,并使用先進(jìn)的帶寬優(yōu)化技術(shù)來實(shí)現(xiàn)非常高的傳輸速度。
該指南是描述使用此服務(wù)進(jìn)行傳輸時(shí),每次傳輸開銷1 TB10 TB或更多數(shù)據(jù)量,因?yàn)樗梢怨?jié)省在多臺(tái)服務(wù)器上運(yùn)行場(chǎng)景1中提到的
gsutil
工具的操作開銷。對(duì)于較小規(guī)模的傳輸,或者您需要每天多次傳輸數(shù)據(jù),則場(chǎng)景1中提到的
gsutil
工具更為適合。
場(chǎng)景3:數(shù)據(jù)已經(jīng)在GCP中
在某些情況下,您想要的數(shù)據(jù)會(huì)默認(rèn)自動(dòng)存儲(chǔ)在Cloud Storage中。例如,可以通過您的Google Play開發(fā)者帳號(hào)下的Cloud Storage存儲(chǔ)分區(qū)中獲得來自Google Play商店的數(shù)據(jù)(包括評(píng)論、財(cái)務(wù)報(bào)告、安裝、崩潰和應(yīng)用無響應(yīng)(ANR)報(bào)告)。在這些情況下,您可以將數(shù)據(jù)保存在導(dǎo)出的原始存儲(chǔ)分區(qū)中,除非您有理由將其移動(dòng)到另一個(gè)存儲(chǔ)分區(qū)。
異步傳輸服務(wù)模式
一種長(zhǎng)期且可擴(kuò)縮的方法是實(shí)現(xiàn)異步傳輸服務(wù)模式,即您可以使用一個(gè)或多個(gè)隊(duì)列和消息傳遞來基于事件或觸發(fā)器啟動(dòng)傳輸。例如,當(dāng)新的日志文件寫入磁盤或源文件存儲(chǔ)空間時(shí),會(huì)向隊(duì)列發(fā)快遞一條消息,然后工作器承擔(dān)成功將該對(duì)象傳輸?shù)紺loud Storage的作業(yè),僅在成功完成傳輸時(shí),才會(huì)從隊(duì)列中移除該消息。
替代的批處理模式:從Cloud Storage直接加載到BigQuery
難道在Cloud Storage和BigQuery之間必須使用Cloud Dataflow?答案是否定的,因?yàn)槟梢酝ㄟ^提供一個(gè)架構(gòu)并啟動(dòng)加載作業(yè),直接從Cloud Storage中的JSON文件加載文件?;蛘?,您可以直接查詢?cè)贑loud Storage存儲(chǔ)分區(qū)中的CSV、JSON或Cloud Datastore備份文件。此入門解決方案也可以滿足需求,但請(qǐng)記住使用Cloud Dataflow可獲得如下好處:
在提交到存儲(chǔ)之前轉(zhuǎn)換數(shù)據(jù)。例如,您可以在將數(shù)據(jù)加載到BigQuery之前聚合數(shù)據(jù),將不同類型的數(shù)據(jù)分組到不同的表中。這可以通過最大限度地減少您查詢的行數(shù)來降低BigQuery的成本。在實(shí)時(shí)場(chǎng)景中,您可以使用Cloud Dataflow計(jì)算單個(gè)會(huì)話或公會(huì)和團(tuán)隊(duì)等同類群組中的排行榜。
可互換地使用在Cloud Dataflow中編寫的流處理和批處理數(shù)據(jù)流水線。更改數(shù)據(jù)源和數(shù)據(jù)接收器,例如將Cloud Pub/Sub更改為Cloud Storage,相同的代碼將在兩種使用場(chǎng)景中都有效。
更靈活的數(shù)據(jù)庫(kù)架構(gòu)。例如,如果您隨著時(shí)間的推移向事件添加了其他字段,則可能希望將其他原始JSON數(shù)據(jù)添加到架構(gòu)中的catchall字段,并使用BigQuery JSON查詢功能在該字段內(nèi)查詢。然后,您可以查詢多個(gè)BigQuery表,即使源事件嚴(yán)格要求使用不同的架構(gòu)也是如此,如圖6所示。
圖6:用于捕獲原始JSON中的新事件字段的附加列
參考架構(gòu)的操作注意事項(xiàng)
建立并創(chuàng)建流水線后,就必須監(jiān)控性能和可能發(fā)生的任何異常。Cloud Dataflow監(jiān)控用戶界面提供了一個(gè)圖形視圖以監(jiān)控您的數(shù)據(jù)流水線作業(yè)以及關(guān)鍵指標(biāo)。您可以在圖7中看到此示例的截圖。
圖7:內(nèi)置Cloud Dataflow監(jiān)控控制臺(tái)
Cloud Dataflow控制臺(tái)提供有關(guān)流水線執(zhí)行圖的信息以及當(dāng)前性能統(tǒng)計(jì)信息,例如每一步處理的消息數(shù)、估計(jì)的系統(tǒng)延遲和數(shù)據(jù)水印。如需了解Cloud Dataflow與Stackdriver Logging服務(wù)集成的詳細(xì)信息,您可以查看圖8中的示例截圖。
圖8:Stackdriver Logging與Cloud Dataflow集成
特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場(chǎng)。如有關(guān)于作品內(nèi)容、版權(quán)或其它問題請(qǐng)于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號(hào)密碼登錄
平臺(tái)顧問
微信掃一掃
馬上聯(lián)系在線顧問
小程序
ESG跨境小程序
手機(jī)入駐更便捷
返回頂部