自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

疫情之下,如何設(shè)計(jì)百萬(wàn)并發(fā)的IM系統(tǒng)?

系統(tǒng)
近期隨著武漢新型肺炎疫情的蔓延,很多教育機(jī)構(gòu)也提供了“停課不停學(xué)”的在線直播教學(xué)服務(wù),這也是一大直播互動(dòng)場(chǎng)景。

近期隨著武漢新型肺炎疫情的蔓延,很多教育機(jī)構(gòu)也提供了“停課不停學(xué)”的在線直播教學(xué)服務(wù),這也是一大直播互動(dòng)場(chǎng)景。 

[[314082]]

圖片來(lái)自 Pexels

IM 系統(tǒng)的高并發(fā)場(chǎng)景

IM 系統(tǒng)中,高并發(fā)多見(jiàn)于直播互動(dòng)場(chǎng)景。比如直播間,在直播過(guò)程中,觀眾會(huì)給主播打賞、送禮、發(fā)送彈幕等,尤其是明星直播間,幾十萬(wàn)、上百萬(wàn)人的規(guī)模一點(diǎn)也不稀奇。

直播互動(dòng)場(chǎng)景具有這樣的特點(diǎn):流量峰值具有“短時(shí)間快速聚集”的突發(fā)性、流量隨著開(kāi)播和結(jié)束而劇烈波動(dòng),因而會(huì)帶來(lái)很大的高并發(fā)壓力。

IM 系統(tǒng)的高并發(fā)解決方案

網(wǎng)關(guān)全量轉(zhuǎn)發(fā)

我們先看兩張圖:

可以看到這兩張圖很像,但也有不同之處。

上面的圖是普通聊天場(chǎng)景的流程圖:

  • 用戶通過(guò)網(wǎng)關(guān)機(jī)進(jìn)入直播間。
  • 網(wǎng)關(guān)會(huì)保存、維護(hù)所有進(jìn)入直播間用戶的在線狀態(tài)。
  • 用戶 A 發(fā)送一條彈幕消息,經(jīng)過(guò)一系列處理。
  • 通過(guò)網(wǎng)關(guān)機(jī)維護(hù)的用戶在線狀態(tài),查詢出同一直播間其他用戶的網(wǎng)關(guān)機(jī),將消息投遞到這些網(wǎng)關(guān)機(jī)上。
  • 網(wǎng)關(guān)機(jī)將消息推送給用戶的設(shè)備。

也就是:通過(guò)維護(hù)一個(gè)全局的“在線狀態(tài)”,邏輯層在確定好接收人后,通過(guò)這個(gè)“在線狀態(tài)”查詢接收人所在的網(wǎng)關(guān)機(jī),將消息投遞給這臺(tái)網(wǎng)關(guān)機(jī),最后由網(wǎng)關(guān)機(jī)通過(guò)長(zhǎng)連接進(jìn)行投遞。

問(wèn)題來(lái)了!如果是一個(gè) 10w 人的直播間,每發(fā)送一條消息,就要對(duì)這個(gè)“在線狀態(tài)”進(jìn)行 10w 次的查詢,更何況是多人、高頻的消息發(fā)送呢?

下面的圖是基于上面的流程進(jìn)行優(yōu)化后的流程圖,更適用于高并發(fā)聊天場(chǎng)景:

  • 用戶通過(guò)網(wǎng)關(guān)機(jī)進(jìn)入直播間,會(huì)在每臺(tái)網(wǎng)關(guān)機(jī)本機(jī)維護(hù)“在線狀態(tài)”。
  • 用戶 A 發(fā)送一條彈幕消息,經(jīng)過(guò)一系列處理,投遞給消息隊(duì)列,而每臺(tái)網(wǎng)關(guān)機(jī)均訂閱了這個(gè)全局的消息隊(duì)列,因而都能收到消息。
  • 網(wǎng)關(guān)機(jī)通過(guò)本機(jī)維護(hù)的用戶在線狀態(tài),將消息推送給用戶的設(shè)備。

這個(gè)優(yōu)化的核心就是:不再去精準(zhǔn)地確認(rèn)這個(gè)直播間的用戶在哪些網(wǎng)關(guān)機(jī)上,而是將這個(gè)直播間的消息全量投遞給網(wǎng)關(guān)機(jī),再由網(wǎng)關(guān)機(jī)將消息下推給本機(jī)連接的用戶設(shè)備,也就是下推服務(wù)不依賴外部狀態(tài)服務(wù)。

微服務(wù)拆分

對(duì)所有業(yè)務(wù)進(jìn)行拆分:

  • 核心服務(wù):如發(fā)彈幕、點(diǎn)贊、打賞等。
  • 非核心服務(wù):如直播回放、第三方系統(tǒng)的同步等。

核心服務(wù)通過(guò) DB 從庫(kù)或者消息隊(duì)列的方式與非核心服務(wù)解耦依賴,避免被直接影響。

對(duì)核心服務(wù)進(jìn)行梳理:容易出現(xiàn)瓶頸點(diǎn)的服務(wù)和基本不會(huì)有瓶頸的服務(wù)。容易出現(xiàn)瓶頸的長(zhǎng)連接入服務(wù)獨(dú)立部署,并且和用戶發(fā)送消息的上行操作拆分成各自獨(dú)立的通道,這樣能夠使消息上行通道、和推送下行通道互相隔離。

自動(dòng)擴(kuò)縮容

直播互動(dòng)場(chǎng)景的監(jiān)控指標(biāo)一般可以分為兩大類:

  • 業(yè)務(wù)性能指標(biāo),比如直播間人數(shù)、發(fā)消息和信令的 QPS 與耗時(shí)、消息收發(fā)延遲等。
  • 機(jī)器性能指標(biāo),主要是通用化的機(jī)器性能指標(biāo),包括帶寬、PPS、系統(tǒng)負(fù)載、IOPS 等。

通過(guò)收集業(yè)務(wù)性能指標(biāo)或者機(jī)器性能指標(biāo),結(jié)合模擬線上直播間數(shù)據(jù)來(lái)進(jìn)行壓測(cè),找出單機(jī)、中央資源、依賴服務(wù)的瓶頸臨界點(diǎn),制定相應(yīng)的觸發(fā)自動(dòng)擴(kuò)縮容的指標(biāo)監(jiān)控閾值,實(shí)現(xiàn)自動(dòng)化。

智能負(fù)載均衡

擴(kuò)容可能會(huì)出現(xiàn)舊機(jī)器和新機(jī)器對(duì)于新增流量負(fù)載不均衡的問(wèn)題。

對(duì)于長(zhǎng)連接入服務(wù)前端的負(fù)載均衡層來(lái)說(shuō),大部分都采用普通的 Round Robin 算法來(lái)調(diào)度,并不管后端的長(zhǎng)連接入機(jī)器是否已經(jīng)承載了很多連接。

這樣會(huì)導(dǎo)致后續(xù)新的連接請(qǐng)求還是均勻地分配到舊機(jī)器和新機(jī)器上,導(dǎo)致舊機(jī)器過(guò)早達(dá)到瓶頸,而新機(jī)器沒(méi)有被充分利用。

這是因?yàn)樨?fù)載均衡層支持自定義的均衡算法只能在某一臺(tái)負(fù)載均衡機(jī)器上生效,無(wú)法真正做到全局的調(diào)度和均衡。最好的辦法是接管用戶連接的入口,在最外層入口來(lái)進(jìn)行全局調(diào)度。

比如,在建立長(zhǎng)連接前,客戶端先通過(guò)一個(gè)入口調(diào)度服務(wù)來(lái)查詢本次連接應(yīng)該連接的入口 IP,在這個(gè)入口調(diào)度服務(wù)里根據(jù)具體后端接入層機(jī)器的具體業(yè)務(wù)和機(jī)器的性能指標(biāo),來(lái)實(shí)時(shí)計(jì)算調(diào)度的權(quán)重。

負(fù)載低的機(jī)器權(quán)重值高,會(huì)被入口調(diào)度服務(wù)作為優(yōu)先接入 IP 下發(fā);負(fù)載高的機(jī)器權(quán)重值低,后續(xù)新的連接接入會(huì)相對(duì)更少。

小結(jié)

上面的一些應(yīng)對(duì)高并發(fā)的舉措,不僅僅可以用于直播互動(dòng)場(chǎng)景,也適用于其他業(yè)務(wù)場(chǎng)景,而選用什么策略往往是根據(jù)業(yè)務(wù)需求而定。

比如上面提到的全量網(wǎng)關(guān)轉(zhuǎn)發(fā),假如有 50 臺(tái)網(wǎng)關(guān)節(jié)點(diǎn),原來(lái)每臺(tái)網(wǎng)關(guān)節(jié)點(diǎn)只需要取 1 條消息,現(xiàn)在卻需要取 50 條消息,其中有 49 條是無(wú)效的。

為了避免每條消息都查詢用戶的在線狀態(tài),所有的消息都發(fā)送給所有的網(wǎng)關(guān)節(jié)點(diǎn),會(huì)造成每臺(tái)網(wǎng)關(guān)機(jī)器的流量成倍數(shù)增長(zhǎng)和資源的浪費(fèi),但這是應(yīng)對(duì)高并發(fā)的一個(gè)有效方式。

如果是點(diǎn)對(duì)點(diǎn)場(chǎng)景,使用全局在線狀態(tài)來(lái)精確投遞是更好的選擇,如果是群聊和直播的場(chǎng)景推薦使用所有網(wǎng)關(guān)來(lái)訂閱全量消息的方式,而采用什么方式根據(jù)需要來(lái)權(quán)衡。

 

責(zé)任編輯:武曉燕 來(lái)源: 博客園
相關(guān)推薦

2022-11-14 14:51:46

2019-02-27 09:46:05

數(shù)據(jù)庫(kù)架構(gòu)并發(fā)

2020-10-31 10:17:20

大數(shù)據(jù)大數(shù)據(jù)洞察大數(shù)據(jù)采集

2020-10-20 10:23:52

物聯(lián)網(wǎng)安全智慧城市

2020-03-10 10:19:21

疫情遠(yuǎn)程辦公技術(shù)

2020-03-25 15:21:07

智慧城市智能疫情

2020-05-09 14:07:01

程序員離職仲裁

2020-07-01 07:57:53

5G網(wǎng)絡(luò)通信

2020-03-16 15:58:39

投資創(chuàng)業(yè)

2020-02-13 09:59:20

疫情IDC企業(yè)數(shù)據(jù)中心

2022-08-19 06:42:11

數(shù)據(jù)庫(kù)高并系統(tǒng)

2024-12-26 09:15:28

2024-12-04 13:52:30

2022-09-09 08:41:43

Netty服務(wù)端驅(qū)動(dòng)

2021-05-24 10:55:05

Netty單機(jī)并發(fā)

2014-05-19 10:08:36

IM系統(tǒng)架構(gòu)設(shè)計(jì)

2019-02-12 09:34:00

微博短視頻架構(gòu)

2020-04-09 15:27:05

戴爾

2020-05-08 10:21:37

網(wǎng)絡(luò)安全疫情技術(shù)

2024-10-14 08:09:08

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)