為什麼要使用MQ訊息中介軟體?它解決了什麼問題?

2021-09-29 03:37:49 字數 1474 閱讀 6787

場景說明:使用者註冊後,需要發註冊郵件和註冊簡訊,傳統的做法有兩種1.序列的方式;2.並行的方式

(1)序列方式:將註冊資訊寫入資料庫後,傳送註冊郵件,再傳送註冊簡訊,以上三個任務全部完成後才返回給客戶端。 這有乙個問題是,郵件,簡訊並不是必須的,它只是乙個通知,而這種做法讓客戶端等待沒有必要等待的東西.

(2)並行方式:將註冊資訊寫入資料庫後,傳送郵件的同時,傳送簡訊,以上三個任務完成後,返回給客戶端,並行的方式能提高處理的時間。

假設三個業務節點分別使用50ms,序列方式使用時間150ms,並行使用時間100ms。雖然並性已經提高的處理時間,但是,前面說過,郵件和簡訊對我正常的使用**沒有任何影響,客戶端沒有必要等著其傳送完成才顯示註冊成功,英愛是寫入資料庫後就返回.

上圖如果採用傳統的同步方式處理,系統效能會很慢。

(3)訊息佇列

引入訊息佇列後,把傳送郵件,簡訊不是必須的業務邏輯非同步處理

由此可以看出,引入訊息佇列後,使用者的響應時間就等於寫入資料庫的時間+寫入訊息佇列的時間(可以忽略不計),引入訊息佇列後處理後,響應時間是序列的3倍,是並行的2倍。

場景:雙11是購物狂節,使用者下單後,訂單系統需要通知庫存系統,傳統的做法就是訂單系統呼叫庫存系統的介面.

這種做法有乙個缺點:

當庫存系統出現故障時,訂單就會失敗。(這樣馬雲將少賺好多好多錢^ ^)

訂單系統和庫存系統高耦合.

引入訊息佇列

訂單系統:使用者下單後,訂單系統完成持久化處理,將訊息寫入訊息佇列,返回使用者訂單下單成功。

庫存系統:訂閱下單的訊息,獲取下單訊息,進行庫操作。

就算庫存系統出現故障,訊息佇列也能保證訊息的可靠投遞,不會導致訊息丟失(馬雲這下高興了).

流量削峰一般在秒殺活動中應用廣泛

場景:秒殺活動,一般會因為流量過大,導致應用掛掉,為了解決這個問題,一般在應用前端加入訊息佇列。

作用:1.可以控制活動人數,超過此一定閥值的訂單直接丟棄(我為什麼秒殺一次都沒有成功過呢^^)

2.可以緩解短時間的高流量壓垮應用(應用程式按自己的最大處理能力獲取訂單)

1.使用者的請求,伺服器收到之後,首先寫入訊息佇列,加入訊息佇列長度超過最大值,則直接拋棄使用者請求或跳轉到錯誤頁面.

2.秒殺業務根據訊息佇列中的請求資訊,再做後續處理.

為什麼要使用MQ訊息中介軟體?

在面試大型網際網路公司的時候,很可能會被問到訊息佇列的問題 1.在何種場景下使用了訊息中介軟體?2.為什麼要在系統裡引入訊息中介軟體?3.如何實現冪等?鏈式呼叫是我們在寫程式時候的一般流程,為了完成乙個整體功能,會將其拆分成多個函式 或子模組 比如模組a呼叫模組b,模組b呼叫模組c,模組c呼叫模組d...

為什麼要使用訊息中介軟體

假設乙個訂單在整個交易系統會經歷如下兩個步驟 a 訂單建立 b 訂單出庫 整個過程,如下圖所示 但是現在有了新需求,我們需要在統計訂單的建立資料,便於在雙11的時候用於分析實時系統下單總銷量,就像天貓雙11大螢幕那樣展示當前時刻的單量和銷售額。你想到了乙個方案對建立訂單的介面進行了一系列的更改,改完...

訊息中介軟體 MQ

1 為什麼需要訊息佇列mq 因為在高併發環境下,由於來不及同步處理,請求往往會發生阻塞,比如 大量的insert,update語句請求同時到達mysql,直接導致無數的行鎖鎖表,甚至最後的請求會堆積過多,從而觸發too many connections錯誤。通過使用訊息佇列,可以非同步的處理請求,從...