溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫(kù)為什么要用消息隊(duì)列

發(fā)布時(shí)間:2023-01-31 11:35:29 來(lái)源:億速云 閱讀:100 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫(kù)

這篇文章主要介紹了數(shù)據(jù)庫(kù)為什么要用消息隊(duì)列的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇數(shù)據(jù)庫(kù)為什么要用消息隊(duì)列文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

為什么要使用消息隊(duì)列,六個(gè)字總結(jié):解耦、異步、消峰

1)解耦

傳統(tǒng)模式下系統(tǒng)間的耦合性太強(qiáng)。怎么說(shuō)呢,舉個(gè)例子:系統(tǒng) A 通過(guò)接口調(diào)用發(fā)送數(shù)據(jù)到 B、C、D 三個(gè)系統(tǒng),如果將來(lái) E 系統(tǒng)接入或者 B 系統(tǒng)不需要接入了,那么系統(tǒng) A 還需要修改代碼,非常麻煩。

數(shù)據(jù)庫(kù)為什么要用消息隊(duì)列

如果系統(tǒng) A 產(chǎn)生了一條比較關(guān)鍵的數(shù)據(jù),那么它就要時(shí)時(shí)刻刻考慮 B、C、D、E 四個(gè)系統(tǒng)如果掛了該咋辦?這條數(shù)據(jù)它們是否都收到了?顯然,系統(tǒng) A 跟其它系統(tǒng)嚴(yán)重耦合。

而如果我們將數(shù)據(jù)(消息)寫入消息隊(duì)列,需要消息的系統(tǒng)直接自己從消息隊(duì)列中消費(fèi)。這樣下來(lái),系統(tǒng) A 就不需要去考慮要給誰(shuí)發(fā)送數(shù)據(jù),不需要去維護(hù)這個(gè)代碼,也不需要考慮其他系統(tǒng)是否調(diào)用成功、失敗超時(shí)等情況,反正我只負(fù)責(zé)生產(chǎn),別的我不管。

數(shù)據(jù)庫(kù)為什么要用消息隊(duì)列

2)異步

先來(lái)看傳統(tǒng)同步的情況,舉個(gè)例子:系統(tǒng) A 接收一個(gè)用戶請(qǐng)求,需要進(jìn)行寫庫(kù)操作,還需要同樣的在 B、C、D 三個(gè)系統(tǒng)中進(jìn)行寫庫(kù)操作。如果 A 自己本地寫庫(kù)只要 1ms,而 B、C、D 三個(gè)系統(tǒng)寫庫(kù)分別要 100ms、200ms、300ms。最終請(qǐng)求總延時(shí)是 1 + 100 + 200 + 300 = 601ms,用戶體驗(yàn)大打折扣。

數(shù)據(jù)庫(kù)為什么要用消息隊(duì)列

如果使用消息隊(duì)列,那么系統(tǒng) A 就只需要發(fā)送 3 條消息到消息隊(duì)列中就行了,假如耗時(shí) 5ms,A 系統(tǒng)從接受一個(gè)請(qǐng)求到返回響應(yīng)給用戶,總時(shí)長(zhǎng)是 1 + 5 = 6ms,對(duì)于用戶而言,體驗(yàn)好感度直接拉滿。

數(shù)據(jù)庫(kù)為什么要用消息隊(duì)列

3)消峰

如果沒(méi)有使用緩存或者消息隊(duì)列,那么系統(tǒng)就是直接基于數(shù)據(jù)庫(kù) MySQL 的,如果有那么一個(gè)高峰期,產(chǎn)生了大量的請(qǐng)求涌入 MySQL,毫無(wú)疑問(wèn),系統(tǒng)將會(huì)直接崩潰。

那如果我們使用消息隊(duì)列,假設(shè) MySQL 每秒鐘最多處理 1k 條數(shù)據(jù),而高峰期瞬間涌入了 5k 條數(shù)據(jù),不過(guò),這 5k 條數(shù)據(jù)涌入了消息隊(duì)列。這樣,我們的系統(tǒng)就可以從消息隊(duì)列中根據(jù)數(shù)據(jù)庫(kù)的能力慢慢的來(lái)拉取請(qǐng)求,不要超過(guò)自己每秒能處理的最大請(qǐng)求數(shù)量就行。

也就是說(shuō)消息隊(duì)列每秒鐘 5k 個(gè)請(qǐng)求進(jìn)來(lái),1k 個(gè)請(qǐng)求出去,假設(shè)高峰期 1 個(gè)小時(shí),那么這段時(shí)間就可能有幾十萬(wàn)甚至幾百萬(wàn)的請(qǐng)求積壓在消息隊(duì)列中。不過(guò)這個(gè)短暫的高峰期積壓是完全可以的,因?yàn)楦叻迤谶^(guò)了之后,每秒鐘就沒(méi)有那么多的請(qǐng)求進(jìn)入消息隊(duì)列了,但是數(shù)據(jù)庫(kù)依然會(huì)按照每秒 1k 個(gè)請(qǐng)求的速度處理。所以只要高峰期一過(guò),系統(tǒng)就會(huì)快速的將積壓的消息給處理掉。

數(shù)據(jù)庫(kù)為什么要用消息隊(duì)列

關(guān)于“數(shù)據(jù)庫(kù)為什么要用消息隊(duì)列”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“數(shù)據(jù)庫(kù)為什么要用消息隊(duì)列”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI