關(guān)于消息隊(duì)列(筆記)

分享一個(gè)高手的解釋,化抽象為具體,化繁為簡,牛逼牛逼
[消息隊(duì)列的使用場景是怎樣的? - 祁達(dá)方的回答 - 知乎]
(https://www.zhihu.com/question/34243607/answer/140732170)

Why MQ

1. 降低代碼的耦合性
作為消息的生產(chǎn)者,只需要關(guān)心消息如何被生產(chǎn),而不必關(guān)心這個(gè)消息如何被消費(fèi),被誰消費(fèi)。消費(fèi)者與生產(chǎn)者各自實(shí)現(xiàn)各自的接口。(這里有個(gè)詞很有意思:fire and forget,這個(gè)詞是從導(dǎo)彈行業(yè)引進(jìn)來的,直譯為“射后不管”,是不是很污,用在這里,代表生產(chǎn)者生產(chǎn)完數(shù)據(jù)之后就不用管了)

2. 易擴(kuò)展
因?yàn)榻档土笋詈闲裕砸讛U(kuò)展,很容易調(diào)整消息的入隊(duì)和處理的頻率

3. 消息安全傳輸
消息隊(duì)列把數(shù)據(jù)進(jìn)行持久化直到它們已經(jīng)被完全處理,通過這一方式規(guī)避了數(shù)據(jù)丟失風(fēng)險(xiǎn)。許多消息隊(duì)列所采用的"插入-獲取-刪除"范式中,在把一個(gè)消息從隊(duì)列中刪除之前,需要你的處理系統(tǒng)明確的指出該消息已經(jīng)被處理完畢,從而確保你的數(shù)據(jù)被安全的保存直到你使用完畢。

4. 異步通信
很多時(shí)候,用戶不想也不需要立即處理消息。消息隊(duì)列提供了異步處理機(jī)制,允許用戶把一個(gè)消息放入隊(duì)列,但并不立即處理它。想向隊(duì)列中放入多少消息就放多少,然后在需要的時(shí)候再去處理它們。
消息隊(duì)列中的數(shù)據(jù)需要在多個(gè)系統(tǒng)間共享數(shù)據(jù)才能發(fā)揮價(jià)值。這點(diǎn)對分布式系統(tǒng)異常重要。

RabbitMQ VS Redis

RabbitMQ

RabbitMQ是使用Erlang編寫的一個(gè)開源的消息隊(duì)列,本身支持很多的協(xié)議:AMQP,XMPP, SMTP, STOMP,也正因如此,它非常重量級,更適合于企業(yè)級的開發(fā)。同時(shí)實(shí)現(xiàn)了Broker構(gòu)架,這意味著消息在發(fā)送給客戶端時(shí)先在中心隊(duì)列排隊(duì)。對路由,負(fù)載均衡或者數(shù)據(jù)持久化都有很好的支持。

Redis

Redis是一個(gè)基于Key-Value對的NoSQL數(shù)據(jù)庫,開發(fā)維護(hù)很活躍。雖然它是一個(gè)Key-Value數(shù)據(jù)庫存儲系統(tǒng),但它本身支持MQ功能,所以完全可以當(dāng)做一個(gè)輕量級的隊(duì)列服務(wù)來使用。對于RabbitMQ和Redis的入隊(duì)和出隊(duì)操作,各執(zhí)行100萬次,每10萬次記錄一次執(zhí)行時(shí)間。測試數(shù)據(jù)分為128Bytes、512Bytes、1K和10K四個(gè)不同大小的數(shù)據(jù)。實(shí)驗(yàn)表明:入隊(duì)時(shí),當(dāng)數(shù)據(jù)比較小時(shí)Redis的性能要高于RabbitMQ,而如果數(shù)據(jù)大小超過了10K,Redis則慢的無法忍受;出隊(duì)時(shí),無論數(shù)據(jù)大小,Redis都表現(xiàn)出非常好的性能,而RabbitMQ的出隊(duì)性能則遠(yuǎn)低于Redis。

參考:為什么要用消息系統(tǒng)_csdn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 消息隊(duì)列概述 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合,異步消息,流量削鋒等問題。實(shí)現(xiàn)高性能,...
    Bobby0322閱讀 11,061評論 0 24
  • 背景介紹 Kafka簡介 Kafka是一種分布式的,基于發(fā)布/訂閱的消息系統(tǒng)。主要設(shè)計(jì)目標(biāo)如下: 以時(shí)間復(fù)雜度為O...
    高廣超閱讀 13,062評論 8 167
  • 關(guān)于消息隊(duì)列,從前年開始斷斷續(xù)續(xù)看了些資料,想寫很久了,但一直沒騰出空,近來分別碰到幾個(gè)朋友聊這塊的技術(shù)選型,是時(shí)...
    預(yù)流閱讀 586,700評論 51 787
  • 本文轉(zhuǎn)載自http://dataunion.org/?p=9307 背景介紹Kafka簡介Kafka是一種分布式的...
    Bottle丶Fish閱讀 5,592評論 0 34
  • 概念: UIView:UIView就是在屏幕上顯示的一個(gè)矩陣塊,具有層級關(guān)系,支持相互嵌套??梢蕴幚碛|摸事件(iO...
    黃龍輝閱讀 539評論 0 2

友情鏈接更多精彩內(nèi)容