1.為啥要選用RabbitMQ
常見的訊息佇列有ActiceMQ,kafka,RocketMQ,RabbitMQ四種
ActiceMQ:
優點: 單機吞吐量萬級,時效性ms級,幾乎不丟失訊息
缺點: 官方社區對ActiceMQ5.x維護越來越少,高吞吐量場景使用較少
kafka:
優點: 單機寫入TPS約百萬條/秒,最大的優點就是 吞吐量高,時效ms級.
大資料分布式常用,有管理界面,多用于實時計算及日志采集
缺點: 單機超過64個佇列/磁區,cup會發生明顯的飆高現象,而且訊息
也可能會丟失,一旦某一臺代理宕機后,就可能丟失,社區更新也慢
RocketMQ
優點: 單機吞吐量十萬級,可用性非常高,分布式架構,訊息可以做到0丟失,
擴展性好,支持10億級別的訊息堆積,原始碼是java開發的
缺點: 支持的客戶端語言不多,目前只支持java和c++,c++還不成熟.....
社區活躍度一般,系統遷移可能需要修改大量的代碼
RabbitMQ
優點: 高并發,性能較好,吞吐量萬級,功能比較完備,跨平臺,支持多種語言,
社區活躍度也很高,更新頻率相當高
缺點: 商業版需要收費,學習成本較高
基于以上MQ的特性,就選擇了符合當前專案的RabbitMQ
2.常見的作用及應用場景
解耦合(為soa提供最終一致性的實作):
例如常見的訂單,庫存,支付等,如果寫一塊不僅處理速度慢,可用性也不高,一旦
某一個節點出現問題都會導致訂單失敗.如果引入RabbitMQ,只要在寫入訊息
佇列這一步是成功的,就可以直接回傳給用戶下單成功,剩下的就可以分批處理了
提升效率:
例如訂單流程: 將下單--修改庫存--支付等流程通過異步的方式同時進行處理,將
極大的提升下單的總時間
再例如用戶注冊: 用戶注冊--發送郵件--發送短信也可以三步同時進行
流量削峰
例如秒殺/搶購等活動,在秒殺的那一段時間內,會瞬間接收遠超當前能處理的
吞吐量,但是過了這段時間流量就又下來了,總不能多加好幾個服務器在那兒放
著,只為了這幾分鐘甚至這幾十分鐘吧.引入MQ后,就可以正常處理請求,將超出
當前服務器支持的流量先進行一個保留,積壓,等這段時間過去后就可以很快的處
理這些堆積的請求
引入訊息佇列的優缺點:
優點:
解耦,異步提升效率,削峰
缺點
1.系統復雜度
加任何一個框架都會增加系統的復雜度,mq自己的問題也有很多,例如訊息的丟失,
重復消費等待問題
2.系統的可用性降低
一旦MQ出現問題,其他本來能用的系統介面也會掛掉,導致系統崩潰
3.一致性
因為MQ是異步處理請求的,也就意味著很有可能前面顯示成功了,但是后面
處理失敗了,還需要另外的機制來解決這個問題
還是看自己的業務需求,小專案不建議引入,中大型有需要的專案可根據專案需求選擇適當的MQ進行引入
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290609.html
標籤:其他
