openstack rabbitmq
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
這兩天研究了一下,OpenStack的工作原理,并著重調(diào)研了一下RabbitMQ在OpenStack中扮演的角色。
首先,OpenStack中模塊Volume Control、Network Controller、ComputeController以及Scheduler之間的通信是通過AMQP協(xié)議實(shí)現(xiàn),消息由RabbitMQ作為中間件轉(zhuǎn)發(fā),以一種RPC(Remote Process Call)的方式進(jìn)行的。具體可見圖
其中用戶在dashboard中進(jìn)行的操作通過Nova.api、Glance.api等調(diào)用Volume、Network、ComputeController等模塊,上圖中是一個(gè)邏輯結(jié)構(gòu),可以看出這種基于RPC的松耦合調(diào)用可以不用關(guān)心某些模塊是否在本機(jī),Openstack的多個(gè)模塊間可以輕易以分布式的方式解決。
以Nova為例,每一個(gè)Nova服務(wù)都會(huì)在初期建立兩個(gè)隊(duì)列,兩個(gè)隊(duì)列同時(shí)與相同的exchange(名稱叫做Nova、類型為Topic)綁定,但是二者的RoutingKey不同也就是Topic不同,格式分別為NODE-TYPE.NODE-ID以及NODE-TYPE,其二者功能也有所不同,并且由于采用RPC結(jié)構(gòu),所以當(dāng)操作完成,結(jié)果會(huì)以Direct的方式回復(fù)給服務(wù)調(diào)用方。該流程是RabbitMQ在Openstack中實(shí)現(xiàn)的核心思想,具體圖示如下:
其中Invoker可以看做Nova.api,發(fā)出指令,這里TopicConsumer會(huì)以一個(gè)subscriber的身份注冊(cè)到相應(yīng)隊(duì)列上,當(dāng)隊(duì)列有消息過來時(shí),會(huì)及時(shí)Push給Consumer,當(dāng)Worker處理完成,則會(huì)返回結(jié)果,以Direct方式(即雙方Routing Key相同且唯一)回復(fù)給Invoker,完成RPC全部流程。
其實(shí)針對(duì)于OpenStack而言,RabbitMQ并不是唯一選擇,任何基于AMQP協(xié)議的消息隊(duì)列都可以作為該中間件存在于OpenStack之中。
由于上文提到了以Topic方式進(jìn)行消息分配(exchange),這里就對(duì)RabbitMQ的消息分配模式進(jìn)行簡(jiǎn)單介紹:
1、Direct Exchange queue綁定到exchange上,發(fā)送與接收方(訂閱該Queue)必須使用一個(gè)完全相同的Routing Key才行
2、Fanout Exchange 不關(guān)心Routingkey是什么,只要Queue與該exchange綁定,接收方(訂閱該Queue)就會(huì)收到該消息。
3、Topic Exchange 對(duì)Routing key進(jìn)行加工,引入了兩個(gè)符號(hào)* #,*匹配任意一個(gè)詞,#可匹配一個(gè)或多個(gè)詞,這樣queues以一個(gè)高級(jí)的Routing Key命名方式與exchange綁定,針對(duì)自己感興趣的Topic進(jìn)行訂閱。
這樣我們就明白了為何Openstack中用topic模式的原因,拿Exchange Nova為例,這上面有六個(gè)queue與之綁定,分別是Network、Network.xxx、queue通過這些不同的RoutingKey來獲取不同Topic的消息。
最后還要澄清幾個(gè)概念
Connection:連接,是針對(duì)于RabbitMQ的AMQP客戶端與之建立的,類似于一個(gè)DB的connection
Channel:在Connection基礎(chǔ)上的輕量級(jí)的信道
Exchange、Queue、RoutingKey,下圖很好的解釋了三個(gè)名詞的概念,這里以一個(gè)RoutingKey將Queue Binding到一個(gè)Exchange上,一個(gè)Exchange與一個(gè)Routingkey共同確定了一個(gè)到達(dá)queue上的route。
rabbitmq的命令可以參考http://www.2cto.com/os/201206/137847.html?fw_key=20EAF9E5E8BB84D5
參考資料:
http://docs.openstack.org/developer/nova/devref/rpc.html
http://www.rabbitmq.com/getstarted.html
http://www.infoq.com/articles/AMQP-RabbitMQ
http://wenku.baidu.com/view/800285ea0975f46527d3e19b.html
http://en.wikipedia.org/wiki/RabbitMQ
http://sunjun041640.blog.163.com/blog/static/25626832201031822459205/
http://zhb1208.iteye.com/blog/1330658
代碼:http://sillycat.iteye.com/blog/1579464
PS:
RabbitMQ的管理界面可以通過下面命令安裝
/usr/lib/rabbitmq/lib/rabbitmq_server-2.7.1/sbin/rabbitmq-plugins enable rabbitmq-management
之后重啟rabbitmq,登錄?http://server-name:55672?可以看到友善的管理界面
轉(zhuǎn)載于:https://my.oschina.net/scalewing/blog/169477
總結(jié)
以上是生活随笔為你收集整理的openstack rabbitmq的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 泰拉瑞亚天磨有什么用 汉典泰字的基本解释
- 下一篇: T-Sql(八)字段索引和数据加密