摘要:通過消息中間件來通信的話,系統組件間的耦合度就大大降低。所以,消息中間件的最主要的作用是解耦。消息中間件的核心是消息隊列。是阿里開源的消息中間件,它是純開發,具有高吞吐量高可用性適合大規模分布式系統應用的特點。
云計算服務商除了提供云主機、云存儲、云數據庫這些最常用的服務外,通常也會提供一些軟件服務,消息中間件就是比較常用的一種基礎軟件。消息中間件對于分布式系統來說,是一個非常重要的組成部分,相當于系統的基礎設施,主要解決的是分布式系統不同服務組件之間的數據通信問題。其已成為在業務層和IaaS層之間的支撐橋梁,PaaS和中間件及服務變得越來越受關注,成為云計算的關鍵所在。
消息中間件的作用
一般服務組件間進行通信,都是通過暴露數據接口的方式,這種通信方式比較直接,但系統之間的耦合度會比較高。如果系統的服務組件很多,互相調用起來,整個系統的接口調用關系會很復雜。通過消息中間件來通信的話,系統組件間的耦合度就大大降低。所以,消息中間件的最主要的作用是解耦。
消息中間件的核心是消息隊列(MQ: Message Queue)。消息隊列是大型分布式系統中不可或缺的重要組成部分,主要解決了應用解耦,異步處理,流量削峰,消息通訊等問題,支撐實現分布式系統的高并發,高和最終一致性。
消息中間件的另外一個好處是提高了分布式系統的可靠性, 服務組件通過消息中間件給別的組件發消息,別的組件即時當前沒空處理,等到空閑時看到這個消息,就可以處理了。
消息中間件的工作原理
消息中間件主要有兩種工作模式:
(1) ? 一種是生產者/消費者(Producer/Consumer)模式;
(2) ?另一種是發布/訂閱(Pub/Sub)模式。
生產/消費模式中有兩種角色,消息生產者(Producer)負責生產消息,并把消息發送到隊列中,然后消息消費者(Consumer)從隊列中取出并且消費消息。生產/消費模式是一種一對一的消息傳遞方式。
消息被消費以后,隊列中就不再存儲,所以其他消費者不可能消費到已經被消費的消息。 換句話說,存在多個消費者的情況下,對一個消息而言,只會有一個消費者可以消費它,所以生產/消費模式又稱為點對點(P2P)模式。
P2P的特點:
每個消息只有一個消費者(Consumer)(即一旦被消費,消息就不再在消息隊列中);
生產者和消費者之間在時間上沒有依賴性,也就是說當生產者發送出消息之后,不管消費者有沒有正在運行它不會影響到消息被發送到隊列;
消費者在成功接收消息之后需向隊列應答成功;
如果希望發送的每個消息都會被成功處理的話,那么需要P2P模式;
在發布/訂閱( Pub/Sub)模式中,包含三個角色主題(Topic),消息發布者(Publisher),消息訂閱者(Subscriber) 。消息發布者(Publisher)將消息發布到某個主題(topic),同時有多個消息訂閱者(Subscriber)會接收到該消息。和P2P方式不同,發布到主題的消息會被所有該主題的訂閱者接收到,這是一種1對多的消息傳遞方式。
Pub/Sub的特點:
· ? ? ?每個消息可以有多個消費者
· ? ? ?發布者和訂閱者之間有時間上的依賴性。針對某個主題(Topic)的訂閱者,它必須創建一個訂閱者之后,才能消費發布者的消息。
· ? ? ?為了消費消息,訂閱者必須保持運行的狀態。
· ? ? ?如果希望發送的消息可以不被做任何處理、或者只被一個消息者處理、或者可以被多個消費者處理的話,那么可以采用Pub/Sub模型。
常用的消息中間件
市場上出現過很多商用消息中間件產品,比如Sun的JMS等,還有很多開源消息引擎,比如ActiveMQ、Kafka等。另外像阿里、騰訊這樣的大公司往往會開發自己的消息中間件,比如RocketMQ。下面介紹幾種在生產環境中使用較多的消息隊列。
(1)ActiveMQ/ApolloMQ
ActiveMQ是Apache出品的最流行的開源消息總線,同時也是一個完全支持JMS1.1和J2EE 1.4規范的JMS Provider實現,使用Java語言編寫。作為老牌消息隊列,可謂歷史悠久,但歷史包袱也比較多。最新架構的產品為ApolloMQ。
(2)Kafka
Kafka是LinkedIn開源的分布式發布-訂閱消息系統,目前歸屬于Apache頂級項目。Kafka主要特點是基于Pull的模式來處理消息消費,追求高吞吐量,設計目標就是用于日志收集和傳輸。
Kafka生態完善,其代碼是用Scala語言編寫,并且有很多不同編程語言的接口,尤其適合海量消息傳遞。
(3)RabbitMQ
RabbitMQ是一個在AMQP基礎上完成的,可復用的企業消息系統。他遵循Mozilla Public License開源協議。由Erlang語言編寫。AMQP協議更多用在企業系統內,對數據一致性、穩定性和可靠性要求很高的場景,對性能和吞吐量的要求還在其次。
RabbitMQ比Kafka可靠,kafka更適合IO高吞吐的處理,一般應用在大數據日志處理或對實時性(少量延遲),可靠性(少量丟數據)要求稍低的場景使用,比如ELK日志收集。
(4)RocketMQ
RocketMQ是阿里開源的消息中間件,它是純Java開發,具有高吞吐量、高可用性、適合大規模分布式系統應用的特點。RocketMQ思路起源于Kafka,但并不是Kafka的一個Copy,它對消息的可靠傳輸及事務性做了優化,目前在阿里集團被廣泛應用于交易、充值、流計算、消息推送、日志流式處理、binglog分發等場景。
性能與可靠性,魚與熊掌不可兼得,面對不同的消息中間件產品如何抉擇,要看各自業務場景的需求和定位。
小結
從中間件的常規定義來看,其可以包括各種軟件方案,API、應用服務器、數據整合、對象請求代理等等,任何位于內核和用戶應用之間的軟件都可以理解為中間件。中間件如同IT 基礎架構的輸水管,使得數據能從一個應用流動到另一個中。
當中間件走上云端,大家突然發現可以不再圍繞SOAP/XML來構建標準化的方案,微服務架構帶來了新的思路,企業用戶能夠使用云中間件將業務流程逐步遷移到云集成服務上,最終實現靈活擴展和降本增效,進而推動了平臺現代化標準的構建。
啟迪云-高級測試工程師 黃冬琪
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/5560.html
摘要:導語本期采訪對象黃允松,青云創始人及。作為一個純粹的工具理性主義者,黃允松致力于打造優良的工具,大幅降低的復雜性,讓一切變得更加平滑和簡單,這是他讓世界變得美好起來的方式。 showImg(http://segmentfault.com/img/bVbYfe);文:Gracia 攝影:周振邦(本文為原創內容,部分或全文轉載均需經過作者授權,并保留完整的作者信息和技術人攻略介紹。) ...
摘要:用線程池執行異步任務為了減少阻塞時間,加快響應速度,把無需返回結果的操作變成異步任務,用線程池來執行,這是提高性能的一種手段。疲于奔命的模式,做不好大型服務端開發,也難以做好各種領域的開發。 1. 用線程池執行異步任務 為了減少阻塞時間,加快響應速度,把無需返回結果的操作變成異步任務,用線程池來執行,這是提高性能的一種手段。 你可能要驚訝了,這么做不對嗎? 首先,我們把異步任務分...
摘要:用線程池執行異步任務為了減少阻塞時間,加快響應速度,把無需返回結果的操作變成異步任務,用線程池來執行,這是提高性能的一種手段。疲于奔命的模式,做不好大型服務端開發,也難以做好各種領域的開發。 1. 用線程池執行異步任務 為了減少阻塞時間,加快響應速度,把無需返回結果的操作變成異步任務,用線程池來執行,這是提高性能的一種手段。 你可能要驚訝了,這么做不對嗎? 首先,我們把異步任務分...
摘要:對于商業市場來說,特別是中國這樣一個云計算才剛剛起步的市場。反觀云計算售賣的一些商品,目前主要還是以服務器為主。云計算的本質是將計算能力轉化為標準化,可售賣的服務。可以說是云計算實踐的一個經典案例。有的人會問,云計算廠商需要提供哪些服務。 2015年伊始,國內云計算市場可謂風起云涌。各路群豪紛紛涌入這個市場。其中最活躍的領域當屬IAAS。阿里騰訊硝煙未盡,百度重新檢討了自己的PAAS戰略后,...
摘要:運行監控云計算的運維管理應從數據中心的日常監控人手,對日常維護管理事件管理變更管理以及應急預案管理等進行全方位的日常監控,以提前發現問題并消除隱患。自動化管理已然成為了當前云計算運維管理的一個必然發展趨勢。從而有效實現云計算運維管理的改進。云計算在企業運營中的基本工作原理是將計算分布在大量分布式計算機中,從而使企業數據中心的運行和互聯網更為相似。通過云計算的運維管理,企業不僅能夠實現對IT資...
閱讀 3463·2019-08-30 13:15
閱讀 1401·2019-08-29 18:34
閱讀 825·2019-08-29 15:18
閱讀 3487·2019-08-29 11:21
閱讀 3250·2019-08-29 10:55
閱讀 3699·2019-08-26 10:36
閱讀 1872·2019-08-23 18:37
閱讀 1822·2019-08-23 16:57