訊息佇列概念與作用
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 訊息佇列概念與認知佇列
- 訊息佇列的作用是啥佇列
- 訊息佇列系列一:訊息佇列應用佇列
- 訊息機制篇——初識訊息與訊息佇列佇列
- 訊息佇列佇列
- 【訊息佇列】RabbitMq-宣告佇列與交換機佇列MQ
- RabbitMQ 訊息佇列之佇列模型MQ佇列模型
- kafka 訊息佇列Kafka佇列
- 訊息佇列(MQ)佇列MQ
- [Redis]訊息佇列Redis佇列
- [訊息佇列]rocketMQ佇列MQ
- [訊息佇列]RabbitMQ佇列MQ
- Kafka訊息佇列Kafka佇列
- RabbitMQ訊息佇列MQ佇列
- Redis 應用-非同步訊息佇列與延時佇列Redis非同步佇列
- “簡單”的訊息佇列與kafka佇列Kafka
- 【主流技術】聊一聊訊息佇列 RocketMQ 的基本結構與概念佇列MQ
- 全面理解Handler-1:理解訊息佇列,手寫訊息佇列佇列
- Laravel 佇列訊息與傳送郵件Laravel佇列
- rabbitmq訊息佇列原理MQ佇列
- 訊息佇列之 RocketMQ佇列MQ
- 訊息佇列二三事佇列
- MQ訊息佇列_RabbitMQMQ佇列
- 訊息佇列設計佇列
- 訊息佇列深入解析佇列
- 訊息佇列之 ActiveMQ佇列MQ
- 訊息佇列之RocketMQ佇列MQ
- 訊息佇列雜談佇列
- 訊息佇列之RabbitMQ佇列MQ
- 訊息佇列簡史佇列
- RabbitMQ訊息佇列(五):Routing 訊息路由MQ佇列路由
- 【freertos】010-訊息佇列概念及其實現細節佇列
- 訊息佇列的作用以及kafka和activemq的對比佇列KafkaMQ
- 程式間通訊--訊息佇列佇列
- RocketMQ -- 訊息消費佇列與索引檔案MQ佇列索引
- 什麼是訊息佇列?佇列
- 訊息佇列mq總結佇列MQ
- Python使用RocketMQ(訊息佇列)PythonMQ佇列