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