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ū)嵥龅降膯栴}分享給大家。
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。
2. AMQP messaging 中的基本概念
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)”消息模型
4. Exchange類型
Exchange有多種類型,最常用的是Direct/Fanout/Topic三種類型。
Direct
Fanout
Topic
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ā)布
聯(lián)系客服