(一)什麼是MQ

2022-02-11 12:10:31 字數 1458 閱讀 2488

mq就是訊息佇列,有3個比較重要的好處:解耦、非同步、削峰

不使用mq -> 耦合

系統a與bcd之間的通訊,全部需要在系統a裡面呼叫介面

如果又增加了系統e,那麼系統a需要增加呼叫e的介面的**

如果系統b不需要與a通訊了,那麼需要在系統a裡面去掉相應**

那麼開發系統a的兄弟可能要崩潰,系統a與其他系統產生了嚴重的耦合

使用mq -> 解耦

系統a與其他系統之間通過mq來通訊,系統a只需要在mq上發布訊息,其他系統按需進行訂閱,pub/sub模型,實現解耦

不使用mq -> 同步

還是借用這個圖來說明

如果使用者從系統a發起請求,這個業務需要abcd共同作用來完成

假設abcd各自處理該業務需要花費300ms,如果做成同步的方式來執行,那麼一共耗時1200ms,這個等待時間使用者是不能接受的

而且如果系統bcd掛掉了呢?那系統a應該繼續等待嗎?還是加入重試機制呢?

使用mq -> 非同步

可以考慮把某些業務延遲處理,做成非同步的方式

系統a只需要往mq傳送訊息,然後其他系統去訂閱訊息完成剩餘的業務邏輯

此時使用者從系統a發起請求到得到反饋只需要300ms,使用者體驗得到提公升

比如:下訂單->減庫存

不使用mq -> 無削峰應對措施

資料庫每秒的處理能力是有限的,如果遇到**併發高峰期,超過了資料庫的承載能力,那麼資料庫可能會崩掉,屆時整個系統都無法使用

使用mq -> 有削峰應對措施

系統可用性降低

mq如果掛掉,那麼相關業務將不可用

系統複雜度變高

如果mq出現訊息丟失呢?如果系統與mq之間的互動出現問題,一條資料被傳送了多次呢?

要處理好這些問題,就必然要對mq本身、系統與mq之間的互動進行良好地維護,使得系統變得更加複雜

一致性問題

使用者給系統a傳送乙個請求,本來這個請求應該是系統abcd都執行成功了,才代表這個業務成功

但是為了使用者體驗使用了mq進行非同步處理,然後系統d要是處理失敗了,實際上這個業務並沒有完全處理成功,但是系統a早就已經給了使用者乙個「成功」的反饋,出現矛盾

是否使用mq要根據具體的業務場景進行分析,使用mq帶來的好處和壞處都要考慮到

MQ 為什麼選擇RocketMQ?

提到mq,可能很多朋友都有多耳聞,很多大公司都在使用這種技術。就小編而言,聽說使用mq可以進行秒殺的操作,而且使用十分的方便,效率十分的高。以前小編也做過關於秒殺的技術,就是使用悲觀鎖對dao進行操作,通過加鎖使得執行緒單一。但是上億條資料訪問資料庫也是對資料有很大的壓力的。所以我們可以在dao和資...

一 什麼是專案

pmp指的是專案管理專業人士資格認證。它是由美國專案管理協會 project management institute pmi 發起的,嚴格評估專案管理人員知識技能是否具有高品質的資格認證考試。其目的是為了給專案管理人員提供統一的行業標準。pmp作為專案管理資格認證考試,已在國際上樹立了其權威性。全...

什麼是Mybatis Mybatis(一)

在學mybatis之前,首先要了解什麼是框架,框架是整個或者部分系統的可重用涉及,表現為一組抽象構件及構件例項之間互動的方法,還有一種定義認為,框架是可以被應用開發者定製的應用骨架。前者是從應用和方面,而後者是從目的方面給出的定義。簡而言之,框架就是某種應用的半成品,就是一組元件。而且框架一般是成熟...