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面試題