-
1 # 技術大咖秀
-
2 # 網路圈
現在大型網站架構技術中,有一個高頻詞就是“訊息中介軟體”,我們在很多大公司分享的技術PPT或者崗位要求裡都會看到這個名詞。什麼是訊息中介軟體呢以及它能解決什麼問題呢?
什麼是訊息中介軟體?透過訊息中介軟體可以讓不同的系統模組透過傳遞訊息的方式來啟用對方的事件以完成相應的操作。訊息中介軟體本質上也算是一種佇列,支援同步或非同步方式來傳輸訊息。
一般情況下我們把訊息中介軟體簡稱為MQ。
訊息中介軟體在架構中發揮了重要作用透過訊息中介軟體可以幫我們解決很多問題,比如說:
1、系統解耦
比如一個使用者註冊流程,可能涉及這些操作:
向用戶庫中寫入資料;
向相關附加表中寫入資料;
在沒有使用訊息中介軟體時,這些操作可能都是阻塞式的一步一步進行著,萬一某個環節出現異常後續環節可能就無法進行了,這就是典型的高耦合!但當我們引入訊息中介軟體後,使用者註冊成功後只要生產一條訊息,然後由不同的消費者(模組)去消費(執行特定操作),這樣系統間的耦合度就低了。2、非同步呼叫
上面舉的會員註冊的例子同樣適用於此處,同步阻塞式呼叫會使得呼叫鏈時間週期過長,而非同步呼叫極大的縮短了呼叫鏈的時間。
3、佇列緩衝
訊息中介軟體就像一個蓄水池,可將大量請求儲存下來讓後臺逐一處理,所以像秒殺系統都少不了訊息系統。
主流的訊息中介軟體產品現在市面上有很多訊息中介軟體,應用最為廣泛的主要有:RabbitMQ、Kafka、RocketMQ、ActiveMQ等。
-
3 # 會點程式碼的大叔
現在很多系統都引入的訊息中介軟體,我們公司現在也有基於RabbitMQ的訊息中介軟體平臺,如果專案需要使用的MQ的話,只需要申請即可;那麼引入訊息中介軟體是為了解決什麼問題,我談談自己的看法:
非同步呼叫我們有很多業務系統,實際上實時性要求並沒有那麼高,完全是可以進行非同步呼叫的。
我曾經做過一個系統是客服通知性質的系統,比如客戶十天後需要繳費了,那麼我們會根據原始資料+模板,生成簡訊通知,然後傳送給簡訊平臺進行簡訊傳送。這個簡訊平臺提供了一個介面,其他系統如果想要傳送簡訊的話,只要把手機號+簡訊內容透過介面傳送給簡訊平臺,再由簡訊平臺和各個服務商進行對接。這個場景就非常適合改成非同步呼叫,只需要把待發送簡訊扔到訊息佇列中,再由簡訊平臺取出待發送簡訊,進行傳送。
再舉個例子,如果一個服務有呼叫鏈路,比如A->B->C,假如A調B速度很快,但是B調C速度較慢或不穩定,那麼可以評估一下C是不是可以做非同步呼叫,這樣可以在不影響業務流程的前提下,加快服務的響應速度。
系統解耦不知道大家有沒有遇到過這樣的問題,A系統有一些資料,B系統需要這些資料。
一種方法是B系統呼叫A系統的介面進行查詢,但是由於資料的狀態可能會發生變化,B系統需要在資料變化的時候做一些業務操作,這時候需要A系統在資料有變化的時候,主動通知B系統;那麼可以B系統提供一個介面,A系統主動通知;這樣做實現起來沒有問題,但是困難也比較大:
通知過程中有問題,比如B系統down掉了、B系統在釋出,那麼A系統需要考慮重發的問題;如果資料多、變化快,那麼會對B系統帶來很大的壓力(不停地進行介面呼叫);C系統說,我也想要這些資料,我也做個介面你通知一下我吧;DEFG系統說...我也想要...A系統開發猝...那麼最好的解決方案是:A系統將資料傳送到MQ中,哪些系統需要的話,就去消費(需要被授權);如果哪天某個系統下線了,就取消消費。
流量緩衝我們之前做過的一個專案,大概功能是這樣的。(秒殺系統經常會用到,但是因為這個系統是我們一個實際專案,所以就用這個專案舉例了)
A系統對外提供介面,有內網系統呼叫,也有網際網路端的系統呼叫;網際網路端的流量不好估計,如果介面壓力過大的話,很有可能把A系統壓垮,從而影響到業務流程。於是我們在A系統和網際網路端之間,增加了一層,功能也很簡單,接收到請求之後,直接扔到MQ中,再由一個程式勻速地從MQ裡面拿請求出來,呼叫A系統;這樣就起到了一個流量緩衝的作用。(並沒有讓網際網路端的系統和A系統改造,他們唯一要做的就是改一下介面地址)。
-
4 # JAVA前線
訊息中介軟體主要有三個作用:系統間解耦,非同步化,流量削峰。我們透過例項來說明。
1 系統間解耦假設你在一個電商系統購物,支付成功後,系統應該怎麼把這個訊息告訴物流系統?有兩種思路:
方式一:支付系統直接呼叫物流系統。這樣會有一個問題:支付系統和物流系統產生了強依賴,當物流系統出現問題,直接影響使用者交易流程,導致支付失敗。
方式二:支付系統把支付成功訊息推送給訊息中介軟體,然後交易流程結束。物流系統訂閱這個訊息進行後續處理。這樣即使物流系統出現問題,也不影響交易系統。
2 非同步化假設物流系統處理業務需要100毫秒。
採用方式一:整個鏈路響應時長就增加了100毫秒,耗時增加。
採用方式二:整個鏈路時長就不需要增加這100毫秒,這就是非同步化帶來的效能提升。
3 流量削峰假設雙11商家做秒殺活動,每秒產生了大量訂單資料。
採用方式一:支付系統壓力就會傳遞給物流系統,這是沒有必要的。
採用方式二:物流系統可以根據系統能力,勻速拉取資料處理,削減了流量洪峰。
回覆列表
訊息中介軟體,在目前主流的架構中已經成了不可或缺的一部分,作用的話無外乎這幾種:解耦、非同步、削峰限流,達到系統的高可用。目前比較主流的訊息中介軟體有Kafka、RabbitMQ、ActiveMQ、RocktMQ等,Redis也可以做訊息中介軟體哦,具體可根據實際使用場景來選擇。下面我們來看下這幾個主要作用,
1、系統解耦
解決的問題就是N個系統糅合在一起,相互呼叫,一團糟,如下圖
然後,我們進行系統的改造,加入訊息中介軟體來理清楚上面這些紛紛擾擾的關聯,
這樣是不是很清晰了,系統之間不會耦合在一起了,就達到了解耦的效果,在分散式的大型系統中,這個功能尤為重要。
2、非同步呼叫
非同步呼叫,主要解決的是同步阻塞和耗時的問題,比如,只有做完B才能到C,耗時的話也是20+200ms。
加入訊息中介軟體,改成非同步呼叫後,A可以同時呼叫B和C,時間也減少了,提高效率。
3、削峰限流
削峰限流主要解決的是高併發的大訪問量場景情況下,在服務前面加一層緩衝,由訊息中介軟體做一層過濾,如果流量太大的話就會被捨棄一部分,其他未被捨棄的部分進入佇列排隊,保護了後端服務的可用性。
差不多,先寫這些吧。