訊息佇列作用

2021-09-25 23:27:45 字數 1211 閱讀 9341

目錄解耦

非同步 削峰

如上圖所示乙個使用者註冊 -> 註冊系統,註冊系統介面呼叫推送系統給使用者傳送註冊成功訊息,呼叫任務系統給使用者生成新手任務,呼叫營銷系統給使用者推薦精準廣告,這種呼叫方式會出現兩種耦合嚴重的現象:

1. 推送系統、任務系統、營銷系統中任何乙個宕機的情況下,註冊系統這塊需要考慮要不要給宕機系統重新傳送訊息。

2. 當有新的系統需要接收使用者註冊訊息時,註冊系統又要介面呼叫新的系統,給新的系統傳送註冊訊息。

上述兩種情況都將註冊系統和其他系統嚴重耦合在一起,嚴重影響業務迭代和開發效率。

如上圖所示,一旦引入 mq 的話就解決了上述的兩個耦合問題:

1. 註冊系統發布註冊資訊到 mq ,推送系統、任務系統、營銷系統自己去 mq 裡面訂閱消費。訂閱訊息的系統如果宕機了,可以對訊息進行重新消費,註冊系統不用維護呼叫其他系統的**了。

2. 一旦有新的系統需要接收註冊資訊時,直接訂閱 mq 就行了,也不再需要註冊系統呼叫新的系統了。

通過 mq 就將訊息的生產者(註冊系統)和消費者(推送系統、任務系統、營銷系統)充分解耦。

從使用者註冊到註冊系統落庫假設需要 10ms,註冊系統呼叫推送系統、任務系統、營銷系統都需要 100ms,這樣註冊給使用者返回的是 310ms,註冊體驗會相對差一點,如果引入 mq,假設註冊系統傳送到 mq 的時間是 10ms,那這塊給使用者返回的時間就是20ms。

假設註冊系統直接呼叫推送系統或者任務系統,但是註冊系統在某乙個高峰期能承受 10k 的 qps,但是下游服務如推送系統、任務系統等都扛不住這麼大的 qps ,那麼下游很容易被打掛。

這個時候如果接入 mq,訂閱系統可以按照自己的能力比如 3k 每秒從 mq 裡面拉取訊息,這樣就能保證訂閱系統不被打掛,mq 只是在高峰期有堆積,高峰期之後訂閱系統將會把訊息完全消費掉。

總結下來訊息佇列能起到解耦、非同步、削峰作用。

訊息佇列作用總結

業務場景說明 訊息佇列在大型電子商務類 如京東 去哪兒等 有著深入的應用,佇列的主要作用是消除高併發訪問高峰,加快 的響應速度。在不使用訊息佇列的情況下,使用者的請求資料直接寫入資料庫,在高併發的情況下,會對資料庫造成巨大的壓力,同時也使得系統響應延遲加劇。在使用佇列後,使用者的請求發給佇列後立即返...

佇列(作業四)

題目 用佇列實現舞者配對問題 include include include include define maxqsize 100 define ok 1 define error 0 define status int define selemtype int includeusing name...

26 1 鏈式佇列作業

1.實現鏈式佇列,輸入資料入隊,輸入字元出隊。test.c include include linkqueue.h int main int argc,const char ar printf nums join,char out queue n printf input while scanf d...