ActiveMQ消息中間件的做用以及應用場景

ActiveMQ消息中間件的做用以及應用場景

1、ActiveMQ簡介

  ActiveMQ是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ是一個徹底支持JMS1.1和J2EE1.4規範的JMS Provide實現。儘管JMS規範出臺已是好久的事情了,可是JMS在當今的J2EE應用中仍然扮演這特殊的地位。前端

2、ActiveMQ應用場景

  消息隊列在大型電子商務類網站,如京東、淘寶、去哪兒等網站有這深刻的應用。數據庫

隊列的主要做用:消除高併發訪問高峯,加快網站的響應速度。服務器

在不使用消息隊列的狀況下,用戶的請求數據直接寫入數據庫,在高併發的狀況下,對數據庫形成巨大的壓力,同時也使系統響應延遲加重;網絡

早使用隊列後,用戶的請求發給隊列後當即返回;架構

例如:固然不能直接給客戶提示訂單提交成功,在淘寶上提示:"您提交了訂單,請等等系統確認"併發

再由消息隊列的消費者進程從消息隊列中獲取數據庫,異步寫入數據庫。異步

因爲消息隊列的服務處理速度遠快於數據庫,所以用戶的響應延遲可能獲得有效改善。分佈式

流程圖解,以下圖:ide

3、消息隊列說明

  消息隊列中間是分佈式系統中重要的組件,主要解決應用耦合、異步消息、流量消峯等問題;高併發

實現高性能,高可用,可伸縮和最終一致性架構;是大型分佈式系統不可缺乏的中間件。

目前在生產環境使用較多的消息隊列:ActiveMQ、RabbitMQ、Kafka、ZeroMQ、MetaMQ、RocketMQ等。

4、消息隊列應用場景

1,異步處理

場景說明:用戶註冊後,須要發註冊郵件和註冊短信。傳統的作法有兩種方式:串行方式、並行方式;

(1)串行方式:將註冊信息寫入數據庫成功後,發生註冊郵件,再發生註冊短信。以上三個任務完成後,返回給客戶端。

(2)並行方式:將註冊信息寫入數據庫成功後,發生註冊郵件的同時,發生註冊短信,以上三個任務完成後,返回給客戶端,與串行的差異是,並行的方式能夠提升處理時間;

假設三個業務節點每一個使用50ms,不考慮網絡等其餘開銷,則串行方式的耗時是150ms;並行的耗時是100ms;

由於CPU在單位時間內處理的請求數是必定的,假設CPU 1秒內吞吐量是100次;則串行方式1秒內CPU能夠處理的請求量是7次(1000/150);並行方式可處理請求量是10次(1000/100);

綜上所述,傳統的方式系統的性能(併發量、吞吐量、響應時間)會有瓶頸。如何解決這個問題?

引入消息隊列,將不是必須的業務邏輯,異步處理,改造後的架構以下圖:

安裝上述約定,用戶的響應時間至關因而註冊信息寫入數據庫的時間,也是就是50ms.

註冊郵件,發短信寫入消息隊列後,直接放回,所以寫入消息隊列的速度很快,基本能夠忽略。

採用消息隊列後用戶的響應數據可能就是50ms。因此基於此架構,系統的吞吐量提升到每秒20QPS;比串行提升了3倍,比並行提升了2倍。

2,應用解耦

場景說明:用戶下單後,訂單系統須要通知庫存系統。傳統的作法:訂單系統調用庫存系統接口。以下圖:

傳統模式的缺點:

  1>.假如庫存系統沒法訪問,則訂單減庫存將失敗,從而致使訂單失敗;

  2>.訂單系統與庫存系統耦合;

如何解決以上問題?引入應用消息隊列後的方案,以下圖:

 

  1>.訂單系統:用戶下單後,訂單系統完成持久化處理,將消息寫入消息隊列,返回用戶訂單下單成功,請等等物流配送。

  2>.庫存系統:訂閱下單的消息,採用拉/推的方式,獲取下單信息,庫存系統根據下單信息,進行庫存操做。

  3>.假如在下單時庫存系統不能正常使用,也不影響正常下單。由於下單後,訂單系統寫入消息隊列就再也不關係其餘的後續操做了,實現訂單系統與庫存系統的應用解耦。

3,流量消峯

流量消峯也是消息隊列中的經常使用場景,通常在秒數或者團搶活動中使用普遍。

應用場景:秒數活動,通常由於流量過大,致使流量暴增,應用容易掛掉。爲解決這個問題,通常須要在應用前端假如消息隊列。

(1)能夠控制活動人數。

(2)能夠緩解短期內高流量壓垮應用;

引入消息隊列:

  1>.用戶的請求,服務器接收後,首先寫入消息隊列。假如消息隊列長度超過最大數量,則直接拋棄用戶請求或者跳轉到錯誤頁面;

  2>.秒殺業務根據消息隊列的請求信息,再作後續處理;

4,消息通信

 消息通信是指:消息隊列通常都內置了高效的通信機制,所以也能夠用在純的消息通信。好比實現點對點的消息隊列或者聊天室等。

(1)點對點通信

客戶端A和客戶端B使用同一隊列,進行消息通信。

(2)聊天室通信(發佈訂閱)

客戶端A、客戶端B、客戶端N訂閱同一主題,進行消息發佈和接收,實現類是聊天室效果。

相關文章
相關標籤/搜索