來源:北大青鳥總部 2023年06月06日 16:01
在當今互聯網的世界里,互聯網行業的“三高”問題已經是常態,也因此我們必須要掌握一些可以應對三高問題的技術。
鑒于很多傳統行業的小伙伴,對“三高”不是特別清楚,這里咱么先來解釋下三高的概念。
首先,這個三高絕對不是你們所理解的,高血糖、高血脂、高血壓,這三高,對于程序員來講,估計這輩子也不會跟他們有什么關系(程序員都是精瘦型)。
而互聯網行業的,所謂“三高”,高并發、高性能、高可用,簡稱三高(3H)。
為了應對這些三高問題,我們程序員可是,熬沒了頭發,每天都在思考如何解決這些問題;就在這個被動的解決問題的過程中,技術在快速的更新迭代,程序員的頭發也在慢慢凋零。
在技術迭代的過程中,就出現了一種叫做消息中間件的技術,當然這個消息中間件是一個統稱了,他里面還包含其他具體的技術。而這個消息中間件,我們又可以分成兩個概念來理解它,一個消息,一個中間件。
咱么先來看下什么是消息,在互聯網的系統中,所謂消息,就是系統與系統通信所傳遞的信息,就好比我們人與人之間交流,也是要通過語言來傳遞的信息的,這個信息就可以類比成系統的中消息。
中間件的概念呢,其實就是底層操作系統軟件,非業務應用軟件,不是直接給最終用戶使用的,不能直接給客戶帶來價值的軟件統稱為中間件,說人話就是,處在一個非核心的位置,有它沒它都行,并不影響系統正常運行,它在兩個系統中相當于一個橋梁的作用。
知道了消息是啥,中間件是啥,那么下一個問題,什么是消息中間件。學英語的時候,大家經常說,每個字母都認識,字母組合在一起就不認識了,如果把消息和中間件組合在一起估計你也不認識了。
消息中間件就是利用高效可靠的消息傳遞機制進行異步的數據傳輸,并基于數據通信進行分布式系統的集成。通過提供消息隊列模型和消息傳遞機制,可以在分布式環境下擴展進程間的通信。
在互聯網行業,消息中間件已經是大型分布式系統中不可或缺的重要組件。看似簡單,卻解決了不少難題。比如分布式系統中的異步處理、系統耦合、流量削鋒、分布式事務管理等。輕松實現了一個高性能,高可用,高擴展的系統。
今天咱么就來見識見識,幾種主流的消息中間件技術。
當今市面上有很多主流的消息中間件,比如:資歷比較老的ActiveMQ,比較火的RabbitMQ,以及現在當紅小生Kafka,還有自帶光環RocketMQ(阿里巴巴開源),以及退居二線的ZeroM、MetaMQ等。
消息中間件的種類的還是非常豐富的,但是目前比較主流的當屬Kafka、RabbitMQ了,接下來我們就對幾個主流的中間件做一個簡單的介紹。
RabbitMQ在2007年發布,是一個在AMQP(高級消息隊列協議)基礎上完成的,可復用的企業消息系統,是當前最主流的消息中間件之一,支持多種客戶端,如:Python、Java等,。用于在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。
Kafka是一個分布式消息發布訂閱系統。它最初由LinkedIn公司基于獨特的設計實現為一個分布式的提交日志系統,之后成為Apache項目的一部分;它可以處理消費者規模的網站中的所有動作流數據(網頁瀏覽,搜索和其他用戶的行動),在大數據時代的今天,這是非常重要的一部分數據。Kafka高吞吐量的特性,使他同樣在大數據領域備受歡迎。
ActiveMQ是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ的設計目標是提供標準的,面向消息的,能夠跨越多語言和多系統的應用集成消息通信中間件。它為企業消息傳遞提供高可用,出色性能,可擴展,穩定和安全保障。
RocketMQ源自阿里,純國產件,純Java開發,具有高吞吐量、高可用性、適合大規模分布式系統應用的特點。據說RocketMQ在設計時參考了Kafka,但并不是簡單的復制,它對消息的可靠傳輸及事務性做了優化,目前在阿里集團被廣泛應用支撐了阿里多次雙十一活動,可以說是經歷過大考的中間件。
上面咱么介紹了四種比較常用的中間件技術,但是在具體的工作我們還是需要選擇其中的一種,如下圖中,所體現的特性;就可以作為選擇的一個參考。
通常在我們選擇中間件產品的時候;除了,從技術本身考慮之外,我們都會從兩個方面進行考慮,一個是從公司基礎實力,一個是業務場景。
如果是中小型軟件公司,一般多選擇RabbitMQ,它管理界面用起來十分方便。而且RabbitMQ的社區十分活躍,如果實際開發中遇到什么問題,都可以從社區找到幫助,這點對于中小型公司來說十分重要,因為中小公司,技術水平比較薄弱;這也說明RabbitMQ是一個非常成熟的技術。
如果是大型軟件公司,根據具體使用在RocketMQ和kafka之間二選一。一方面,大型軟件公司,具備足夠的資金搭建分布式環境,也具備足夠大的數據量。而且還可以針對RocketMQ進行定制化開發。
RocketMQ定位于非日志的可靠消息傳輸(日志場景也OK),目前RocketMQ在阿里集團被廣泛應用在訂單,交易,充值,流計算,消息推送,日志流式處理,binglog分發等場景。
Kafka主要特點是追求高吞吐量,如果一開始的目的就是用于日志收集和傳輸。適合于產生大量數據的互聯網服務的數據收集業務。
RabbitMQ基于AMQP協議來實現,AMQP的主要特征是面向消息、隊列、路由(包括點對點和發布/訂閱)、可靠性、安全;所以,對數據一致性、穩定性和可靠性要求很高的場景建議選擇RabbitMQ。
其實更多是時候,是基于以上兩種情況來進行綜合考慮的,既要考慮的成本,又要考慮業務需求。