<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)的 10 個理由!

          共 1810字,需瀏覽 4分鐘

           ·

          2020-12-22 11:12

          Java技術棧

          www.javastack.cn

          關注閱讀更多優(yōu)質文章



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

          我們相信對任何架構或應用來說,消息隊列都是一個至關重要的組件,下面是十個理由:

          1、解耦

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

          2、冗余

          有時在處理數據的時候處理過程會失敗。除非數據被持久化,否則將永遠丟失。

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

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

          3、擴展性

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

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

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

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

          5、可恢復性

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

          6、送達保證

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

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

          7、排序保證

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

          8、緩沖

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

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

          9、理解數據流

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

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

          10、異步通信

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

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

          原文出自:http://blog.iron.io/
          譯文:https://www.oschina.net/translate/top-10-uses-for-message-queue
          翻譯 : lwei, Garfielt, YuanyuanL, wang7x






          關注Java技術棧看更多干貨



          戳原文,獲取精選面試題!
          瀏覽 35
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  91中文字幕在线观看 | 人人摸人人搞 | 美女网站黄a | 少妇做爱网站 | 欧洲在线观看 |