同學們應該都會被問到過這個問題:你的系統為什么要用訊息佇列?
大家普遍回答:我入職前,系統里面就已經用了訊息佇列啊,然后就用了,
其實面試官就是想看看你有沒有深入了解過訊息佇列,有沒有認真思考過訊息佇列解決了哪些問題?
?
這篇文章主要帶大家解決以下幾個問題:
?
一、為什么要用訊息佇列
場景1.
假設現在有A,B 兩個系統,都需要推送資料到C系統,普遍做法是C提供給一個介面,給A,B呼叫;
如果這時又上來了一個系統D,也需要A,B將資料推送給它,于是A,B又得呼叫D提供的介面,這樣不太利于后期擴展,
?
場景2.
假設有一個商城系統,有一天做了一個促銷活動,導致當天流量暴增,但是通過監控發現,用戶進入首頁,呼叫首頁介面耗時非常長,導致有很多用戶進入首頁后,很長一段時都是空白頁,最后發現是由于用戶在呼叫首頁介面后,后臺需要更新用戶的榷訓資訊,直接操作了資料庫,當時由于用戶量又多,才導致耗時進一步變長,后面臨時采用執行緒異步更新用戶榷訓資訊到資料庫,
其實上面兩個場景都可以用訊息佇列的基本特性去解決:
?
- 異步處理
- 應用解耦
所以為什么要用訊息佇列,我們就很清楚了,使用訊息佇列能讓我們系統更加穩定,更加容易擴展,而不是為了用而用,而不考慮使用訊息佇列能夠給我帶來什么好處,只是盲目的去使用,
二、我的專案適合使用哪種訊息佇列
上面說了為什么使用訊息佇列,接下來在分享下幾種主流的訊息中間件分別適合在什么場景(專案)下去使用:
RabbitMQ
rabbitmq是erlang語言開發的,因為erlang本身就具備高并發的優勢,所以性能非常好;但是不利于二次開發;社區活躍度非常高,一般開發程序中遇到的問題都能在社區找到答案,
如果公司的資料量不是特別大或者小公司優先選擇rabbitmq
?
Kafka
kafka天生就是為了日志而生的,由于其順序讀寫磁盤,所以其吞吐量極高,
kafka一般可以結合elk 去使用;一般不建議小公司使用,需要部署太多節點了,大公司請隨意,
RocketMq
rocketmq 主要為金融和電商行業而生,rocketmq融入了kafka的一些設計思想;
由于它扛過了多次雙11,所以它的穩定性和高可用性是毋庸置疑的;
而且rocketmq中加入了延時佇列,很適用于訂單超時未支付自動取消的功能需求,
三、使用訊息佇列會帶來什么問題
我們在上面說了專案中引入訊息佇列帶來的好處,但是同樣也會給我們的專案帶來一些不可避免的問題:
?
- 系統可用性降低
- 系統復雜性提高
- 資料一致性問題
福利大放送
關注微信公眾號“AI碼師”,領取2021面試資料和最新全套微服務教程

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296840.html
標籤:其他
