微信小游戏爆款秘笈 数据库MongoDB攻略篇
歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~
本文由騰訊云數據庫 TencentDB 發表于云+社區專欄
隨著微信小游戲的爆發,越來越多開發者關注到MongoDB與小游戲業務的契合度。
騰訊云已為多個爆款微信小游戲提供服務,騰訊云數據庫團隊在多年MongoDB運營&支持微信小游戲服務經驗總結,MongoDB產品經理李曉慧在7月26日在廈門舉行的《騰訊云GAME-TECH游戲開發者技術沙龍》上,為廣大開發者分享了騰訊云MongoDB在小游戲中的實踐應用,幫助剛剛走進小游戲開發的同學們提供干貨。
以下為分享內容要點:
一、為什么在小游戲開發場景下,使用MongoDB是比較合適的?
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%的長連接,讓微信小游戲使用起來更順暢,此優化讓客戶對騰訊云好感和信任度倍增。
\2. 讀寫分離,提高QPS,減少慢查詢
一般原生MongoDB一主多從,如果不做任何操作,它會把所有的讀寫請求都打到primary上面,那么流量峰值來了,數據庫主的寫壓力會非常大。客戶就這個問題做了一個改善,把讀引到了從上面,本以為這樣會對主寫的壓力變小,然而卻發生了游戲卡頓的現象。針對卡頓,騰訊云數據庫MongoDB團隊通過排查,發現當MongoDB主寫壓力非常大的情況下,從同步數據的壓力也很大,此時MongoDB為了不讓業務讀到臟數據做了一個全局鎖,導致業務的讀操作就會被鎖住,從而導致慢查詢增多引起了小游戲卡頓。
騰訊云數據庫MongoDB提供優化,從在回放Oplog的過程中,立即創建一個快照,所有的讀都是讀快照,不會被鎖住。這個方案對效果優化是非常明顯的。慢查詢幾乎沒有,同時QPS是原來的2倍。這個優化目前已經申請專利。
騰訊云數據庫MongoDB同時在只讀實例上又做了優化方案:提供只讀實例,此時只讀實例會從主實例去同步數據,所有的讀都打到只讀實例上去。實際實現效果和讀快照的方案性能差不多,此方案也在其他的小游戲大放異彩。
\3. 提供分片集群,業務量暴增時可靈活擴展
一款小游戲在未上線時候可能根本無法預估數據量,如果申請非常大的數據庫會受到運維同事的挑戰,但是如果后來量爆起來了,數據庫扛不住壓力時再進行擴容是非常麻煩的。為了更好的支持這種業務場景,騰訊云數據庫MongoDB提供分片集群,在量還不會爆很多的時候,進行縱向擴容就可以滿足需求。對于像客戶爆款游戲,可以提供橫向擴容,這時候使用分片集群,對線上業務幾乎是無感知的。
\4. 提供庫表回檔,細粒度快速處理錯誤。
通常在業界MongoDB僅提供實例級別的回檔,不管因為什么原因需要回檔,客戶均要通過整實例回檔實現。作為目前國內提供MongoDB服務云廠商當中,唯一提供提供庫表回檔的騰訊云數據庫MongoDB,為客戶提供更細粒度回檔服務。舉個例子,例如有一天游戲的某個模塊上線之后,發現有用戶在刷錢,分析發現因為一個Bug引起的,此時如果直接強制性把用戶的錢收回來,是非常不合理的,所以此時僅需要把這個bug引起的庫表進行回檔就可以。
\5. 提供表級監控,更精準、更細粒度監控業務健康度。
騰訊云數據庫MongoDB是國內唯一提供表級監控的云廠商。業界大部分數據庫僅提供實例級別的監控,監控實例的各種CRUD的操作,慢查詢,延時,聚合操作。而多數微信小游戲在起步之初,通常是將多個小游戲的數據寫在同一個實例里面,通過不同的庫標管理不同的小游戲,此時表級監控相比實例監控對客戶更有用和有效。
\6. 時序數據庫CTSDB的應用
存儲業務的日志和監控數據,客戶使用騰訊云時序數據庫產品方便存儲業務的日志和監控數據。同時,時序數據庫已經在煙草和電力行業實現規模部署。騰訊云數據庫提供一系列的界面和日志采集工具方便大家使用。想詳細了解這款數據庫產品可以訪問:cloud.tencent.com/product/cts…
最后,作為小游戲的開發者,如果你在數據庫操作使用上有任何困難和疑問,不妨嘗試一下騰訊云數據庫產品和團隊的服務,讓我們攜手共同為游戲客戶提供更優質體驗的娛樂產品服務。
訪問以下鏈接或掃描下方二維碼馬上體驗騰訊云MongoDB
cloud.tencent.com/product/mon…
訪問以下鏈接或掃描下方二維碼馬上體驗更多騰訊云數據庫產品
cloud.tencent.com/solution/da…
問答
如何升級MongoDB?
相關閱讀
Redis云端架構深入淺出
騰訊云數據庫回檔解決方案
給你的CVM安裝一個面板吧!
此文已由作者授權騰訊云+社區發布,原文鏈接:cloud.tencent.com/developer/a…
歡迎大家前往騰訊云+社區或關注云加社區微信公眾號(QcloudCommunity),第一時間獲取更多海量技術實踐干貨哦~
海量技術實踐經驗,盡在云加社區!
總結
以上是生活随笔為你收集整理的微信小游戏爆款秘笈 数据库MongoDB攻略篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件系统磁盘管理(一)--文件系统
- 下一篇: 学着造轮子-RxLifeCycle