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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論