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