訊息佇列概念與作用

carr_fu發表於2022-03-22

1.概念

    “訊息佇列”(Message Queue,MQ )是一個先進先出(First Input First Output, FIFO )的佇列。它主要用於不同程式或者執行緒之間的通訊,用來處理一系列的輸入請求。

    訊息佇列採用非同步通訊機制。即訊息的傳送者和接收者無須同時與訊息佇列進行資料互動,訊息會一直儲存在佇列中,直至被接受者讀取。每一條訊息記錄都包含詳細的資料說明,包括資料產生的時間、資料型別、特性的輸入引數。 

    常見的訊息佇列中介軟體有Kafka RocketMQ RabbitMQ ,以及各種自研的MQ

2.作用   

    為什麼需要訊息佇列,訊息佇列都有哪些作用或者說價值呢?為啥Kafka 不是多此一舉,而是必備的通用的抽象之後的一個統一解法。

   (1 )應用解耦:多個應用可通過訊息佇列對相同的訊息進行處理,應用之間相互獨立,互不影響。避免程式碼的重構帶來適配的額外開銷,包括出現故障的時候聯調上線彼此之間壓力特別大。

     

                                       

    (2 )非同步處理:相比於序列和並行處理,非同步處理可以減少處理的時間。既解決了序列方式一旦出故障,使用者體驗極差,又解決了並行處理過程中對系統側的壓力,進而用非同步訊息佇列讓超大規模註冊場景也能正常執行,它的訴求並不是要實時送達。牽引註冊是營銷的一個重要指標,如去年的頭條今年的快手猛砸春節聯歡晚會搶紅包,這樣會有幾千萬上億人同時註冊,非同步處理可實現超高併發下的等一等。12306 以前每到春運就掛,加機器也解決不了併發承載能力,最終通過快取機制排隊機制,如等一小時,架構改成排隊機制的核心原理叫做非同步處理。這就是架構側的升級,表面上看好像沒有及時處理,而實際上能夠解決主要矛盾峰值抖動的抗壓能力。


    (3)資料限流:流量高峰期,可通過訊息佇列來控制流量,避免流量過大而引起應用系統崩潰,比如常用在促銷或“秒殺”等活動中。這就是為什麼生產環境中都會有訊息中介軟體。還是接春節聯歡晚會搶紅包的話題,我們更關注紅包的到賬效率,而不是紅包提現到銀行卡的效率。所以,可以把所有伺服器的彈性都給到紅包到賬的非同步處理上,提現幾乎下線。算力一定情況下,技術架構可以根據業務架構做調整,來應對秒殺場景的極度優化。抓住主要矛盾,不要面面俱到,技術是為業務的實際具象需求而服務的。資料的限流動作也是中介軟體訊息佇列中很 重要的應用場景。


    (4)訊息通訊:訊息佇列具有高效的通訊機制,可以實現點對點訊息佇列或聊天室等。QQ 、微信、飛書、釘釘,不是毫秒級看到,幫我們工作極度提效,郵件也提效,效率最低的是打電話,因為打電話是獨佔式的序列。微信可以同時處理比如十件事情(六件工作、四件生活),都不耽誤,這是訊息通訊領域當中的非同步傳輸並行提效的原理。




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70015587/viewspace-2882908/,如需轉載,請註明出處,否則將追究法律責任。

相關文章