使用MQ消息隊列的優缺點

1、前言

公司的項目一直都是在使用MQ的,但是由於使用的功能很簡單,所以一直都是知其然不知其所以然,作爲一個程序猿有必要了解每一個使用的技術,爲什麼使用它?它的優點是什麼?缺點是什麼?等等。。。

2.0使用mq的好處

2.1解耦與複用

系統A要發送一個消息到多個系統,如果此時每增加一個系統,系統A都需要通過修改源碼來增加接口,此時耦合非常高,但是如果中間使用消息隊列的話,系統只需要發送一次到消息隊列,別的系統就能複用該信息,當增加或刪除系統調用接口的時候,不需要額外的更新代碼。

2.2異步

用戶調用一個接口的時候,可能該接口調用了別的方法。例如:用戶註冊的時候,後臺可能需要調用:查詢數據庫,插入數據庫,發送郵件,發送用戶指南等等...

但是用戶可能並不需要後臺將所有的任務執行完畢,那麼此時在初入數據口後面加入mq隊列,用戶就能很快得到註冊成功的響應而去做一些別的事情。mq的機制又能保證最終的一致性,所以使用起來很安全很穩定。

2.3消峯

何爲消峯,就是當系統壓力過大的時候,讓系統壓力減小。如何做?

加入數據庫的讀寫每秒3000,在高峯期,系統的訪問達到了每秒10000。此時由於加入了消息隊列,所以不會出現激增的訪問導致系統奔潰。
(注意,曉峯並不會讓用戶的等待時間減少,所以一般會跟異步搭配來使用)

3.0使用mq的缺點

3.1增加了複雜度與降低了可用性

本來系統之間直接通行調用接口就行了,但是引入了mq導致系統的複雜度大大增加,並且如果mq掛掉了,那麼系統之間的通信就中斷了,導致整個系統的全部掛掉。

3.2一致性問題

A系統處理完了發送到消息對流後直接返回成功了,用戶以爲你這個請求就成功了;但是問題是,其他系統消費該消息後,如果當中有一個系統出現了問題,導致數據丟失。最後就會發生數據不一致等問題。

4.0常見的mq的區別

特性ActiveMQRabbitMQRocketMQKafka
單機吞吐量萬級,吞吐量比RocketMQ和Kafka要低了一個數量級萬級,吞吐量比RocketMQ和Kafka要低了一個數量級10萬級,RocketMQ也是可以支撐高吞吐的一種MQ10萬級別,這是kafka最大的優點,就是吞吐量高。一般配合大數據類的系統來進行實時數據計算、日誌採集等場景
topic數量對吞吐量的影響

topic可以達到幾百,幾千個的級別,吞吐量會有較小幅度的下降這是RocketMQ的一大優勢,在同等機器下,可topic可以達到幾百,幾千個的級別,吞吐量會有較小幅度的下降這是RocketMQ的一大優勢,在同等機器下,可
時效性ms級微秒級,這是rabbitmq的一大特點,延遲是最低的ms級延遲在ms級以內
可用性高,基於主從架構實現高可用性高,基於主從架構實現高可用性非常高,分佈式架構非常高,kafka是分佈式的,一個數據多個副本,少數機器宕機,不會丟失數據,不會導致不可用
消息可靠性有較低的概率丟失數據
經過參數優化配置,可以做到0丟失經過參數優化配置,消息可以做到0丟失
功能支持MQ領域的功能極其完備基於erlang開發,所以併發能力很強,性能極其好,延時很低MQ功能較爲完善,還是分佈式的,擴展性好功能較爲簡單,主要支持簡單的MQ功能,在大數據領域的實時計算以及日誌採集被大規模使用,是事實上的標準
優劣勢總結非常成熟,功能強大,在業內大量的公司以及項目中都有應用偶爾會有較低概率丟失消息而且現在社區以及國內應用都越來越少,官方社區現在對ActiveMQ 5.x維護越來越少,幾個月才發佈一個版本而且確實主要是基於解耦和異步來用的,較少在大規模吞吐的場景中使用erlang語言開發,性能極其好,延時很低;吞吐量到萬級,MQ功能比較完備而且開源提供的管理界面非常棒,用起來很好用社區相對比較活的。RabbitMQ吞吐量會低一些,這是因爲他做的實現機制比較重。erlang開發很難去看懂源碼,你公司對這個東西的掌控很弱,基本職能依賴於開源社區的快速維護和修復bug。接口簡單易用,而且畢竟在阿里大規模應用過,可以做到大規模吞吐,性能也非常好,分佈式擴展也很方便,社區維護還可以,可靠性和可用性是ok的,還可以支撐大規模的topic數量。阿里出品都是java系的,我們可以自己閱讀源碼。kafka的特點其實很明顯,就是僅僅提供較少的核心功能,但是提供超高的吞吐量,ms級的延遲,極高的可用性以及可靠性,而且分佈式可以任意擴展同時kafka最好是支撐較少的topic數量即可,保證其超高吞吐量而且kafka唯一的一點劣勢是有可能消息重複消

5.0總結

所以在軟件的正常功能開發中,並不需要去刻意的尋找消息隊列的使用場景,而是當出現性能瓶頸時,去查看業務邏輯是否存在可以異步處理的耗時操作,如果存在的話便可以引入消息隊列來解決。否則盲目的使用消息隊列可能會增加維護和開發的成本卻無法得到可觀的性能提升,那就得不償失了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章