一文讓你搞懂高大上的MQ訊息佇列

2021-10-07 17:18:43 字數 1583 閱讀 7449

我們可以把訊息佇列比作是乙個存放訊息的容器,當我們需要使用訊息的時候可以取出訊息供自己使用。訊息佇列是分布式系統中重要的元件,使用訊息佇列主要是為了通過非同步處理提高系統效能和削峰、降低系統耦合性。

說白了,mq就是乙個訊息中介軟體,它在訊息傳送上游和訊息接收下游之間,使用了mq之後,訊息的上下游之間就實現了解耦,上游訊息的傳送處理是通過mq來實現的,而不是下游其他服務。

mq把要傳輸的資料(訊息)放在佇列中,用佇列機制來實現訊息傳遞——生產者產生訊息並把訊息放入佇列,然後由消費者去處理。消費者可以到指定佇列拉取訊息,或者訂閱相應的佇列,由mq服務端給其推送訊息。

訊息佇列中介軟體是分布式系統中重要的元件,主要解決應用解耦,非同步訊息,流量削鋒等問題,實現高效能,高可用,可伸縮和最終一致性架構。

mq最主要的兩個特點就是非同步和解耦

(1) 通過非同步處理提高系統效能(削峰、減少響應所需時間)

在一些處理時間較長,且傳送方對處理方的處理結果不是必須時,我們使用mq就能很好地提公升我們的這個響應速度。比如一些非關鍵資料插入資料庫的操作,我們就可以非同步給mq進行插入。

比如,我們發帖子,我們最主要的是關注貼子是否發布成功,而對於關注發帖人的使用者進行通知不是最重要的,我們不需要等到通知完所有關注人有新貼子才結束處理,而是可以在發帖成功之後發乙個通知訊息進mq,然後直接通知發帖人發帖成功,而通知的處理由mq非同步處理。

我們還可以用mq實現削峰的作用,在一些併發量較大的情況時,我們可以將短時間內產生的事務儲存在訊息佇列中,從而減緩對業務系統的壓力。

比如一些電商的**活動,我們在使用者請求之後,將訊息寫入佇列之後返回給使用者乙個提示(比如訂單已提交等),不能直接返回成功,因為可能會存在處理失敗的情況,在佇列真正處理完訂單後,我們再將訂單修改狀態或者通知使用者訂單成功。

(2) 降低系統耦合性

使用了mq之後,訊息傳送方和訊息處理方不存在直接呼叫的關係,所以訊息傳送方和訊息處理方之間的耦合性就較小了,當我們修改或者新增傳送和處理模組時,對其他模組的影響就較小了,一般我們只需要修改mq的處理邏輯即可,這樣我們的擴充套件性也較好。

比如乙個電商應用,如果把訂單系統、庫存系統、物流系統、支付系統都耦合在一起,那麼任何乙個系統出了故障,都會造成下單操作異常,無法下單。當轉變成基於訊息佇列的方式後,系統間呼叫的問題會減少很多,比如物流系統因為發生故障而發貨失敗了,那麼需要幾分鐘來修復。在這幾分鐘的時間裡,物流系統要處理的訂單訊息會被快取在訊息佇列中,使用者的下單操作依舊是可以正常完成的。

1、系統更複雜,多了乙個mq元件,需要考慮訊息丟失、訊息重複消費、訊息傳遞的順序性等問題。

2、訊息傳遞路徑更長,延時會增加

3、訊息可靠性和重複性互為矛盾,訊息不丟不重難以同時保證。使用訊息佇列,我們就要考慮如何保證訊息不被重複消費?如何保證訊息的可靠地傳輸,不丟失訊息?需要考慮主業務和從屬業務一致性的處理。

4、上游無法知道下游的執行結果

5、系統可用性降低。依賴服務也多,服務越容易掛掉。需要考慮mq癱瘓的情況。

注:呼叫方實時依賴執行結果的業務場景,使用呼叫,而不是mq。例如:登入,必須登入校驗完成後,才能讓使用者進入頁面,而不是使用mq非同步校驗。

現在主流的mq產品包括:rabbitmq、rocketmq、、kafka 等。

用案例讓你一文搞懂python網路爬蟲

很久以前寫了一篇爬蟲的文章,把它放在csdn上 livan1234 沒想到點選量竟然暴漲,足以看到大家在資料獲取方面的需求,爬蟲技術現在已經非常普遍,其用途也非常廣泛,很多牛人在各個領域做過相關的嘗試,比如 1 爬取汽車之家資料,利用論壇發言的抓取以及nlp,對各種車型的車主做畫像。2 抓取各大電商...

一文就讓你搞懂http和https的通訊過程及區別

一 http與https的區別 1 埠 http埠號是 80 https埠號是 443 2 傳輸協議 http是超文字傳輸協議,屬於明文傳輸 https是安全的超文字傳輸協議,是經過ssl加密後的傳輸協議 3 安全性 https使用了tls ssl加密,比http更加的安全 4 證書 https需要...

一文搞懂讓你懵圈的超級計算機 真的不是堆CPU就行

超算500強中,中國的超級計算機數量達 219 臺,數量位居世界第一,其中173臺來自聯想,71臺來自浪潮,63臺來自曙光。6月18日,在德國法蘭克福舉行的國際超級計算大會 isc 上公布了最新一期的超級計算機前500強榜單。本次入門的超級計算機門檻非常高,首次全部超過1pflops 每秒一千萬億次...