攜程,人人十年架構師:高併發下RabbitMq消息中間件你應該介麼玩

什麼是削峯限流

場景:

秒殺活動,一般會因爲流量過大,導致應用掛掉,爲了解決這個問題,一般在應用前端加入消息隊列。

作用:

  1. 可以控制活動人數,超過此一定閥值的訂單直接丟棄(我爲什麼秒殺一次都沒有成功過呢)

  2. 可以緩解短時間的高流量壓垮應用(應用程序按自己的最大處理能力獲取訂單)

webp

攜程,人人十年架構師:高併發下RabbitMq消息中間件你應該介麼玩

什麼是應用解耦

場景:

雙11是購物狂節,用戶下單後,訂單系統需要通知庫存系統,傳統的做法就是訂單系統調用庫存系統的接口。

缺點:

當庫存系統出現故障時,訂單就會失敗

webp

攜程,人人十年架構師:高併發下RabbitMq消息中間件你應該介麼玩

案例分析

某購票網站

2014年及以前由於某購票網站架構設計不好,經常出現網站併發訪問量大時出現網站崩潰

小米官網搶購手機:

使用“消息隊列中間件”設計,先搶先得,儘管你提交了搶購請求,但不一定搶得到

電商平臺的“秒殺搶購”:

採用了“消息隊列中間件”技術,在高併發環境下充當重要角色

高併發下RabbitMq消息中間件你應該介麼玩

webp

攜程,人人十年架構師:高併發下RabbitMq消息中間件你應該介麼玩

消息隊列

消息隊列(Message Queue,簡稱 MQ),高可用分佈式集羣技術,提供消息發佈訂閱、消息軌跡查詢、定時(延時)消息、資源統計、監控報警等一系列消息雲服務,是企業級互聯網架構的核心產品

webp

攜程,人人十年架構師:高併發下RabbitMq消息中間件你應該介麼玩

消息隊列MQ知識樹

消息隊列做爲互聯網削峯限流、應用解耦等重要手段,應該掌握的以下這些知識。

webp

攜程,人人十年架構師:高併發下RabbitMq消息中間件你應該介麼玩

爲什麼選擇RabbitMq

  1. ZeroMQ : 擴展性好,開發比較靈活,採用C語言實現,不能數據持久化

  2. ActiveMQ: 歷史悠久的開源項目,已經在很多產品中得到應用,對隊列數較多的情 況支持不好,容易出現丟消息. 4000併發

  3. Redis 做爲一個基於內存的K-V數據庫,其提供了消息訂閱的服務,可以當作MQ來使用,目前應用案例較少,且不方便擴展

  4. RocketMQ: 阿里巴巴的MQ中間件,在其多個產品下使用,可查詢的資料相當少,不全面

  5. RabbitMQ :結合erlang語言本身的併發優勢,性能較好,管理端頁面功能豐富,消息延遲微秒級,支持多種語言且支持AMQP客戶端

RabbitMq原理透析

webp

攜程,人人十年架構師:高併發下RabbitMq消息中間件你應該介麼玩

RabbitMq的綁定方式(**Topic Exchange, Direct Exchange, Fanout Exchange **)

Topic Exchange:路由鍵匹配,發送消息到 topic 交換器時,它會根據路由鍵通配符匹配去尋找綁定到此交換器上的匹配成功的隊列,然後投遞消息

RabbitMq原理小結

交換器、路由鍵、隊列:

RabbitMq並不是把消息直接發送到隊列裏面的,而是先發送到了交換器,交換器再根據路由鍵把我們的消息投遞到對應的隊列

每種交換器定義了不同的路由算法來把消息投遞到對應的隊列

消息隊列購票原理

webp

攜程,人人十年架構師:高併發下RabbitMq消息中間件你應該介麼玩

本文到此結束!喜歡的朋友可以幫忙轉發文章和關注一下!感謝!

想要成爲一個優秀的程序員的夥伴們來說,想要成爲一個優秀的、有能力程序員的話,其實作爲一個開發者或者編程學習者,有一個學習的氛圍跟交流圈子特別重要!這裏我推薦一個Java交流Q-羣,809389099,不管你是大牛還是小白,大家都一起成長進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章