8月27日至30日,一年一度的《英雄聯盟》周年盛典將與廣大玩家共同回憶過往,展望未來。由于多方面因素,本次盛會不支持線下觀賽,但如此盛大的電競盛會怎么能少了各位熱情的召喚師?為此,英雄聯盟聯合云開發(fā)為各位玩家打造了一套百萬玩家同時在線的聊天系統(tǒng)——內場觀賽區(qū),可供百萬玩家同時在線交流,全面升級線上觀賽與活動體驗,帶給各位召喚師們既是觀眾、又似故事參與者般奇妙的感受!
內場觀賽區(qū)互動界面
玩家只需通過宇宙競技場進入內場觀賽區(qū)(PC端/移動端均可訪問),即可與進入云開發(fā)與英雄聯盟聯合打造的專屬觀賽區(qū),在觀賽區(qū)內,支持玩家邀請小伙伴或隨機偶遇其他玩家共同欣賞比賽,并能進行實時交流,一起為你喜歡的戰(zhàn)隊打call!
線上觀賽也能“開黑”!
這么一套百萬在線的聊天系統(tǒng),以往需要一定人力、至少一個月以上的時間來打造,而借助云開發(fā),只需1位研發(fā)工程師僅用2-3周就完成了開發(fā)到上線的全流程!
百萬級聊天系統(tǒng)帶來的三大挑戰(zhàn)
首先,需要介紹本次活動的主要場景需求:
1、百萬并發(fā)的在線聊天室
每個虛擬聊天室房間可容納5人觀看比賽,并支持實時互動,包括聊天、發(fā)送表情、動作等交互方式,此外聊天室還設有戰(zhàn)隊應援等模塊。
2、房間匹配
玩家每次進入網頁時,系統(tǒng)都會查詢當前房間的匹配情況。
3、百萬并發(fā)的實時抽獎活動
觀看直播的各位玩家可在比賽的某個時間節(jié)點,點擊頁面中的“寶箱”參與實時抽獎。
上述三個場景面臨的壓力各不相同:
首先,聊天室的場景中,因為涉及聊天信息的存儲和分發(fā),除了對消息推送的實時性考驗外,最大的考驗是對數據存儲層的壓力。對于百萬量級的直播場景,比賽的關鍵時刻往往也是玩家最活躍、進行“刷屏”互動的時候,理論頂峰 100W 的QPS,對后端的存儲壓力無疑是巨大的。
接著,房間匹配場景。正如上文所介紹,進入頁面后第一個邏輯就是查詢當前用戶的歷史房間id,這個貌似沒有很大壓力,但是考慮到極端情況下,如果直播出現卡頓,大量用戶同時刷新頁面,將對系統(tǒng)穩(wěn)定性帶來巨大的考驗。
最后,實時抽獎環(huán)節(jié)如何保障百萬級用戶在幾乎同一時間完成“點擊-開獎”的抽獎交互,同樣是一項不小的挑戰(zhàn)。
面對挑戰(zhàn),云開發(fā)如何破局?
那么應對這聊天系統(tǒng)中的三大挑戰(zhàn),云開發(fā)如何一一攻克?
首先,應對聊天室場景的數據壓力:一個字——「拆」!即將聊天信息的數據流,打散至50個環(huán)境中,并將系統(tǒng)分為主環(huán)境和聊天室環(huán)境,主環(huán)境用于承載房間匹配、用戶房間查詢、房間數據庫環(huán)境映射關系查詢等通用邏輯后臺;而聊天室環(huán)境則負責虛擬房間內玩家的實時交互,包括文字消息、表情、動作等等。
聊天室數據拆分整體流程
解決完數據壓力問題,聊天邏輯的實現就比較清晰了:同一個房間的人,根據 roomid 監(jiān)聽房間的聊天記錄,當有人發(fā)送消息、寫入聊天信息后,云開發(fā)的實時推送能力會自動推送消息給所有監(jiān)聽者,聊天室內的玩家就能看到聊天消息了。而表情和動作交互,底層也是將其轉換成 json 對象來進行展現。
聊天記錄的數據結構示例
接著,應對大量用戶同時刷新頁面的高并發(fā)風險的方法:一個關鍵詞——「限頻」。具體來說,雖然云開發(fā)自帶的云函數有抗高并發(fā)的能力,但是因為查詢歷史房間 id 需要操作數據庫,為了保障數據庫層不被擊垮,采用云函數的限頻能力,就可以很好的解決這一問題。前端只要try catch一下,再通過優(yōu)化 UI 交互,就可以完美應對極端情況的風險,還能很好的節(jié)約成本。
最后,針對百萬級用戶在同一時間開啟抽獎的實時性壓力:還是一個關鍵詞——「原生」。利用云開發(fā)原生提供的實時數據推送能力能夠完美支撐此場景,開發(fā)者只需寫一行代碼 watch 一下后端的數據變化即可,而無需進行其他操作(點擊詳細了解實時數據推送)。
總結
本次《英雄聯盟》9周年盛典活動,云開發(fā)利用實時數據推送、彈性擴縮容等能力打造了百萬在線級的實時聊天系統(tǒng),攻克了數據存儲壓力大、高并發(fā)風險和實時性要求高等三大挑戰(zhàn),抗住百萬流量洪峰,支持活動快速上線,縮減時間與人力成本。
除了本次涉及的直播彈幕和活動抽獎等場景,云開發(fā)已成功服務了微信讀書、騰訊游戲年度發(fā)布會、創(chuàng)造營2020、貓眼電影等眾多產品的多類營銷活動,以穩(wěn)定不宕機、靈活擴縮容、安全防刷等優(yōu)勢持續(xù)為客戶提供高質量的服務,歡迎更多開發(fā)者使用云開發(fā)打造穩(wěn)定、高質的應用與活動。
文章來源:站長之家用戶投稿
相關新聞