微信小遊戲爆款祕笈 資料庫MongoDB攻略篇

騰訊雲加社群發表於2018-08-13

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~

本文由騰訊雲資料庫 TencentDB 發表於雲+社群專欄

隨著微信小遊戲的爆發,越來越多開發者關注到MongoDB與小遊戲業務的契合度。

騰訊雲已為多個爆款微信小遊戲提供服務,騰訊雲資料庫團隊在多年MongoDB運營&支援微信小遊戲服務經驗總結,MongoDB產品經理李曉慧在7月26日在廈門舉行的《騰訊雲GAME-TECH遊戲開發者技術沙龍》上,為廣大開發者分享了騰訊雲MongoDB在小遊戲中的實踐應用,幫助剛剛走進小遊戲開發的同學們提供乾貨。

img

以下為分享內容要點:

一、為什麼在小遊戲開發場景下,使用MongoDB是比較合適的?

img

1.需求靈活多變:

如果使用Schema的資料庫,那麼每次需求變動都可能需要開發者去改資料庫。帶來得開發成本極大。

使用MongoDB這種no Schema的資料庫可以在需求變動時不用更改資料結構,可以靈活增減欄位,節約成本並提高效率。

2.附近的玩家:小遊戲之所以爆發,很大一個因素是藉助微信自帶的社交元素,通過呼叫微信的API推薦好友ID和獲取附近的玩家。

MongoDB原生支援GEO地理位置資訊儲存,同時還提供GeoSearch和GeoNear等API,可以獲取使用者附近玩家資訊,使用者可以方便通過API拉取好友ID和獲取附近的玩家,使用起來非常方便。

3.海量資料支援&動態不停服升級:

很多開發者在小遊戲上線前無法預測資料量,所以最初開始配資料庫時都是標配,使用騰訊雲資料庫的MongoDB的分片叢集,可以橫向和縱向擴容,能夠在不影響服務的前提下,把資料庫擴充套件到很大。

4.運營資料分析支援:

MongoDB原生MapReduce功能,運營分析系統可以直接連過來使用資料進行分析,無論是使用者登入資料還是行為資料輕鬆搞定。

5.nodejs完美支援:

6.nodejs和MongoDB是一起配合成長起來的。在小遊戲的開發場景下,一般後面會有一個分散式的gameservice,前面配一個負載均衡,最後配多個MongoDB資料庫。

二、騰訊雲資料庫MongoDB是如何助力TOP3的兩款小遊戲的?

在17年12月底到18年1月初,隨著撒幣答題直播興起的同時,一款小遊戲在微信好友圈高速發展,一躍成為TOP3的微信小程式。與此同時,因業務擴張太快,帶來的操作響應慢確實讓使用者抓狂不已。騰訊雲MongoDB團隊在接收到客戶的反饋後,迅速做出響應,通過優化MongoDB連線和建立讀快照減少慢查詢等操作,消除了小遊戲卡頓的現象,助力客戶擁有了上億使用者口碑的小遊戲。因為靠著騰訊雲產品過硬的功能和效能,以及優質的服務,騰訊雲資料庫MongoDB也為客戶的另一款現象級微信小遊戲帶來峰值日活2kw且流水上億 。騰訊雲資料庫MongoDB為微信小遊戲提供:

1、 優化MongoDB的連線模型,支援更多的長連線。

由於原生MongoDB的後端連線模型分兩部分,第一部分是Mongos對客戶端的連線,第二部分是MongoS對Mongod的連線。對客戶端的連線,採用的是one-thread-pear-connection,也就是每一個客戶端連線打過來的時候,都會去建一個執行緒,每一個執行緒都會佔用1MB的記憶體,所以當連線非常多的話,例項就會變得很卡。在後端建立連線的時候,是採用一個執行緒池的結構。每一個執行緒池,負責處理一個客戶端的連線,然後每一個Worker裡面又有N個執行緒池,每一個執行緒池又負責每一個Mongod連線。

騰訊雲資料庫MongoDB針對連線進行優化,優化後較原生的MongoDB可以多支援20%的長連線,讓微信小遊戲使用起來更順暢,此優化讓客戶對騰訊雲好感和信任度倍增。

img

\2. 讀寫分離,提高QPS,減少慢查詢

一般原生MongoDB一主多從,如果不做任何操作,它會把所有的讀寫請求都打到primary上面,那麼流量峰值來了,資料庫主的寫壓力會非常大。客戶就這個問題做了一個改善,把讀引到了從上面,本以為這樣會對主寫的壓力變小,然而卻發生了遊戲卡頓的現象。針對卡頓,騰訊雲資料庫MongoDB團隊通過排查,發現當MongoDB主寫壓力非常大的情況下,從同步資料的壓力也很大,此時MongoDB為了不讓業務讀到髒資料做了一個全域性鎖,導致業務的讀操作就會被鎖住,從而導致慢查詢增多引起了小遊戲卡頓。

騰訊雲資料庫MongoDB提供優化,從在回放Oplog的過程中,立即建立一個快照,所有的讀都是讀快照,不會被鎖住。這個方案對效果優化是非常明顯的。慢查詢幾乎沒有,同時QPS是原來的2倍。這個優化目前已經申請專利。

騰訊雲資料庫MongoDB同時在只讀例項上又做了優化方案:提供只讀例項,此時只讀例項會從主例項去同步資料,所有的讀都打到只讀例項上去。實際實現效果和讀快照的方案效能差不多,此方案也在其他的小遊戲大放異彩。

img

\3. 提供分片叢集,業務量暴增時可靈活擴充套件

一款小遊戲在未上線時候可能根本無法預估資料量,如果申請非常大的資料庫會受到運維同事的挑戰,但是如果後來量爆起來了,資料庫扛不住壓力時再進行擴容是非常麻煩的。為了更好的支援這種業務場景,騰訊雲資料庫MongoDB提供分片叢集,在量還不會爆很多的時候,進行縱向擴容就可以滿足需求。對於像客戶爆款遊戲,可以提供橫向擴容,這時候使用分片叢集,對線上業務幾乎是無感知的。

img

\4. 提供庫表回檔,細粒度快速處理錯誤。

通常在業界MongoDB僅提供例項級別的回檔,不管因為什麼原因需要回檔,客戶均要通過整例項回檔實現。作為目前國內提供MongoDB服務雲廠商當中,唯一提供提供庫表回檔的騰訊雲資料庫MongoDB,為客戶提供更細粒度回檔服務。舉個例子,例如有一天遊戲的某個模組上線之後,發現有使用者在刷錢,分析發現因為一個Bug引起的,此時如果直接強制性把使用者的錢收回來,是非常不合理的,所以此時僅需要把這個bug引起的庫表進行回檔就可以。

img

\5. 提供表級監控,更精準、更細粒度監控業務健康度。

騰訊雲資料庫MongoDB是國內唯一提供表級監控的雲廠商。業界大部分資料庫僅提供例項級別的監控,監控例項的各種CRUD的操作,慢查詢,延時,聚合操作。而多數微信小遊戲在起步之初,通常是將多個小遊戲的資料寫在同一個例項裡面,通過不同的庫標管理不同的小遊戲,此時表級監控相比例項監控對客戶更有用和有效。

img

\6. 時序資料庫CTSDB的應用

儲存業務的日誌和監控資料,客戶使用騰訊雲時序資料庫產品方便儲存業務的日誌和監控資料。同時,時序資料庫已經在菸草和電力行業實現規模部署。騰訊雲資料庫提供一系列的介面和日誌採集工具方便大家使用。想詳細瞭解這款資料庫產品可以訪問:cloud.tencent.com/product/cts…

最後,作為小遊戲的開發者,如果你在資料庫操作使用上有任何困難和疑問,不妨嘗試一下騰訊雲資料庫產品和團隊的服務,讓我們攜手共同為遊戲客戶提供更優質體驗的娛樂產品服務。

訪問以下連結或掃描下方二維碼馬上體驗騰訊雲MongoDB

cloud.tencent.com/product/mon…

img

訪問以下連結或掃描下方二維碼馬上體驗更多騰訊雲資料庫產品

cloud.tencent.com/solution/da…

img

問答

如何升級MongoDB?

相關閱讀

Redis雲端架構深入淺出

騰訊雲資料庫回檔解決方案

給你的CVM安裝一個皮膚吧!

此文已由作者授權騰訊雲+社群釋出,原文連結:cloud.tencent.com/developer/a…

歡迎大家前往騰訊雲+社群或關注雲加社群微信公眾號(QcloudCommunity),第一時間獲取更多海量技術實踐乾貨哦~

海量技術實踐經驗,盡在雲加社群

相關文章