訊息中介軟體

2022-07-24 19:36:11 字數 2499 閱讀 2888

訊息中介軟體

特點提供資料傳輸的可靠性和高效性,主要解決分布式的系統資料傳輸需求

優點在於能夠在客戶和伺服器之間提供同步和非同步的連線

並且在任何時刻都可以將訊息進行傳送或者儲存**

訊息佇列(message quequing)是在訊息傳輸過程中儲存訊息的容器。

訊息中介軟體即為訊息佇列的承載形式訊息佇列。

比較核心的有 3 個作用:非同步、解耦、削峰填谷

訊息佇列-非同步

通過實際案例說明:假設 a 系統接收乙個請求,需要在自己本地寫庫執行 sql,然後需要呼叫 bcd 三個系統的介面。假設自己本地寫庫要 3ms,呼叫 bcd 三個系統分別要 300ms、450ms、200ms。那麼最終請求總延時是 3+300+450+200=953ms,接近 1s,可能使用者會感覺太慢了

但是一旦使用了 mq 之後,系統 a 只需要傳送訊息到 mq 中的訊息佇列,然後就返回給使用者了。假設傳送訊息到 mq 中耗時 20ms,那麼使用者感知到這個介面的耗時僅僅是 20+3=23ms,使用者幾乎無感知。此時整個系統結構大概是這樣的:

訊息佇列-解耦

有這麼乙個簡單的場景,系統a負責生成userid,並呼叫系統b、c。如果系統bc頻繁變化是否需要userid引數,則系統a的**就得不斷變化,如果哪天又來了系統def……也需要這個引數,則系統a又要加入很多業務邏輯,這樣子各他系統之間就容易產生相互影響,另外大量的系統與a發生互動也容易產生問題。

加了訊息佇列後,a只負責產生userid,至於誰要用這個引數,怎麼用?系統a不管。對這個資料感興趣的系統自己去取用即可,各個系統之間就實現了解耦。而且解耦後,整個服務業變成了乙個非同步的方式,系統a產生資料後,不用依次呼叫bcd來累計耗時,各系統可以同時來取用訊息佇列的資料進行處理,加大吞吐。

訊息佇列-削峰填谷

削峰作用的功能——即通過非同步處理,將短時間高併發產生的事務訊息儲存在訊息佇列中,從而削平高峰期的併發事務。

舉個例子,比如我們的訂單系統,在下單的時候就會往資料庫寫資料。但是資料庫只能支撐每秒 1000 左右的併發寫入,併發量再高就容易宕機。低峰期的時候併發也就 100 多個,但是在高峰期時候,併發量會突然激增到 5000 以上,這個時候資料庫肯定死了。

但是使用了 mq 之後,情況就變了! 訊息被 mq 儲存起來了,然後系統就可以按照自己的消費能力來消費,比如每秒 1000 個資料,這樣慢慢寫入資料庫,這樣就不會打死資料庫了。

訊息佇列-缺點

1、系統可用性降低

大家想象一下,上面的說解耦的場景,本來 a 系統的哥們要把系統關鍵資料傳送給 bc 系統的,現在突然加入了乙個 mq 了,現在 bc 系統接收資料要通過 mq 來接收。但是大家有沒有考慮過乙個問題,萬一 mq 掛了怎麼辦?這就引出乙個問題,加入了 mq 之後,系統的可用性是不是就降低了?因為多了乙個風險因素:mq 可能會掛掉。只要 mq 掛了,資料沒了,系統執行就不對了。

2、系統複雜度提高

本來我的系統通過介面呼叫一下就能完事的,但是加入乙個 mq 之後,需要考慮訊息重複消費、訊息丟失、甚至訊息順序性的問題。為了解決這些問題,又需要引入很多複雜的機制,這樣一來是不是系統的複雜度提高了。

3、一致性問題

a 系統處理完了直接返回成功了,人都以為你這個請求就成功了;但是問題是,要是 bcd 三個系統那裡,bd 兩個系統寫庫成功了,結果 c 系統寫庫失敗了,咋整?你這資料就不一致了

訊息佇列分類

訊息佇列的分類:

push(推訊息模型)

訊息生產者將訊息傳送給訊息中介軟體,訊息中介軟體又將訊息推送給消費者。

pull(拉訊息模型)

消費者請求 訊息中介軟體接收訊息,消費者從訊息中介軟體拉取訊息。

舉個例子:

訊息=食物;服務端broker=老爸;消費端 = 兒子

如果採用push模型:

優點:老爸一拿到食物就給兒子吃【食物送達及時】

缺點:兒子已經吃跑了,老爸還強塞兒子吃,可能導致兒子被撐死【兒子不堪重負,撐死了】

如果採用pull模型

優點:兒子餓了,主動找老爸要食物,不餓的時候不要。【兒子根據飢餓程度獲取食物】

缺點:兒子餓了,發訊息給老爸給我點食物,等老爸收到訊息已經過了十分鐘了,兒子等不及了餓死了。【食物沒有及時送給兒子】

訊息佇列的傳遞模型(一)

點對點(p2p)即乙個生產者和乙個消費者一一對應

傳送者和接收者中有乙個訊息佇列(messages quene),傳送者傳送訊息則把訊息加入到佇列中,接收者接收訊息則把訊息從佇列中取出;如果接收者沒有接收,則這條訊息永遠儲存在佇列中(除非已過期)。

點對點模型的特點:

使用queue作為通訊載體

訊息被消費以後,queue中不再儲存,所以訊息消費者不可能消費到已經被消費的訊息。

每條訊息只能有乙個接收者

傳送者和接受者沒有時間依賴

接收者在成功接收訊息之後確認訊息接受和處理成功

訊息佇列的傳遞模型(二)

發布-訂閱模型的特點:

使用topic作為通訊載體 (topic:指消費的主題名)

每個次訊息可以有多個消費者

客戶只有訂閱後才能接收訊息(只有建立訂閱關係才可以接收訊息 )

訊息中介軟體

1.訊息的優先順序 2.訊息排序 3.訊息過濾 4.訊息持久化 5.訊息重試 6.事務的支援 7.broker滿 生產者,佇列,消費者 訊息佇列的優點 1 解耦2 非同步訊息,系統響應 在jms中,有兩種訊息模型 點對點模式和發布訂閱模式。1.在點對點模式中 有三種角色 1 訊息佇列,傳送者,接受者...

訊息中介軟體

如何理解訊息中介軟體?訊息中介軟體是儲存訊息的乙個容器,與資料庫不同的是資料庫儲存的資料是可以被修改的,而訊息中介軟體一般不會被修改 訊息中介軟體在消費的生產者與消費者產生,相當於乙個中間人的角色,提供了路由保證訊息的傳遞,如果消費者不能及時接收,訊息會保留下來,知道消費者上線 保證在存活期內 訊息...

訊息中介軟體

訊息中介軟體是在訊息的傳輸過程中儲存訊息 訊息傳遞過程中不能更改 的容器。訊息中介軟體再將訊息從它的原中繼到它的目標時充當中間人的作用。訊息中介軟體的主要目的是提供路由並保證訊息的傳遞 如果傳送訊息時接收者不可用,訊息佇列會保留訊息,知道可以成功傳遞為止,當然,訊息佇列儲存訊息也是有期限的。訊息傳送...