MQ概述

1、MQ的意義面試

  主要目的 :解耦、異步、削峯redis

  解耦:一個業務須要多個模塊共同實現,或者一條消息有多個系統須要對應處理,只須要主業務完成之後,發送一條MQ,其他模塊消費MQ消息,便可實現業務,下降模塊之間的耦合數據庫

  異步:主業務執行結束後從屬業務經過MQ,異步執行,減低業務的響應時間,提升用戶體驗架構

  削峯:高併發狀況下,業務異步處理,提供高峯期業務處理能力,避免系統癱瘓併發

 

2、MQ的優勢異步

  優勢:解耦、異步、削峯高併發

  缺點:一、系統可用性下降。依賴服務也多,服務越容易掛掉。須要考慮MQ癱瘓的狀況性能

     二、系統複雜性提升。須要考慮消息丟失、消息重複消費、消息傳遞的順序性.net

     三、業務一致性。主業務和從屬業務一致性的處理日誌

 

3、經常使用MQ

  經常使用MQ : rocketmq、rabbitmq、activemq、kafka

  rocketmq:alibaba使用Java語言開發的MQ,2012年開源,交由Apache管理,支持消息重複消費,目前社區不算活躍

  rabbitmq:使用erlang語言開發,高併發性能好,社區活躍最高,支持消息持久化

  activemq:社區活躍度搞,支持消息持久化

  kafka:性能好(吞吐量、TPS)

 

4、MQ的區別

              

 

5、MQ常見問題的解決

 一、如何保證高可用

    集羣部署,詳情各MQ集羣部署方案

 

 二、如何保證消息不被重複消費,保證消息的冪等性

   a、消息消費前,先經過業務校驗是否消費國

   b、經過數據庫索引,保證消息只消費一次

 

 三、如何保證消息可靠傳輸,不被丟失

   生產者丟失

   MQ中丟失

   消費端丟失

 

 四、如何保證消息順序性

   參考各MQ實現細節

 

 五、如何解決消息隊列積壓問題

   先修復consumer的問題,確保其恢復消費速度

   建立一個新的topic,空間是原先的10倍,queue也建立原先的10倍

   寫一個臨時的consumer程序,去消費積壓的消息,消費以後不作特殊處理,直接輪詢寫入臨時建立的queue裏面,直至消費結束

   臨時徵用10倍的機器來部署原先的xonsumer,每個消費一個臨時的queue。等消費完,恢復原先部署的架構

 

 六、如何解決消息失效的問題

   消息若是長期積壓,達到消息的有效日期,就會過時。能夠採起批量重導,就是先臨時大量消費消息(存儲消息到數據庫,或者日誌,或者redis),等高峯過了之後,經過程序恢復消息,從新消費

 

 

 6、MQ面試題

 https://blog.csdn.net/lettyisme/article/details/85233008

相關文章
相關標籤/搜索