摘要:在技術上微信小游戲和小程序的區別是什么開發商在開發一款小游戲的時候通常會遇到什么問題怎么去規避和解決,來自騰訊游戲云資深架構師余國良,將會給我們帶來微信小游戲架構設計與開發方向。
轉載來源:云加社區
原作者:余國良
小游戲自發布以來,微信平臺上已經出現了不少現象級的小游戲,包括跳一跳。在技術上微信小游戲和小程序的區別是什么?開發商在開發一款小游戲的時候通常會遇到什么問題?怎么去規避和解決,來自騰訊游戲云資深架構師余國良,將會給我們帶來微信小游戲架構設計與開發方向。
微信小游戲的特點是什么?小游戲最大的特點是去中心化分發以及好友關系鏈的傳播。這里面會帶來很多機遇和挑戰,機遇就是有可能帶來爆款,挑戰是以往的經驗可能就不適用了,包括技術上的。
那么微信小游戲的特點對我們的架構提出哪些要求?這里我列舉了兩個要點。
第一個是全區全副的需求。為了充分利用微信的社交網絡,要求游戲是全區全服的。第二個要求就是在線擴縮容的需求,因為任何一款游戲都可能成為爆款,在微信上有幾何式的增長,所以幾乎成為剛需。
我們看一個案例,這個案例是我們騰訊云上一個真實客戶的案例。它的小游戲在上線很短的時間內從幾萬人飆升到200萬左右。這個客戶經歷了什么?首先游戲上線之后,很快發現流量增速迅速,系統流量不夠了,這個時候我們可以通過云主機在線分配。但是第一個瓶頸出現了,當吞吐量達到上線的時候很難進行擴展,他們連夜進行了調整,將實際數量迅速擴展到幾十個。但是接下來另外一個瓶頸又出現了,他們用的數據庫也是單數據庫,同樣有擴展性的問題。這個問題可以通過改用集群版數據庫來解決。最終雖然所有的問題得到了解決,但是耽誤了時間也產生了損失,他們在線人數也出現了比較大的下滑。
通過這個案例我們想說明的是,我們希望小游戲的架構足夠輕,足夠小,但是重點問題也需要提前考慮,避免問題爆發的時候產生不必要的損失。
那么我們怎么樣來設計架構,小游戲對我們提出這個要求,接下來我會從兩個層面來進行分析,首先是計算層面,再是存儲層面。
先看這么一個架構,我們不妨稱之為無狀態化的分層架構,簡單說就是按照節點的關系和按照架構關系分別進行銜接,然后下面這個節點靈活進行伸縮。
這個架構簡單使用應對一般的休閑性游戲也是夠用的,我們看一下它在騰訊云上的追加時間是什么樣的。國際客戶端通過CLB擴展平衡接入到后臺服務,我們經過BGT高防對游戲進行保護,當出現流量的時候,高防服務可以對流量進行清洗然后回收到系統中。我們用不同的彈性制作主來承載不同的服務,通過內網進行銜接以方便實現動態擴容。
這里用到一些騰訊云的產品我們做一些介紹,首先是CLB,騰訊的CLB單集群提供超過1.2億的最大連接數,輕松應對億級訪問量,單集群可處理峰值40GB/S的流量,每秒處理包量可達600萬。
第二個就是我們的彈性伸縮服務AS,彈性伸縮服務我們可以在不同的時期對集群的節點數量進行伸縮。我們的出發策略包括這么幾個,一個是定時策略、監控告警策略、手動擴縮容策略。在騰訊云上,一千臺云主機的平均耗時是63秒,接入彈性伸縮服務以及流動的基礎能力,我們可以很方便的對服務進行快速動態的擴縮容。
第三個就是我們的BGT高防服務,在必要的時候我們可以通過BGT高防對于游戲進行保護,它的特點首先平臺擁有T級的防護帶寬,然后有精準的算法,在提供防護的同時我們可以最大程度保障網絡覆蓋質量。
架構有什么優勢和局限性優勢就是可靠性高,單節點鼓掌不影響整體可用性,以及好擴展和收縮。局限性,無狀態化要求對存儲層補寫數據。對于這個問題我們往往把比較高的對象緩存到節點內存中,這對LB就提出一些要求。因為擴展中需要知道發送給某個對象的發送到哪個節點,它是要建立對象到節點的流動性關系,顯然通用的LB是沒有辦法做到這一點的。
另外一個問題在這個架構中同時節點沒有辦法發送請求,但是對于游戲來說,我們很多時候希望同時的節點之間發送請求。比如說我們向好友發送組隊邀請的時候,好友的對象和我的對象不在同一個節點,那么就需要將請求發送到好友的節點,然后再轉發到好友的客戶端。
但是對于無狀態化分層架構來說往往就需要通過共享數據,存在實時性和性能損耗的問題。為了解決這兩個問題,我們看一下星型的架構。
不同節點之間通過router進行剖析,實現節點之間共融的儀器。比如說A節點中的Player1對象要向發送B節點中的Play2對象發送請求、邀請,可以將消息發送到router,router再轉發到大節點處理之后再發送到朋友客戶端。在這個結構中,所有的節點都是對等的關系,中間的router可以實現互通,它是比較靈活。但是它有一個明顯的問題,router是一個單點,有容縮小和可擴展性。建立(英)可以實現主備的自動切換,主節點不行的時候可以切換到節點。他們之間的連接,我們可以把多結構連接在一起實現架構的擴展。比如說Player1在(英)發送A節點,Player發到B節點。當Player1向Player額2發送組隊邀請的時候,可以將消息先發送到router1,router1再轉發到router2,最終到達B節點。router能夠將消息發到對象,它就要保持全局的這樣一個裝。
我們看一下router做了哪些事情?收斂鏈接,簡化內部通信管理,建立通用的對象陸游機制,簡化游戲開發。第三通過router我們也可以實現負載均衡和廣播,router具有通用性,可以作為通用的游戲界面。
在擴展性方面,我們可以在兩個層面進行擴展,比如說可以發現節點不夠的時候可以進行添加,分散相應的router,然后加入到系統中來。當一個達到極限的時候,我們可以通過副機來進一步做擴展,添加新的。假設我們有0和1,需要添加2的時候這個流程可以是這樣的。我們先對2進行部署,當2起來的時候,router1和router2可以發現新節點,并且建立到它的連接。連接之后router2會向router1或者router0并且將自己的信息同步給router1和router0,這樣就建立了。當play2登錄到router2的時候,router2會將信息同步給router2和router0,這是架構的擴展過程。
這個圖是擴展的信息結構在騰訊云的實踐,像比較高的游戲,比如說坦克大戰游戲我們實行多點布局,比如說華南的玩家可以加入到華東,廣州的UPC和上海的UPC可以實現內網連接。
下面我們看一下存儲層的設計,我們的目標是建立一個大存儲層以滿足動態擴容的問題。我們要滿足數據庫水平擴展的問題,如果自己做的話有三種方法。第一種基于增量區間的分配,它的由點是可以實現動態擴容,但是存在性能熱點的問題。因為永遠都是訪問量最大,而老分片隨著流失出現性能限制的情況;第二種方法,根據ID的閃電池分散到不同的分片,沒有性能熱點的問題,但是加新的節點的時候,往往對數據進行單切,比較難以實現快速自動擴容。第三種方法就是將兩者結合,可以同時解決兩個問題,需要增加中間的數據路由。
為了簡化大存儲的設計,我們可以用一些分布式數據庫產品,比如說騰訊云的DCDB,它的原理是通過增加中間的代理層,到多個物理感,像復雜性完全封裝在代理層。
這兩個圖是我們對DCDB做性能測試,第一個圖是單分片對比MYSQL的性能,隨著CPU的核和現存數的增加呈線性增長。DCDB支持新發現的擴容和現有的擴容。擴容池系統會自動進行搬遷并且切換相應的流量,可以做到對業務層進行感知。我要做的只要在頁面中點擊幾下按鈕。
第二個產品是TCaplus,特點有三個支持Protobuf接口訪問,接口友好,適合游戲開發,第二個,將Cache與硬盤結合,第三村塾空間無上線,單表最大支持sotb。TCaplus目前在騰訊內部得到最廣泛的應用,數百款游戲都是以TCaplus作為主數據庫,其中包括王者榮耀、絕地求生等游戲。
想要獲取原文PPT及了解更多小程序開發相關內容,歡迎微信掃描下方二維碼關注「微信極客WeGeek」公眾號,共筑微信生態。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103173.html
摘要:在技術上微信小游戲和小程序的區別是什么開發商在開發一款小游戲的時候通常會遇到什么問題怎么去規避和解決,來自騰訊游戲云資深架構師余國良,將會給我們帶來微信小游戲架構設計與開發方向。 轉載來源:云加社區原作者:余國良 小游戲自發布以來,微信平臺上已經出現了不少現象級的小游戲,包括跳一跳。在技術上微信小游戲和小程序的區別是什么?開發商在開發一款小游戲的時候通常會遇到什么問題?怎么去規避和解...
摘要:在技術上微信小游戲和小程序的區別是什么開發商在開發一款小游戲的時候通常會遇到什么問題怎么去規避和解決,來自騰訊游戲云資深架構師余國良,將會給我們帶來微信小游戲架構設計與開發方向。 轉載來源:云加社區原作者:余國良 小游戲自發布以來,微信平臺上已經出現了不少現象級的小游戲,包括跳一跳。在技術上微信小游戲和小程序的區別是什么?開發商在開發一款小游戲的時候通常會遇到什么問題?怎么去規避和解...
摘要:分布式高并發微服務問阿里京東螞蟻等大廠面試真題解析道跳槽漲薪必備精選面試題最新版大廠面試真題集點擊這里免費領取點擊這里免費領取 估計很多Java程序員平時主要的工作就是一些Web系統的業務開發,對于服務端IO程序以及網絡通信編程做得并不多,但是對于高級或者資深程序員來說,IO通信以及服務端編...
摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經常被問到的持久化與恢復實現故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數據恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...
閱讀 1854·2023-04-25 23:28
閱讀 563·2023-04-25 22:49
閱讀 2241·2021-09-27 13:34
閱讀 5158·2021-09-22 15:09
閱讀 3609·2019-08-30 12:52
閱讀 2740·2019-08-29 15:26
閱讀 658·2019-08-29 11:12
閱讀 2189·2019-08-26 12:24