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