消息隊列及中轉(zhuǎn)軟件總結(jié)資料_第1頁
消息隊列及中轉(zhuǎn)軟件總結(jié)資料_第2頁
消息隊列及中轉(zhuǎn)軟件總結(jié)資料_第3頁
消息隊列及中轉(zhuǎn)軟件總結(jié)資料_第4頁
消息隊列及中轉(zhuǎn)軟件總結(jié)資料_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

消息隊列及中轉(zhuǎn)軟件總結(jié)摘要ZeroMQActiveMQRedisMongoDBMemcached都是開源產(chǎn)品,都可以實現(xiàn)消息中轉(zhuǎn)的功能,但各有不同。ZeroMQActiveMQ消息中轉(zhuǎn)實現(xiàn)形式為隊列形式,分布式、集群服務(wù)助手。RedisMongoDB較成熟的非結(jié)構(gòu)性數(shù)據(jù)庫產(chǎn)品,key-value數(shù)據(jù)庫,結(jié)構(gòu)松散的文本型數(shù)據(jù)庫。Memcached高性能的分布式內(nèi)存對象緩存系統(tǒng),數(shù)據(jù)讀寫速度內(nèi)存級別。MQ消息隊列消息隊列(MQ)是一種應用程序?qū)贸绦虻耐ㄐ欧椒?。應用程序通過寫和檢索出入列隊的數(shù)據(jù)(消息)來通信,而無需專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發(fā)送數(shù)據(jù)進行通信,而不是通過直接調(diào)用彼此來通信,直接調(diào)用通常是用于諸如遠程過程調(diào)用的技術(shù)。排隊指的是應用程序通過隊列來通信。隊列的使用除去了接收和發(fā)送應用程序同時執(zhí)行的要求,一般情況下都需要有一個隊列維護服務(wù)。消息服務(wù)器在分布式系統(tǒng)各應用間消息通信起到了至關(guān)重要的作用。ZeroMQZeroMQ是一種基于消息隊列的多線程網(wǎng)絡(luò)庫,其對套接字類型、連接處理、幀、甚至路由的底層細節(jié)進行抽象,提供跨越多種傳輸協(xié)議的套接字。ZeroMQ是非典型的消息中間件,而且更像是一個網(wǎng)絡(luò)通信框架ZeroMQ是網(wǎng)絡(luò)通信中新的一層,介于應用層和傳輸層之間(按照TCP/IP劃分),其是一個可伸縮層,可并行運行,分散在分布式系統(tǒng)間。ZeroMQ號稱是最快的消息隊列系統(tǒng),尤其針對大吞吐量的需求場景。ZMQ能夠?qū)崿F(xiàn)RabbitMQ不擅長的高級/復雜的隊列,但是開發(fā)人員需要自己組合多種技術(shù)框架,技術(shù)上的復雜度是對ZMQ能夠應用成功的挑戰(zhàn)。ZeroMQ具有一個獨特的非中間件的模式,甚至不需要安裝和運行一個消息服務(wù)器或中間件,因為應用程序?qū)缪葸@個服務(wù)角色。只需要簡單的引用ZeroMQ程序庫,然后就可以愉快的在應用程序之間發(fā)送消息了。但是ZeroMQ僅提供非持久性的隊列,也就

是說如果down機,數(shù)據(jù)將會丟失。其中,Twitter的Storm中使用ZeroMQ作為數(shù)據(jù)流的傳輸。ZMQ是個類似于Socket的一系列接口,他跟Socket的區(qū)別是普通的Socket是端到端的(1:1的關(guān)系),而ZMQ卻是可以N:M的關(guān)系,人們對BSD套接字的了解較多的是點對點的連接,點對點連接需要顯式地建立連接、銷毀連接、選擇協(xié)議(TCP/UDP)和處理錯誤等,而ZMQ屏蔽了這些細節(jié),讓你的網(wǎng)絡(luò)編程更為簡單。ZMQ用于node與node間的通信,node可以是主機或者是進程。ZeroMQ不是單獨的服務(wù)或者程序,僅僅是一套組件,其封裝了網(wǎng)絡(luò)通信、消息隊列、線程調(diào)度等功能,向上層提供簡潔的API,應用程序通過加載庫文件,調(diào)用API函數(shù)來實現(xiàn)高性能網(wǎng)絡(luò)通信。ZeroMQ消模型ZeroMQ消模型ZeroMQ將消息通信分成4種模型,分別是一對一結(jié)對模型(Exclusive-Pair)、請求回應模型(Request-Reply)、發(fā)布訂閱模型(Publish-Subscribe)、推拉模型(Push-Pull)。這4種模型總結(jié)出了通用的網(wǎng)絡(luò)通信模型,在實際中可以根據(jù)應用需要,組合其中的2種或多種模型來形成自己的解決方案?!獙σ唬篢CPConnection,TCPSever只能接受一^連接,數(shù)據(jù)雙向流動請求回應:一個服務(wù)端對應多個客戶端,每個請求服務(wù)端都會給一個回應,相當于1對N的方式。

。少廿%刑多工由查王盅爵現(xiàn)'果我地耶'好耶去由波'閶耶建御襄M丑君裝"八"S面'噂"八"S屐笏我朗回黑^ueiiD£多身鑿口*'噂lind區(qū)黑^ueiiD'WqsndE^WjeAjes:畫弗f。。盅爵諭蕓址展由國召反荔卷否既卸砌'咨甌IX'黑圈且核果但曾到我手叫顯耆QW玄目郢暮綏好回由黑牢孕同闔11山尊?€ZeroMQ通信協(xié)議:提供進程內(nèi)、進程間、機器間、廣播等四種通信協(xié)議,支持的具體協(xié)議類型有:inproc、ipc、tcp、pgm。用類似于URL形式的字符串指定即可,格式分別為inproc://、ipc://、tcp://、pgm://。ZeroMQ會自動根據(jù)指定的字符串解析出協(xié)議、地址、端口號等信息P I口心、o支持常用的多種語言客戶端C++、Java、.Net、Python、Php、Ruby等。ZeroMQ性能目前,市面上類似的產(chǎn)品不少,主要有4種:MSMQ(微軟產(chǎn)品)、ActiveMQ(Java)、RabbitMQ(Erlang)、ZeroMQ(C++)。除ZeroMQ外,其它3款產(chǎn)品都是一個單獨服務(wù)或者進程,需要單獨安裝和運行,且對環(huán)境有一定依賴。其中,MSMQ在非Windows平臺下安裝非常復雜,ActiveMQ需要目標機器上已經(jīng)安裝了Java,RabbitMQ需要Erlang環(huán)境。而ZeroMQ是以庫的形式存在,由應用程序加載、運行即可。但是ZeroMQ僅提供非持久性的消息隊列。下圖是來自Internet的性能測試數(shù)據(jù)。顯示的是每秒鐘發(fā)送和接受的消息數(shù)。整個過程共產(chǎn)生1百萬條1K的消息,測試環(huán)境為WindowsVista。從測試數(shù)據(jù)可以看出,ZeroMQ的性能遠遠高于其它3個MQ。MSMQActjveMQ.RabbitMQZeroMQ■Send11405&45212278242659■Recede7021&4531228188699ZeroMQ優(yōu)點:1、 僅僅提供24個API接口,風格類似于BSDSocket。2、 處理了網(wǎng)絡(luò)異常,包括連接異常中斷、重連等。3、 改變TCP基于字節(jié)流收發(fā)數(shù)據(jù)的方式,處理了粘包、半包等問題,以msg為單位收發(fā)數(shù)據(jù),結(jié)合ProtocolBuffers,可以對應用層徹底屏蔽網(wǎng)絡(luò)通信層。4、 對大數(shù)據(jù)通過SENDMORE/RECVMORE提供分包收發(fā)機制。5、 通過線程間數(shù)據(jù)流動來保證同一時刻任何數(shù)據(jù)都只會被一個線程持有,以此實現(xiàn)多線程的“去鎖化”。6、 通過高水位HWM來控制流量,用交換SWAP來轉(zhuǎn)儲內(nèi)存數(shù)據(jù),彌補HWM丟失數(shù)據(jù)的缺陷。7、 服務(wù)器端和客戶端的啟動沒有先后順序。靈活1、支持多種通信協(xié)議,可以靈活地適應多種通信環(huán)境,包括進程內(nèi)、進程間、機器間、廣播。2、支持多種消息模型,消息模型之間可以相互組合,形成特定的解決方案??缙脚_支持Linux、Windows、OSX等。多語言可以綁定C、C++、Java、.NET、Python等30多種開發(fā)語言。高性能相對同類產(chǎn)品,性能卓越。ActiveMQActiveMQ是Apache下的一^子項目。類似于ZeroMQ,它能夠以代理人和點對點的技術(shù)實現(xiàn)隊列。它用少量代碼就可以高效地實現(xiàn)高級應用場景。是流行的,能力強勁的開源消息總線。語言和協(xié)議語言:支持常用的多種語言客戶端C++、Java、.Net、Python、Php、Ruby等,其中Java環(huán)境資料比較多。應用協(xié)議:OpenWire,StompREST,WSNotification,XMPP,AMQP。傳送協(xié)議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA。其他ActiveMQ可以很容易內(nèi)嵌到使用Spring的系統(tǒng)里面去支持通過JDBC和journal提供高速的消息持久化從設(shè)計上保證了高性能的集群,客戶端-服務(wù)器,點對點可以很容易得調(diào)用內(nèi)嵌JMSprovider服務(wù)端與Java客戶端通信實例已完成RabbitMQ是使用Erlang編寫的一個開源的消息隊列,支持很多的協(xié)議AMQP,XMPP,SMTP,STOMP,也正是如此,使的它變的非常重量級,更適合于企業(yè)級的開發(fā)。同時實現(xiàn)了一個經(jīng)紀人(Broker)構(gòu)架,這意味著消息在發(fā)送給客戶端時先在中心隊列排隊。對路由(Routing),負載均衡(Loadbalance)或者數(shù)據(jù)持久化都有很好的支持,適合于在分布式集群系統(tǒng)中做消息中轉(zhuǎn)服務(wù)。Redis.MongoDB.Memcache是一個Key-Value的NoSQL數(shù)據(jù)庫,開發(fā)維護很活躍,雖然它是一個Key-Value數(shù)據(jù)庫存儲系統(tǒng),但它本身支持MQ功能,所以完全可以當做一個輕量級的隊列服務(wù)來使用。對于RabbitMQ和Redis的入隊和出隊操作,各執(zhí)行100萬次,每10萬次記錄一次執(zhí)行時間。測試數(shù)據(jù)分為128Bytes、512Bytes、1K和10K四個不同大小的數(shù)據(jù)。實驗表明入隊時,當數(shù)據(jù)比較小時Redis的性能要高于RabbitMQ,而如果數(shù)據(jù)大小超過了10K,Redis則慢的無法忍受;出隊時,無論數(shù)據(jù)大小,Redis都表現(xiàn)出非常好的性能,而RabbitMQ的出隊性能則遠低于Redis。項目入隊出隊數(shù)據(jù)量128B512B1K10K128B512B1K10KRedis160881596117094251595520449180989355RabbitMQ106279916937023663219317429821588MongoDB和Redis都是NoSQL數(shù)據(jù)庫。二者在使用場景中,存在一定的區(qū)別,這也主要由于二者在內(nèi)存映射的處理過程,持久化的處理方法不同。MongoDB建議集群部署,更多的考慮到集群方案,Redis更偏重于進程順序?qū)懭?,雖然支持集群,也僅限于主-從模式。Memcached是一^高性能的分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web應用以減輕數(shù)據(jù)庫負載。它通過在內(nèi)存中緩存數(shù)據(jù)和對象來減少讀取數(shù)據(jù)庫的次數(shù),從而提高動態(tài)、數(shù)據(jù)庫驅(qū)動網(wǎng)站的速度。Memcached基于一個存儲鍵/值對的hashmap。其守護進程(daemon)是用C寫的,但是客戶端可以用任何語言來編寫,并通過memcached協(xié)議與守護進程通信。MongoDB與Redis對比說明指標MongoDBRedis比較說明實現(xiàn)語言C++C/C++協(xié)議BSON、^義二進制類Telnet

性能依賴內(nèi)存依賴內(nèi)存,TPS高Redis優(yōu)于MongoDB可操作性豐富的數(shù)據(jù)表達、索引;最類似于關(guān)系數(shù)據(jù)庫,支持豐富的查詢語言數(shù)據(jù)豐富,較少的IOMongoDB優(yōu)于Redis內(nèi)存及存儲適合大數(shù)據(jù)量存儲,依賴系統(tǒng)虛擬內(nèi)存管理,采用鏡像文件存儲;內(nèi)存占有率比較高,官方建議部署在64位操作系統(tǒng)上Redis2.0后增加虛擬內(nèi)存特性,突破物理內(nèi)存限制;數(shù)據(jù)可以設(shè)置時效性,類似于Memcache不用應用角度,各有優(yōu)勢可用性支持master-slave、replicaset(內(nèi)部采用poxos選舉算法,自動故障恢復),autosharding機制,對客戶端屏蔽了故障轉(zhuǎn)移和切分機制依賴客戶端來實現(xiàn)分布式讀寫;主從復制時,每次從節(jié)點重新連接主節(jié)點都要依賴整個快照,無增量復制;不支持自動sharding,需要依賴程序設(shè)定一致hash機制MongoDB優(yōu)于Redis,單點問題上,MongoDB應用簡單,相對用戶透明,Redis比較復制,需要客戶主動解決。MongoDB般會使用replicasets 和sharding功能結(jié)合,replicasets側(cè)重高可用性及高可靠性,而shard

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論