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