如何看待訊息中介軟體的選型
作者:朱小廝 原文:轉載自“朱小廝的部落格”
前言
近來有很多網友留言:公司要做訊息中介軟體選型,該如何選?你哪個比較好?我的回答一般是:It's a nice topic~如果隨意回答一個的話顯得很不嚴謹也不太負責任,如果嚴謹的回答的話一天就不用幹活了。訊息選型的確是一個大論題,實則說來話長的事情又如何長話短說。被問的越多越覺得需要整理一篇自己的觀點出來,主要的目的將自己的經驗分享出來,可以讓別人少踩點誤區,次要的目的是下次再被問到了可以直接甩連結而不用再打太極(如果你後者覺得這是主要目的話,那麼我只能回答:橘生淮南則為橘,嘿嘿~~)。不過本文的主要內容為觀點表達(別名:“吹水”),不涉及具體的技術細節。
歷程
目前大多數所用的、所討論的(Fashion的)訊息中介軟體大致為Kafka、RabbitMQ和RocketMQ這三種,本文儘量站在一箇中立的視角上去看待這個問題。當然如果你說市面上的MQ多了去了,比如還有ActiveMQ、ZeroMQ呢,這點我也不否認、不反駁,也不接茬~
關於訊息中介軟體(下文會時不時的以MQ作為簡稱)的玩法,或者更貼切的稱為使用歷程大致可以分為四個階段:
大多數情況下基於時間、成本、技術棧等等考慮都會直接使用一種(或者多種)成熟的開源訊息中介軟體。當然在選擇之前一般也會做一些調研,不一樣的選擇意味著未來踩不一樣的坑。很多初創型公司也會選擇直接購買MQ的雲服務,這不失為省錢的一個好辦法。
隨著對訊息中介軟體的瞭解以及業務需求的發展,基於現有的訊息中介軟體來說無法完全滿足目前的需求,這時候最好的方式就是對訊息中介軟體本身做深度包裝(也有可能再換一種MQ繼續耍),最好是做成平臺化的、以監控和管理等為一體的。
當然也有團隊選擇自研。自研不是指拿一個開源的訊息中介軟體出來隨意“動兩刀”,然後換個名稱的假自研,而是大刀闊斧的對現有的訊息中介軟體動刀或者是完全的功能自實現。至於自研具體原因其實有很多:是基於業務需求的拓展、還是現有的MQ無能力掌控、還是leader內心的躁動、還是KPI的壓迫那就不得而知了,不過這的確是玩轉訊息中介軟體歷程中不可或缺的一步。但這一步不是說比前面的兩步絕對的高階,你完全可以簡單對ArrayBlockingQueue做一個簡單的封裝而成為一個MQ,你也可以基於檔案、資料庫、redis等做封裝而形成一個MQ,玩法隨意、在“吹水”的同時能夠不忘初心、真正落地即可。這一步的風險在於你基本脫離了生態社群的支援,自己挖的坑沒人幫填;還有一個風險就是:老人離職、新人抓瞎。如果自研一個功能豐富的MQ的話,對人力、精力、財力都是不小的考驗。
最終極的當然是形成一定的規模體系、技術深度、生態口碑之後進行產品開源,技術來源於社群回饋於社群,既可以為公司做一定程度上的技術宣導,也可以提升自身境界。
選擇
再回到本文的主題上來,個人對於訊息的選型有3點看法:
沒有蹩腳的MQ,只有蹩腳的coder 很多時候你會看到網上的文章說這個MQ不好,哪個MQ不好。比如經常有評論說Kafka容易丟訊息,我的內心回答:滾~說Kafka訊息可靠,我的內心回答:也滾~ 這個世界上的事物沒有絕對的,關鍵在於你對MQ本身的掌握程度。新版的Kafka有很多機制能夠保證訊息的可靠性,容易丟失是coder玩不轉,如果說訊息絕對可靠也是錯誤的,即使不說機房被炸,那你也是沒有遇到偷硬碟的賊哦~ 不管選擇哪個MQ都會有坑,沒有絕對的好壞優劣,關鍵在於coder的把控。如果一些功能其他的MQ有而你的MQ麼有,那你可以做一些深度包裝;如果你的MQ效能跟不上,那你可以試一試優化,或者分散式水平擴充套件等等。
基於當前及可見未來的需求 目前網路上的訊息選型的對比文章,除非在文中嚴格限定了基於比較的版本,否則都是辣眼睛的,唾棄之。比如訊息的冪等性,以前三大Fashion的MQ都不支援訊息冪等性,所以很多選型對比類的文章在這一功能欄就寫上了:不支援,現在最新版的Kafka就能支援一定程度上的冪等性,那麼現在再看這篇文章的時候是不是覺得有槽點。再比如說RabbitMQ在訊息大量堆積時會對效能產生影響,那你是沒有調過優吧,你沒玩過惰性佇列吧。再比如流控、多租戶、多語言支援、事務、可靠性等等方面的對比,Fashion的MQ時刻在level up,今天沒有的、受限支援的功能或許明天就能實現。絕對的去評判哪個MQ好哪個MQ不好沒有實際的意義,而是要根據實際的需求來做決定,多想想你的需求,有些業務需求對於某個MQ而言可以很容易的得到解決,而有些卻是要山路十八彎,一個貼近需求的MQ選型可以讓團隊事半功倍。同時也需要考慮團隊的技術棧,如果團隊中對於某個MQ很熟悉,掌控力度很高,而對另一個MQ非常的陌生,如果此時選擇是後者的話那就要多想想以後的路,路漫漫其修遠兮~貼近需求,但也不要盲目的幻想需求,基於當前及可見未來的需求內而尋求能夠落地的準則,沒有最好的,只有最合適的,類似愛情~~
社群力度及生態發展 對於目前流行的程式語言Java、Python而言,當然還有宇宙最強的php,如果你在使用過程中遇到了某個Exception,那麼去搜索引擎上隨意搜尋下就能找到很多解決方案。對於MQ而言同樣可以使用,如果你選擇的是一種Fashion的MQ,那麼勢必用的人很多,用的人多了踩出來的坑也就多了,順其自然的解決方案也就多了,版本更新彌補的也多了,進而你就可以站在這些“巨人的肩膀”上了。相反如果你採用了一種生僻的MQ,有可能在某些方面用的很爽,但是版本更新緩慢、遇到棘手問題難以得到社群的支援,最後就只能“跪在地板上”抓瞎了。社群力度越大的MQ,更新力度也大,不僅可以填補舊版本的坑,也能時不時帶來一些新功能,釋放你的雙手。當然訊息的選型也要考慮下其生態的發展,能夠在多個領域裡大放異彩的MQ基本是好的MQ,也可以為你的職業發展多加點料。
推薦閱讀
長按指紋
一鍵關注
深入交流、更多福利
掃碼加入我的知識星球
點選 “閱讀原文” 看看本號其他精彩內容