<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          消息隊列(MQ)詳細(xì)總結(jié),程序員必看!

          共 1691字,需瀏覽 4分鐘

           ·

          2020-12-31 13:33

          過去幾年中,我們一直在使用、構(gòu)建和宣傳消息隊列,我們認(rèn)為它們是很令人敬畏的,這也不是什么秘密。

          我們相信對任何架構(gòu)或應(yīng)用來說,消息隊列都是一個至關(guān)重要的組件,下面是十個理由:

          1、解耦

          在項目啟動之初來預(yù)測將來項目會碰到什么需求,是極其困難的。消息隊列在處理過程中間插入了一個隱含的、基于數(shù)據(jù)的接口層,兩邊的處理過程都要實現(xiàn)這一接口。這允許你獨立的擴(kuò)展或修改兩邊的處理過程,只要確保它們遵守同樣的接口約束。

          2、冗余

          有時在處理數(shù)據(jù)的時候處理過程會失敗。除非數(shù)據(jù)被持久化,否則將永遠(yuǎn)丟失。

          消息隊列把數(shù)據(jù)進(jìn)行持久化直到它們已經(jīng)被完全處理,通過這一方式規(guī)避了數(shù)據(jù)丟失風(fēng)險。

          在被許多消息隊列所采用的"插入-獲取-刪除"范式中,在把一個消息從隊列中刪除之前,需要你的處理過程明確的指出該消息已經(jīng)被處理完畢,確保你的數(shù)據(jù)被安全的保存直到你使用完畢。

          3、擴(kuò)展性

          因為消息隊列解耦了你的處理過程,所以增大消息入隊和處理的頻率是很容易的;只要另外增加處理過程即可。不需要改變代碼、不需要調(diào)節(jié)參數(shù)。擴(kuò)展就像調(diào)大電力按鈕一樣簡單。消息隊列的面試題和答案我都整理好了,關(guān)注公眾號Java技術(shù)棧,回復(fù):面試,可以免費獲取。

          4、靈活性 & 峰值處理能力

          當(dāng)你的應(yīng)用上了Hacker News的首頁,你將發(fā)現(xiàn)訪問流量攀升到一個不同尋常的水平。在訪問量劇增的情況下,你的應(yīng)用仍然需要繼續(xù)發(fā)揮作用,但是這樣的突發(fā)流量并不常見;如果為以能處理這類峰值訪問為標(biāo)準(zhǔn)來投入資源隨時待命無疑是巨大的浪費。

          使用消息隊列能夠使關(guān)鍵組件頂住增長的訪問壓力,而不是因為超出負(fù)荷的請求而完全崩潰。請查看我們關(guān)于峰值處理能力的博客文章了解更多此方面的信息。

          5、可恢復(fù)性

          當(dāng)體系的一部分組件失效,不會影響到整個系統(tǒng)。消息隊列降低了進(jìn)程間的耦合度,所以即使一個處理消息的進(jìn)程掛掉,加入隊列中的消息仍然可以在系統(tǒng)恢復(fù)后被處理。而這種允許重試或者延后處理請求的能力通常是造就一個略感不便的用戶和一個沮喪透頂?shù)挠脩糁g的區(qū)別。

          6、送達(dá)保證

          消息隊列提供的冗余機(jī)制保證了消息能被實際的處理,只要一個進(jìn)程讀取了該隊列即可。

          在此基礎(chǔ)上,IronMQ提供了一個"只送達(dá)一次"保證。無論有多少進(jìn)程在從隊列中領(lǐng)取數(shù)據(jù),每一個消息只能被處理一次。這之所以成為可能,是因為獲取一個消息只是"預(yù)定"了這個消息,暫時把它移出了隊列。除非客戶端明確的表示已經(jīng)處理完了這個消息,否則這個消息會被放回隊列中去,在一段可配置的時間之后可再次被處理。

          7、排序保證

          在許多情況下,數(shù)據(jù)處理的順序都很重要。消息隊列本來就是排序的,并且能保證數(shù)據(jù)會按照特定的順序來處理。IronMO保證消息漿糊通過FIFO(先進(jìn)先出)的順序來處理,因此消息在隊列中的位置就是從隊列中檢索他們的位置。

          8、緩沖

          在任何重要的系統(tǒng)中,都會有需要不同的處理時間的元素。例如,加載一張圖片比應(yīng)用過濾器花費更少的時間。

          消息隊列通過一個緩沖層來幫助任務(wù)最高效率的執(zhí)行--寫入隊列的處理會盡可能的快速,而不受從隊列讀的預(yù)備處理的約束。該緩沖有助于控制和優(yōu)化數(shù)據(jù)流經(jīng)過系統(tǒng)的速度。

          9、理解數(shù)據(jù)流

          在一個分布式系統(tǒng)里,要得到一個關(guān)于用戶操作會用多長時間及其原因的總體印象,是個巨大的挑戰(zhàn)。

          消息系列通過消息被處理的頻率,來方便的輔助確定那些表現(xiàn)不佳的處理過程或領(lǐng)域,這些地方的數(shù)據(jù)流都不夠優(yōu)化。

          10、異步通信

          很多時候,你不想也不需要立即處理消息。消息隊列提供了異步處理機(jī)制,允許你把一個消息放入隊列,但并不立即處理它。你想向隊列中放入多少消息就放多少,然后在你樂意的時候再去處理它們。

          我們相信上述十個原因,使得消息隊列成為在進(jìn)程或應(yīng)用之間進(jìn)行通信的最好形式。


          版權(quán)申明:內(nèi)容來源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無法確認(rèn),我們都會標(biāo)明作者及出處,如有侵權(quán)煩請告知,我們會立即刪除并表示歉意。謝謝!





          感謝閱讀



          瀏覽 124
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  考逼免费视频 | 黄色一级片播放视频 | 欧美干在线 | 加勒比无码综合在线 | 美女操高潮网站 |