面試題 為什麼要使用訊息佇列?

2021-10-04 09:03:35 字數 1945 閱讀 7801

其實面試官主要是想看看:

為什麼使用訊息佇列?

其實就是想知道是因為什麼原因引入的mq技術,為了解決哪些問題。面試官期望的回答就是,當初你們公司有乙個什麼樣的業務場景,這個場景有什麼樣的技術挑戰,不用mq可能會有麻煩,現在引入mq帶來了哪些好處。

通過mq的好處是:解耦,非同步,削峰

解耦這個場景通常是發布訂閱模式,比如:系統a要給系統b、c、d傳送訊息。如果這時候新加入乙個系統e,則需要更改系統a的**才能給系統e傳送訊息,如果使用mq,可以將生產者和消費者解耦。

總結:通過乙個mq,實現pub/sub發布訂閱模式這麼乙個模型,就實現了系統解耦。

面試技巧:你需要去考慮一下自己的系統中是否有類似的場景,就是乙個模組呼叫了其他多個模組,彼此維護起來很麻煩。但是這個呼叫其實是不需要同步呼叫的。如果使用mq進行非同步解耦,也是可以的。在簡歷中進行體現出來,使用mq進行解耦。

非同步如果系統a接收到乙個請求,自己本地寫庫需要100ms,同時需要呼叫系統b耗費200ms,系統c耗費100ms,系統d耗費300ms。總的耗時則為700ms,這在網際網路專案中是可以忍受的。使用mq將呼叫非同步話,這樣系統a幾乎只需要100ms就可以返回。

削峰系統平時qps大概50左右,但是遇到突發情況時,qps飆公升至5000,如果系統的資料請求是直接基於mysql的,那麼mysql可能會崩潰。一般的mysql的tps大概在2k左右。瞬間的高峰,可能會使系統出現雪崩。

如果使用了mq,在高峰的時候將資料寫入到mq中,消費端根據自己的承受能力去消費即可,不會因為請求壓力過大導致崩潰。再到系統空閒時間,去消費掉擠壓的資料。

這個短暫的擠壓是被允許的,因為當高峰期過去之後,系統會很快的消費掉擠壓的資料。

訊息佇列有什麼缺點?

優點已經說過了,在特殊場景下有其對應的好處:解耦、非同步、削峰。

缺點主要有以下三個:

所以訊息佇列是一種非常複雜的架構,引入它會帶來一些好處,但是如果由於沒有考慮到處,同時也會出現一系列的問題。但是有些場景下,該用還是要用的,如何規避掉風險需要清楚。

kafka、activemq、rabbitmq、rocketmq有什麼優缺點?

特性activemq

rabbitmq

rocketmq

kafka

單機吞吐量

萬級,比rocketmq、kafka低乙個數量級

同activemq

10萬級別,支撐高吞吐量

10萬級,高吞吐,一般配合大資料類的系統來進行實時資料計算、日誌採集等場景

topic數量對吞吐量對影響

topic可以達到幾百/幾千級別,吞吐量會有較小幅度的下降,這是rocketmq的一大優勢,在同等機器下,可以支撐大量的topic

topic從幾十到幾百的時候,吞吐量會大幅度下降,使用kafka要保證topic不要過多

時效性ms級

微秒級,這是rabbitmq的一大特點,延遲最低

ms級延遲在ms以內

可用性高,基於主從架構

同activemq

非常高,分布式架構

非常高,分布式架構,乙個節點宕機不會影響其他節點

訊息可靠性

有小概率丟失

基本不丟失

可以通過配置做到0丟失

同rocketmq

功能支援

mq領域的功能及其完備

基於erlang開發,併發能力很強,效能極好,延時很低

mq功能較為完善,還是分布式架構,擴充套件性好

功能較為簡單,主要支援簡單的mq功能,在大資料領域的實時計算以及日誌採集被大規模使用

綜上,各種對比之後,有如下建議:

中小企業建議使用rabbitmq,有豐富的管理介面,開箱即用,穩定性好。

有自研能力的企業,可以使用rocketmq,支撐高吞吐。

有大資料相關業務的,可以直接使用kafka,畢竟kafka在大資料領域已經是事實標準。

面試常問題 為什麼要使用MQ訊息中間

在面試大型網際網路公司的時候,很可能會被問到訊息佇列的問題 1.在何種場景下使用了訊息中介軟體?2.為什麼要在系統裡引入訊息中介軟體?3.如何實現冪等?鏈式呼叫是我們在寫程式時候的一般流程,為了完成乙個整體功能,會將其拆分成多個函式 或子模組 比如模組a呼叫模組b,模組b呼叫模組c,模組c呼叫模組d...

為什麼要使用訊息佇列

參考 訊息佇列本身有確認訊息被正確消費的機制 4.2message acknowledgment訊息確認 為了保證資料不被丟失,rabbitmq支援訊息確認機制,為了保證資料能被正確處理而不僅僅是被consumer收到,那麼我們不能採用no ack,而應該是在處理完資料之後傳送ack.在處理完資料之...

為什麼要使用訊息佇列?

在實際的專案實踐中,訊息佇列有的使用還是比較常用的,有時在想訊息佇列的好處是什麼,使用mq能帶來什麼好處。在說之前,目前市場主流的幾種mq activemq,rabbitmq,rocketmq,kafka 關於mq的入門就不說了,可以找下教程,寫個demo測試一下就好了,還是比較簡單的。先上張圖了解...