国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
消息隊(duì)列基礎(chǔ) ?RabbitMQ與AMQP協(xié)議詳解——超大規(guī)模高可用OpenStack核心技術(shù)深入解析系列(二)

OpenStack已經(jīng)在很多大型企業(yè)里支撐起核心生產(chǎn)業(yè)務(wù),這都源于OpenStack中的核心技術(shù)與架構(gòu),超大規(guī)模高可用OpenStack平臺(tái)核心技術(shù)深入解析系列文章,主要介紹了EasyStack在企業(yè)級(jí)OpenStack一線實(shí)踐中的所見所感,將分為消息隊(duì)列篇,計(jì)算篇,存儲(chǔ)篇,網(wǎng)絡(luò)篇等等,每篇中的內(nèi)容都以基礎(chǔ)、高級(jí)劃分,將OpenStack落地最后一公里實(shí)打?qū)嵥龅降膯栴}分享給大家。

RabbitMQ與AMQP協(xié)議詳解


1. 消息隊(duì)列的歷史
了解一件事情的來龍去脈,將不會(huì)對(duì)它感到神秘。讓我們來看看消息隊(duì)列(Message Queue)這項(xiàng)技術(shù)的發(fā)展歷史。

Message Queue的需求由來已久,80年代最早在金融交易中,高盛等公司采用Teknekron公司的產(chǎn)品,當(dāng)時(shí)的Message queuing軟件叫做:the information bus(TIB)。 TIB被電信和通訊公司采用,路透社收購了Teknekron公司。之后,IBM開發(fā)了MQSeries,微軟開發(fā)了Microsoft Message Queue(MSMQ)。這些商業(yè)MQ供應(yīng)商的問題是廠商鎖定,價(jià)格高昂。2001年,Java Message queuing試圖解決鎖定和交互性的問題,但對(duì)應(yīng)用來說反而更加麻煩了。

于是2004年,摩根大通和iMatrix開始著手Advanced Message Queuing Protocol (AMQP)開放標(biāo)準(zhǔn)的開發(fā)。2006年,AMQP規(guī)范發(fā)布。2007年,Rabbit技術(shù)公司基于AMQP標(biāo)準(zhǔn)開發(fā)的RabbitMQ 1.0 發(fā)布。

目前RabbitMQ的最新版本為3.5.7,基于AMQP 0-9-1。


RabbitMQ采用Erlang語言開發(fā)。Erlang語言由Ericson設(shè)計(jì),專門為開發(fā)concurrent和distribution系統(tǒng)的一種語言,在電信領(lǐng)域使用廣泛。OTP(Open Telecom Platform)作為Erlang語言的一部分,包含了很多基于Erlang開發(fā)的中間件/庫/工具,如mnesia/SASL,極大方便了Erlang應(yīng)用的開發(fā)。OTP就類似于Python語言中眾多的module,用戶借助這些module可以很方便的開發(fā)應(yīng)用。

2. AMQP messaging 中的基本概念


Broker: 接收和分發(fā)消息的應(yīng)用,RabbitMQ Server就是Message Broker。

Virtual host: 出于多租戶和安全因素設(shè)計(jì)的,把AMQP的基本組件劃分到一個(gè)虛擬的分組中,類似于網(wǎng)絡(luò)中的namespace概念。當(dāng)多個(gè)不同的用戶使用同一個(gè)RabbitMQ server提供的服務(wù)時(shí),可以劃分出多個(gè)vhost,每個(gè)用戶在自己的vhost創(chuàng)建exchange/queue等。

Connection: publisher/consumer和broker之間的TCP連接。斷開連接的操作只會(huì)在client端進(jìn)行,Broker不會(huì)斷開連接,除非出現(xiàn)網(wǎng)絡(luò)故障或broker服務(wù)出現(xiàn)問題。

Channel: 如果每一次訪問RabbitMQ都建立一個(gè)Connection,在消息量大的時(shí)候建立TCP Connection的開銷將是巨大的,效率也較低。Channel是在connection內(nèi)部建立的邏輯連接,如果應(yīng)用程序支持多線程,通常每個(gè)thread創(chuàng)建單獨(dú)的channel進(jìn)行通訊,AMQP method包含了channel id幫助客戶端和message broker識(shí)別channel,所以channel之間是完全隔離的。Channel作為輕量級(jí)的Connection極大減少了操作系統(tǒng)建立TCP connection的開銷。

Exchange: message到達(dá)broker的第一站,根據(jù)分發(fā)規(guī)則,匹配查詢表中的routing key,分發(fā)消息到queue中去。常用的類型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)。

Queue: 消息最終被送到這里等待consumer取走。一個(gè)message可以被同時(shí)拷貝到多個(gè)queue中。

Binding: exchange和queue之間的虛擬連接,binding中可以包含routing key。Binding信息被保存到exchange中的查詢表中,用于message的分發(fā)依據(jù)。

3. 典型的“生產(chǎn)/消費(fèi)”消息模型


生產(chǎn)者發(fā)送消息到broker server(RabbitMQ)。在Broker內(nèi)部,用戶創(chuàng)建Exchange/Queue,通過Binding規(guī)則將兩者聯(lián)系在一起。Exchange分發(fā)消息,根據(jù)類型/binding的不同分發(fā)策略有區(qū)別。消息最后來到Queue中,等待消費(fèi)者取走。

4. Exchange類型
Exchange有多種類型,最常用的是Direct/Fanout/Topic三種類型。

Direct


Message中的“routing key”如果和Binding中的“binding key”一致, Direct exchange則將message發(fā)到對(duì)應(yīng)的queue中。

Fanout


每個(gè)發(fā)到Fanout類型Exchange的message都會(huì)分到所有綁定的queue上去。

Topic


根據(jù)routing key,及通配規(guī)則,Topic exchange將分發(fā)到目標(biāo)queue中。

Routing key中可以包含兩種通配符,類似于正則表達(dá)式:

#”通配任何零個(gè)或多個(gè)word“*”通配任何單個(gè)word

這里也推薦給想要了解RabbitMQ的同學(xué)一個(gè)網(wǎng)站,http://tryrabbitmq.com ,它提供在線RabbitMQ 模擬器,可以幫助理解Exchange/queue/binding概念。

至此,我們對(duì)于消息隊(duì)列的發(fā)展,RabbitMQ的產(chǎn)生,以及AMQP協(xié)議中的重要概念做了一個(gè)完整的介紹,接下來,我們將從RabbitMQ集群,從運(yùn)維角度看RabbitMQ,RabbitMQ是如何支撐千臺(tái)節(jié)點(diǎn)OpenStack環(huán)境這些方面進(jìn)行深入討論。

作者:石奎,EasyStack高級(jí)架構(gòu)師,曾任職WindRiver/EMC/華為等知名企業(yè),十余年Linux操作系統(tǒng)定制開發(fā)及Kernel驅(qū)動(dòng)開發(fā)經(jīng)驗(yàn),2012年開始貢獻(xiàn)OpenStack社區(qū),曾參與設(shè)計(jì)并實(shí)施國內(nèi)金融領(lǐng)域首個(gè)支撐核心生產(chǎn)系統(tǒng)高可靠、高可用OpenStack云平臺(tái),具有豐富的超大規(guī)模OpenStack云平臺(tái)的設(shè)計(jì)與實(shí)施經(jīng)驗(yàn),去年開始深入研究NFV領(lǐng)域技術(shù)及項(xiàng)目設(shè)計(jì)實(shí)施。

本文來自easystack授權(quán)發(fā)布

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
RabbitMQ介紹
RabbitMQ中 exchange、route、queue的關(guān)系
erlang和RabbitMQ學(xué)習(xí)總結(jié)
SpringBoot成神之路--21.消息隊(duì)列簡介及RabbitMQ的安裝與使用(一)
RabbitMQ基礎(chǔ)概念詳細(xì)介紹
Python云計(jì)算框架:Openstack源碼分析之RabbitMQ(一)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服