訊息中介軟體MQ

2021-09-29 12:42:28 字數 1875 閱讀 7425

訊息中介軟體利用高效可靠的訊息傳遞機制進行平台無關的資料交流,並基於資料通訊來進行分布式系統的整合。通過提供訊息傳遞和訊息排隊模型,它可以在分布式環境下擴充套件程序間的通訊。對於訊息中介軟體,常見的角色大致也就有producer(生產者)、consumer(消費者)。

訊息佇列中介軟體是分布式系統中重要的元件,主要解決應用解耦,非同步訊息,流量削鋒等問題,實現高效能,高可用,可伸縮和最終一致性架構。

非同步訊息和應用解耦

場景說明:使用者註冊後,需要發註冊郵件和註冊簡訊。

傳統的做法有兩種 1.序列的方式;2.並行方式

序列方式:將註冊資訊寫入資料庫成功後,傳送註冊郵件,再傳送註冊簡訊。以上三個任務全部完成後,返回給客戶端。

並行方式:將註冊資訊寫入資料庫成功後,傳送註冊郵件的同時,傳送註冊簡訊。以上三個任務完成後,返回給客戶端。與序列的差別是,並行的方式可以提高處理的時間。

假設三個業務節點每個使用50毫秒鐘,不考慮網路等其他開銷,則序列方式的時間是150毫秒,並行的時間可能是100毫秒。

因為cpu在單位時間內處理的請求數是一定的,假設cpu1秒內吞吐量是100次。則序列方式1秒內cpu可處理的請求量是7次(1000/150)。並行方式處理的請求量是10次(1000/100)。

問題:如以上案例描述,傳統的方式系統的效能(併發量,吞吐量,響應時間)會有瓶頸。如何解決這個問題呢?

引入訊息佇列,將不是必須的業務邏輯,非同步處理。改造後的架構如下:

按照以上約定,使用者的響應時間相當於是註冊資訊寫入資料庫的時間,也就是50毫秒。註冊郵件,傳送簡訊寫入訊息佇列後,直接返回,因此寫入訊息佇列的速度很快,基本可以忽略,因此使用者的響應時間可能是50毫秒。因此架構改變後,系統的吞吐量提高到每秒20 qps。比序列提高了3倍,比並行提高了兩倍。

流量削峰

流量削鋒也是訊息佇列中的常用場景,一般在秒殺或活動中使用廣泛。應用場景:秒殺活動,一般會因為流量過大,導致流量暴增,應用掛掉。為解決這個問題,一般需要在應用前端加入訊息佇列。

通過加入訊息佇列完成如下功能:

a、可以控制活動的人數;

b、可以緩解短時間內高流量壓垮應用;

使用者的請求,伺服器接收後,首先寫入訊息佇列。假如訊息佇列長度超過最大數量,則直接拋棄使用者請求或跳轉到錯誤頁面。秒殺業務根據訊息佇列中的請求資訊,再做後續處理。

常見的訊息中介軟體產品:

activemq:出現最早、最為穩定的、但是支援的併發最少

activemq 是apache出品,最流行的,最早的、能力強勁的開源訊息匯流排。activemq 是乙個完全支援jms1.1和j2ee 1.4規範的 jms provider實現。

rabbitmq:

amqp協議的領導實現,支援多種場景。**的mysql集群內部有使用它進行通訊,openstack開源雲平台的通訊元件,最先在金融行業得到運用。我們在本次課程中介紹 rabbitmq的使用。

zeromq:

史上最快的訊息佇列系統

kafka:

高吞吐:支援高併發大資料

apache下的乙個子專案 。特點:高吞吐,在一台普通的伺服器上既可以達到10w/s的吞吐速率;完全的分布式系統。適合處理海量資料。

rocketmq:阿里巴巴

訊息中介軟體 MQ

1 為什麼需要訊息佇列mq 因為在高併發環境下,由於來不及同步處理,請求往往會發生阻塞,比如 大量的insert,update語句請求同時到達mysql,直接導致無數的行鎖鎖表,甚至最後的請求會堆積過多,從而觸發too many connections錯誤。通過使用訊息佇列,可以非同步的處理請求,從...

MQ訊息中介軟體

mq是message queue,就是訊息佇列。是進行通訊的中介軟體產品,可以把訊息佇列比作是乙個存放訊息的容器,呼叫的方法就是訊息,把方法存到佇列中然後從佇列中取出方法去執行。目前使用較多的訊息佇列有activemq,rabbitmq,kafka,rocketmq。訊息佇列的作用有非同步 削峰 解...

Redis做訊息中介軟體MQ

redis的pub sub功能相較於常見的rabbitmq等訊息中介軟體還是有一些差異,在使用前需要進行甄別,確認是否適用當前專案,畢竟技術選型脫離現實是耍流氓。關於 pub sub 功能,redis共提供了六個命令 網上有很多這方面的文章,這裡就不貼了,使用難度不大。由於服務基本都是多例項部署,當...