消息隊列一---(為什么使用消息隊列和優缺點區別)


應用場景

為什么使用消息隊列(面試官看你思不思考)

其實就是問問你消息隊列都有哪些使用場景,然后你項目里具體是什么場景,說說你在這個場景里用消息隊列是什么?

面試官問你這個問題,期望的一個回答是說,你們公司有個什么業務場景,這個業務場景有個什么技術挑戰,如果不用 MQ 可能會很麻煩,但是你現在用了 MQ 之后帶給了你很多的好處。

先說一下消息隊列常見的使用場景吧,其實場景有很多,但是比較核心的有 3 個:解耦異步削峰

解耦

一個系統(模塊)調用多個系統(模塊)的場景

多個系統的添加或減少都需修改調用系統的代碼

且不需要同步調用接口的情況

mq-2

異步

涉及到時間消耗問題,當一個信息傳入同時保存到多個系統,

期間需要一個時間消耗,

這時只需要信息先保存當前系統,剩下的放入消息隊列

mq-4

削峰

每個系統性能都是有極限的

類似淘寶雙十一,數據量猛增,

這個時候就需要把用戶的請求放入消息隊列中,

每次從隊列中取出最大數據(剛好不會使系統崩潰的數據),

這樣請求就會堆積在消息隊列中,

等到閑時請求就少了,但系統人以最大吞吐去處理數據,

所以堆積消息很快會被解決

mq-6

消息隊列的優缺點

優點

在特殊場景下有其對應的好處解耦異步削峰

缺點

  1. 系統可用性降低

    系統引入的外部依賴越多,越容易掛掉.

    MQ掛掉,全部涼涼

    如何保證消息隊列的高可用

  2. 系統復雜度提高

    如何保證消息沒有被重復消費

    怎么處理消息丟失的情況

    怎么保證消息的順序型

  3. 一致性問題

    A 系統處理完了直接返回成功了,人都以為你這個請求就成功了;但是問題是,要是 BCD 三個系統那里,BD 兩個系統寫庫成功了,結果 C 系統寫庫失敗了,咋整?你這數據就不一致了。

Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么優缺點?

特性 ActiveMQ RabbitMQ RocketMQ Kafka
單機吞吐量 萬級,比 RocketMQ、Kafka 低一個數量級 同 ActiveMQ 10 萬級,支撐高吞吐 10 萬級,高吞吐,一般配合大數據類的系統來進行實時數據計算、日志采集等場景
topic 數量對吞吐量的影響 topic 可以達到幾百/幾千的級別,吞吐量會有較小幅度的下降,這是 RocketMQ 的一大優勢,在同等機器下,可以支撐大量的 topic topic 從幾十到幾百個時候,吞吐量會大幅度下降,在同等機器下,Kafka 盡量保證 topic 數量不要過多,如果要支撐大規模的 topic,需要增加更多的機器資源
時效性 ms 級 微秒級,這是 RabbitMQ 的一大特點,延遲最低 ms 級 延遲在 ms 級以內
可用性 高,基於主從架構實現高可用 同 ActiveMQ 非常高,分布式架構 非常高,分布式,一個數據多個副本,少數機器宕機,不會丟失數據,不會導致不可用
消息可靠性 有較低的概率丟失數據 基本不丟 經過參數優化配置,可以做到 0 丟失 同 RocketMQ
功能支持 MQ 領域的功能極其完備 基於 erlang 開發,並發能力很強,性能極好,延時很低 MQ 功能較為完善,還是分布式的,擴展性好 功能較為簡單,主要支持簡單的 MQ 功能,在大數據領域的實時計算以及日志采集被大規模使用
  1. 一般的業務系統要引入 MQ,最早大家都用 ActiveMQ,但是現在確實大家用的不多了,沒經過大規模吞吐量場景的驗證,社區也不是很活躍,所以大家還是算了吧,我個人不推薦用這個了;
  2. 后來大家開始用 RabbitMQ,但是確實 erlang 語言阻止了大量的 Java 工程師去深入研究和掌控它,對公司而言,幾乎處於不可控的狀態,但是確實人家是開源的,比較穩定的支持,活躍度也高;
  3. 不過現在確實越來越多的公司會去用 RocketMQ,確實很不錯,畢竟是阿里出品,但社區可能有突然黃掉的風險(目前 RocketMQ 已捐給 Apache,但 GitHub 上的活躍度其實不算高)對自己公司技術實力有絕對自信的,推薦用 RocketMQ,否則回去老老實實用 RabbitMQ 吧,人家有活躍的開源社區,絕對不會黃。
  4. 所以中小型公司,技術實力較為一般,技術挑戰不是特別高,用 RabbitMQ 是不錯的選擇;大型公司,基礎架構研發實力較強,用 RocketMQ 是很好的選擇。
  5. 如果是大數據領域的實時計算、日志采集等場景,用 Kafka 是業內標准的,絕對沒問題,社區活躍度很高,絕對不會黃,何況幾乎是全世界這個領域的事實性規范。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM