華文網

韓偉:解謎騰訊遊戲海量服務架構

更多騰訊海量技術文章,請關注雲+社區:https://cloud.tencent.com/developer

網路遊戲和其他互聯網服務一樣,需要面對承載海量使用者的壓力,同時還需要滿足遊戲所要求的低延遲、業務邏輯高複雜度的特性。

騰訊遊戲研發部資深架構師韓偉為大家帶來了“解謎騰訊遊戲海量服務架構”的主題分享。

韓偉

對於遊戲開發者來說,全區的好處在於開服合服很簡單。這個簡單體現在三點。第一是把兩個伺服器合在一起導入並且合併資料,第二是負載均衡,

運維操作比較簡單。第三點就是有穩定性,全區架構中的所有伺服器都是玩家的備份伺服器,只要架構有足夠彈性,就可以在一部跟伺服器出故障的情況下使玩家不受影響。

韓偉講解到,全區架構的核心就是要有分散式的設計和實踐,而分散式系統的門檻就是通信和緩存。因為多個進程之間的相互協作就需要一個很好的通信機制。此外,由於遊戲服務是一個帶狀態的服務,

它的進程裡面往往是存有很多資料而且玩家會頻繁發出指令,延遲要求十分苛刻,但問題就在於很多機器、進程之間的記憶體是不通的,要讓它們協調運作就需要考慮到緩存的事情。

韓偉接著介紹了騰訊雲對於遊戲的分佈進程集群圖。在集群圖中,不管介入進程也好,邏輯進程也好,都是在一個統一的集群當中。在騰訊的實踐當中,有的項目使用這個來充當集群中心,

即由一個集群中心管理。有了集群中心,集群進程之間才能互相知道後面有哪些服務,該發給誰,或者任何一個邏輯進程只負責某一個功能。當然,騰訊還有別的集群方案,比如區域中心化的管理系統,在這個集群中,每一個邏輯進程其實都相當於小的集群中心,它們會自己相互協調。它們當中的任意節點都能夠充當這個集群中心的管理。在騰訊的實際運營中,
我們發現,把進程放在不同的伺服器上運行,可以達到負載均衡。因為如果機器本身能力強大的話,可以把一些不同功能的服務拆分到不同進程中。所以如果某個進程出現問題,可以在代碼層面很快得知哪一塊可能是有問題的,不用在全功能的代碼裡排查問題。

接下來,韓偉介紹了騰訊雲的分散式通信,雖然都是運用訊息佇列技術,但和現在的分散式通信不同的是,

騰訊的訊息佇列不一定有一個訊息佇列服務的進程,而每一個消息的收發端可能都是一個訊息佇列服務,這樣可以明顯減少50%的傳遞時間。騰訊攻破的另一難點就是資料儲存。騰訊的分散式儲存系統可以達到負載均衡。當主機斷了時,可以很快切換到熱備機上,資料也不需要準備,因為每個資料儲存其實都是同步的。

對於第二個門檻——緩存,韓偉指出最大的問題就是有異常,比如有邏輯根據用戶端計算下來的結果,就不能訪問原來的進程,可能訪問到別的進程上面去。而騰訊雲的伺服器集群之間,邏輯進程還是會按照正常的雜湊結果,把這個資料轉化給有緩存的地方,這樣對於用戶端來說,就相當於連接哪個都是相同的,只是連接錯誤的延遲會稍高一些。

歡迎閱讀原文,下載現場PPT乾貨!

比如有邏輯根據用戶端計算下來的結果,就不能訪問原來的進程,可能訪問到別的進程上面去。而騰訊雲的伺服器集群之間,邏輯進程還是會按照正常的雜湊結果,把這個資料轉化給有緩存的地方,這樣對於用戶端來說,就相當於連接哪個都是相同的,只是連接錯誤的延遲會稍高一些。

歡迎閱讀原文,下載現場PPT乾貨!