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