課程
/后端開發
/Go
/GO實現千萬級WebSocket消息推送服務
上一節課,不是說可以維護,用戶連接,房間一個映射關系嗎,通過這個映射關系推送到指定的網管層,與直接廣播到所有的網管節點有啥利弊呢
2018-07-31
源自:GO實現千萬級WebSocket消息推送服務 5-3
正在回答
前置前置再前置,把合并越推向原點,對系統整體優化效果更佳,掌握這一點即可!
字數限制。
實際上內部通訊也需要合并推送,這個出于簡化原因我沒有實現在開源代碼里。 所有的無狀態logic應該按room推送消息到消息隊列(按room分區),然后通過pusher服務去完成房間粒度的消息合并,并廣播給gateway。
思考架構問題需要考慮場景,切忌空談性能,在具體場景下有具體的難點和具體的應對方案,這個思想很重要。
嗯,這個問題很有意思,引申出了這個分布式系統后續的一些走向,我簡單延伸一下。
如果是定向給某個用戶推送,我們一般會在邏輯服務器后面設計一層session服務,記錄用戶在哪些gateway上,從而減少不必要的廣播。
如果是定向給某個房間推送,需要我們主動的連接調度,用戶進入房間前先詢問服務端,由服務端指派網關節點地址,這樣盡量來把同一個房間的用戶聚集在一起,你可以想一下增加這個特性的性價比有多少。
我覺得在彈幕場景里,內部節點之間的廣播消息量并不是瓶頸(特指內網帶寬瓶頸),因為100萬人*10個網關在線,你推送1條彈幕的瓶頸永遠在網關層。
所以,在考慮生產環境的擴展性架構決策時,gateway+logic應該作為一個服務單元(我們也稱為set),通過部署多套set來實現大規模集群部署,具體一個房間只需要調度到某個set即可保障其高可用和高吞吐。
i歲月無聲 提問者
小魚兒老師 回復 i歲月無聲 提問者
精慕門4429612
精慕門4429612 回復 精慕門4429612
i歲月無聲 提問者 回復 小魚兒老師
舉報
分布式高并發的彈幕架構揭秘,直播彈幕系統技術難點分析
1 回答能否通過記錄來尋找是那個網關?不通過廣播的方式呢?
1 回答邏輯上有些關鍵處理缺少
1 回答4-1無法播放了
1 回答不太明白內容
3 回答Golang 的 channel 不close掉,會自動被GC回收掉嗎?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2018-08-01
前置前置再前置,把合并越推向原點,對系統整體優化效果更佳,掌握這一點即可!
2018-08-01
字數限制。
實際上內部通訊也需要合并推送,這個出于簡化原因我沒有實現在開源代碼里。 所有的無狀態logic應該按room推送消息到消息隊列(按room分區),然后通過pusher服務去完成房間粒度的消息合并,并廣播給gateway。
思考架構問題需要考慮場景,切忌空談性能,在具體場景下有具體的難點和具體的應對方案,這個思想很重要。
2018-08-01
嗯,這個問題很有意思,引申出了這個分布式系統后續的一些走向,我簡單延伸一下。
如果是定向給某個用戶推送,我們一般會在邏輯服務器后面設計一層session服務,記錄用戶在哪些gateway上,從而減少不必要的廣播。
如果是定向給某個房間推送,需要我們主動的連接調度,用戶進入房間前先詢問服務端,由服務端指派網關節點地址,這樣盡量來把同一個房間的用戶聚集在一起,你可以想一下增加這個特性的性價比有多少。
我覺得在彈幕場景里,內部節點之間的廣播消息量并不是瓶頸(特指內網帶寬瓶頸),因為100萬人*10個網關在線,你推送1條彈幕的瓶頸永遠在網關層。
所以,在考慮生產環境的擴展性架構決策時,gateway+logic應該作為一個服務單元(我們也稱為set),通過部署多套set來實現大規模集群部署,具體一個房間只需要調度到某個set即可保障其高可用和高吞吐。