本篇的靈感來自我超級喜歡的一篇文章:《若是把中國 442 位皇帝都放在一個羣裏面,他們會聊些什麼》。mysql
其實個人第一篇文章就是用這種方式寫的《悟空聊無事務》,這也是個人公衆號名字的來源,叫作:「悟空聊架構」 。面試
本篇也會以 「羣聊、單聊、朋友圈」 的方式來說解計算機世界中消息隊列
的一些奇聞趣事。sql
從事軟件開發的同窗,必定都聽過或用過消息隊列,好比 RabbitMQ,Kafka。消息隊列簡單來講就是生產者將不少消息放到一個隊列結構中,由其餘消費者來消費。想了解更多隊列
的知識,看下我以前寫的 18 個 Queue 的文章,保證整的明明白白。傳送門:45張圖庖丁解牛18種Queue。
數據庫
那若是把常見的四大消息隊列拉到一個羣裏,會碰出哪些火花呢?編程
被嫌棄
四大隊列被中間件大隊長
拉到了一個羣裏面。小程序
羣名:悟空聊架構羣。windows
成員數:25 個。微信
管理員:中間件大隊長。架構
羣主:神祕悟空哥。併發
你們來感覺下他們的聊天界面吧~
👇👇👇
RabbitMQ 單獨找中間件大隊長聊天的畫面。
涉及的故事:
- Erlang 是啥?
- 並不是一門新語言,出現於 1987 年。並非面嚮對象語言。
- 函數式編程,基於進程併發,高併發、分佈式是它的優點。
- 由愛立信製造商專門爲通訊應用設計,在國內主要是遊戲領域用到。
- Erlang 爲啥會被其餘隊列嫌棄?
- 由於 RocketMQ、ActiveMQ 都是用 Java 實現的,Kafka 是用 Scale 和 Java 實現的,這三種消息隊列從語言實現上都有些相似。
- 在國內現現在超流行的 Java 的技術生態中,懂 Java 又懂 Erlang 的就比較少了,願意花時間和精力在 Erlang 上面的就更少了。
快和慢
涉及的故事:
- 他們討論的低延遲是啥?
- 就是說這個消息隊列的響應速度是很是快的,好比插入一條消息,能夠很快的返回插入結果。能夠理解爲反射弧比較短。而RabbitMQ 的低延遲達到微秒級,而另外三個隊列都是毫秒級。
- 他們討論的吞吐量是啥?
- 吞吐量:系統在單位時間內處理請求的數量。
- RocketMQ 自稱火箭,確定是有他的道理的,由於他的處理請求的速度快呀!吞吐量能夠達到 10 萬級,而另外三個隊列都是萬級。
無界面 vs 社區別涼
他們聊的操做界面又是啥?
- RabbitMQ、ActiveMQ、Kafka 都是有界面來操做隊列或消息的,而 RocketMQ 就比較坑了, 只提供了命令行工具,這對於長期使用 windows 的用戶確實很難受呀。
他們說的阿里出品又是啥?
- RocketMQ 由大廠阿里出品,已捐給 Apache 開源社區,活躍度不算高,會不會沒人修 bug 了?
- RabbitMQ 有活躍的開源社區,總能找到修 bug 的,你願意用哪一個?大廠推薦用 RocketMQ,能夠本身折騰,小一點的仍是用 RabbitMQ 吧,節省解決問題的成本。
mysql 的朋友圈
點開圖片後查看大圖,mysql 不會飛
的朋友圈以下:
中間件大隊長
拉 mysql 不會飛
進入了羣聊。
涉及的故事:
消息隊列經常使用在解耦、削峯、異步場景中。先對這幾個點來個大白話掃盲:
-
悟空大白話削峯:關鍵詞:別都丟給我! 好比雙十一期間超多用戶下單,假如 10萬個請求都到數據庫了,數據庫一會兒是扛不住這麼多請求的,那麼消息隊列來解圍,把請求丟到消息隊列,訂單服務從消息隊列拿消息處理訂單請求,起到了一個緩衝的做用,這樣對數據庫的壓力就小多了。
-
悟空大白話解耦:關鍵詞:誰用誰拿 。A 系統須要將數據傳給 B、C、D、E 系統,A 系統時刻須要考慮 B、C、D、E 四個系統若是宕機了怎麼辦?要不要重發,要不要消息持久化存起來?A 系統要考慮的問題太多了,可把 A 系統累壞了。這就是一種高耦合的現象,BCDE 四個系統強依賴 A 系統。那怎麼解耦?A 系統將數據丟到消息隊列,BCDE 系統本身想要數據的時候就去消息隊列裏面拿。
-
悟空大白話異步:關鍵詞:先去忙你的吧~ 。好比下一筆訂單,從訂單支付到訂單成功,這個閉環可能很長,好比要發送訂單成功消息、贈送優惠券等等操做,用戶等待的時間可能好久,用戶體驗就很差了,那怎麼解決呢?能夠將下單成功的消息丟到隊列裏面,快速返回訂單成功,而後告知用戶,後系消息觸達系統再從隊列裏面拿到訂單數據,依次給用戶發送訂單消息和優惠券就好了,這個就是異步。
消息隊列的尷尬
四大消息隊列都去看這篇文章去了,據說這篇文章被各大號主轉載了 19 次。傳送門:這三年被分佈式坑慘了,曝光十大坑
彩蛋
mysql不會飛
用到了周杰倫的歌曲:《超人不會飛》
Nigix陽光男孩
用到了周杰倫的歌曲:《陽光男孩》
拍一拍得到了棒棒糖
,來自於讀者我是一顆糖波波
的微信暱稱。
該架構聊天羣成員數已經 26 個啦,成員有消息隊列、各大數據庫、分佈式中間件,想進羣來看一看他們的聊天嗎?「在羣裏不說話都能進步哦~」 加我微信 PassJava
備註[加羣]
寫在最後
你猜我用了幾個手機來作聊天截圖?
你好,我是
悟空哥
,「7年項目開發經驗,全棧工程師,開發組長,超喜歡圖解編程底層原理」。
我還手寫了 2 個小程序
,Java 刷題小程序
,PMP 刷題小程序
,點擊個人公衆號菜單打開!
另外有 111 本架構師資料以及 1000 道 Java 面試題,都整理成了PDF。
能夠關注公衆號 「悟空聊架構」 回覆悟空
領取優質資料。
「轉發->在看->點贊->收藏->評論!!!」 是對我最大的支持!
我是悟空哥,努力變強,變身超級賽亞人!咱們下期見!
本文同步分享在 博客「7年一線互聯網經驗,超愛圖解底層原理,全棧一枚」(CNBlog)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。