手機遊戲後臺服務整體架構

綜述

網絡遊戲發展了二十年,但是整體的後臺架構基本上是比較穩定的。從職能上來分,主要分爲周邊系統和對局。遊戲對局是整個遊戲最重要的部分,是遊戲體驗的基石。網絡遊戲所有的周邊系統都應該是爲了這個對局服務的,爲了讓玩家擁有更好的遊戲體驗而存在的。有些團隊,甚至會將周邊系統外包出去,集中精力開發遊戲對局。
網絡遊戲後臺的周邊系統,基本上是分爲接入,數據處理和數據存儲三個部分,周邊系統會通過tcp和玩家保持連接。此外,對於最爲重要的遊戲對局,一般來說是會單獨拉起一個進程來進行遊戲,爲了保證低延遲的遊戲體驗,這個對局服務會通過可靠udp來和玩家進行數據傳輸。一般來說,如下所示。
手遊架構圖
手機網絡遊戲的玩家一般的主要路徑就是登陸賬號,進入大廳,開啓對局,對局結算等步驟。中間穿插着諸如訪問商店,簽到,領取郵件等步驟。
這個時候,對於後臺而言,客戶端通過接入層接入了遊戲,雙方建立了長連接。客戶端通過該連接發送請求,接入層將該請求發送到數據處理層進行處理,數據處理層負責處理業務邏輯,同時將處理結果發送給數據存儲層進行落地。 當玩家發起了開始遊戲的請求後,遊戲後臺會在後臺進行匹配,在湊夠了足夠的開啓對局的人數後,就會拉起遊戲進程,並通過之前的長鏈接,將遊戲進程的ip端口和其他必要信息發送給玩家。

接入層

接入層主要是指後臺服務對外暴露的所有的出入口。比如說,所有遊戲都會有的登錄功能,遊戲後臺對遊戲運營人員暴露的管理接口等等,以及接入外部系統(支付,關係鏈,遊戲外的app等),都是接入層。
在接入層,主要的作用就是在玩家發起連接後,和玩家維護一個tcp的長連接。玩家的所有請求都可以通過這個長連接發送,同時遊戲後臺也可以通過對這個長連接是否存在來判斷玩家是否掉線。
另外一方面,爲了網絡遊戲的持續運營,遊戲側也需要提供大量的運營工具給到運營人員,一般來說,這部分工具對外暴露的被調接口,也可以算作是接入層。

分區分服

一般來說,接入層的另一個重要的工作就是分區分服。分區分服對遊戲來說是件很尋常的事情,早年的遊戲分區分服的原因大多是因爲性能原因,機器性能扛不住,只能進行分區分服。隨着現在架構和機器性能的改善,模塊的拆分,現在的遊戲,分區分服的原因基本都不是計算機技術的原因,更多是和渠道,遊戲內的經濟體系,蘋果安卓的限制等因素相關。
目前遊戲主要有兩種方式進行分區分服。
最乾脆的方法就是直接進行物理隔離,不同的服就是在不同的服務器組,擁有不同的數據存儲。這種方式最大的好處是,遊戲後臺在邏輯處理上基本不需要做任何處理就能進行分區分服。不太方便的地方就在於隔離了之後,跨服的匹配和對戰是很不方便的,另外在遊戲運營的後期,對遊戲進行合服也比較複雜。
另外的做法就是在邏輯上進行分區分服,不同的玩家在實際上接入的是同一個服務器,分區分服只是邏輯上的不通。這種邏輯上的分區分服可以有很多實現方式,比如說,在玩家建號的時候,在該玩家的uin中,設定其中的2到3位爲區服標識位即可。在遊戲的邏輯層,讓同一標識位的玩家相互可見,不同標識位的玩家不可見即可。這是目前比較常用的分區分服的手段,遊戲在實質上依舊是個全區全服的遊戲,只不過在部分地方(排行榜,經濟系統,好友等)對用戶進行了隔離。

數據處理

玩家在登陸游戲後,需要進行一系列的操作。在接入層通過proxy轉發或者直接將對應的請求轉發到不同的業務模塊上。業務模塊對複雜的業務邏輯進行處理。
一般來說,對於玩家的請求,除了類似拉取商店,公告等請求,都需要經過拉取玩家數據庫,處理數據,保存數據,回包等動作。
在數據處理層,除了關注玩家的請求是否被正確處理外,最爲重要的就是關注日誌了。

玩家請求異常失敗的處理

正確處理玩家請求是需要各個業務模塊自行保證的,但在一個涉及到多個模塊的玩家請求最終失敗的時候,如何正確的處理這個請求是一個難點。在遊戲中,一般來說不會去將玩家的請求作爲一個事務來進行處理。舉一個例子,玩家請求領取一封有附件的郵件,這個時候,在後臺的周邊系統中,至少會涉及到郵件和倉庫兩張表,有時候如果玩家領取來高級物品,可能還需要去賬號模塊請求增加積分等等。在這個過程中,如果有一個動作失敗了,比如倉庫模塊成功保存物品了,但是郵件的已讀狀態更新失敗了,將該玩家的請求進行回滾會是一件非常複雜的事情。該如何正確的處理這個情況是一個問題。(目前在做的遊戲是,遊戲側不做處理,記錄好日誌,如果有較大影響了,手動進行處理。)

日誌

遊戲內的日誌是非常關鍵的。日誌分爲兩種,一種是程序自身打出的日誌,另一種是用戶行爲日誌。程序自身的日誌可以用來輔助開發進行調試或其他作用。
程序內部的日誌,一般來說是用於遊戲開發階段定位問題的。線上的程序,日誌不宜打太具體,因爲線上的日誌太多,很容易就將日誌沖掉。線上的周邊模塊,一般來說能保存近兩天的debug日誌就已經很不錯了。
對於遊戲來說,記錄用戶的關鍵行爲的用戶行爲日誌是至關重要的。玩家的關鍵行爲記錄可以用來進行用戶行爲分析,客服檢驗關鍵信息,補償發放,防作弊行爲等。

數據存儲

負責處理網絡遊戲後臺產生的所有信息。一般來說,主要有玩家數據和日誌兩個部分。玩家數據無需多言。一般都存儲在遊戲的數據庫內。是用來保存玩家在遊戲過程中產生的數據。比如說玩家的金幣鑽石,道具,好友,歷史戰績等信息。
遊戲內需要存儲的日誌主要是用戶行爲日誌。這些日誌一般來說會以文件的形式保存在本地。同時也會存儲在獨立於遊戲的數據庫中,由於後續的數據分析。

對局服務器

對於網絡遊戲中,對局服務是整個遊戲最爲關鍵的部分了,是網絡遊戲的立足之本。對於非MMO的遊戲來說,遊戲的對局服務是和整個遊戲後臺周邊系統相對獨立的。一般來說,周邊系統只會在拉起對局時傳遞用戶信息,結束對局時接收結算信息,除此以外不會和遊戲對局進程有太過頻繁的交互。
遊戲對局一般來說,會維護一條和周邊系統的連接(可以是可靠udp也可以是tcp),用來和周邊系統進行必要的交互。同時會監聽一個udp端口,該端口用來接收玩家發過來的各種信息。對局服務作爲短期的一次性的進程存在的意義主要有三個。1. 對局服務的穩定性可以保證,一般來說,bug是會一直伴隨着遊戲存在的。容易出現的bug一般會在遊戲的開發和測試階段被暴露出來。而一些需要進程長時間存在纔有可能爆率出來的問題(尤其是內存泄露問題)在上線前不好暴露。通過降低進程存在的時間,就可以降低這類bug出現的頻率。同時也可以在出現bug的時候利用重啓來臨時解決 bug。2. 降低bug或崩潰帶來的影響。如果說對局進程是一個統一的大進程,當對局服務奔潰的時候,整個進程上承載的遊戲玩家都會受到影響。而保持小進程,則可以減少受影響的玩家。

遊戲外的系統

對於網絡遊戲而言,一般來說都需要對管理人員開放運營管理接口,同時需要提供一定的監控能力。包括服務器容量的監控,玩家的行爲追蹤分析的能力等。對於一些大公司而言,還會提供很多公共組件來幫助不同的遊戲運營等。

一般來說,遊戲後臺接入外部系統的方式有兩種,暴露被調端口和遊戲日誌。如圖所示。
手遊架構圖
遊戲運營管理人員會通過調用接口來進行對遊戲進行管理,運營人員通過日誌來分析玩家行爲,進而決定運營的策略。而一些有多款遊戲的公司或者渠道商,可能會提供給遊戲一些運營組件,比如騰訊的潘多拉,或者利用小程序等外部能力來豐富玩家等遊戲外體驗。這些組件,在遊戲客戶端以sdk的形式嵌入,在後臺則有自己的服務器,與遊戲後臺通過管理接口和遊戲日誌進行交互。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章