openstack rabbitmq
2019獨角獸企業重金招聘Python工程師標準>>>
這兩天研究了一下,OpenStack的工作原理,并著重調研了一下RabbitMQ在OpenStack中扮演的角色。
首先,OpenStack中模塊Volume Control、Network Controller、ComputeController以及Scheduler之間的通信是通過AMQP協議實現,消息由RabbitMQ作為中間件轉發,以一種RPC(Remote Process Call)的方式進行的。具體可見圖
其中用戶在dashboard中進行的操作通過Nova.api、Glance.api等調用Volume、Network、ComputeController等模塊,上圖中是一個邏輯結構,可以看出這種基于RPC的松耦合調用可以不用關心某些模塊是否在本機,Openstack的多個模塊間可以輕易以分布式的方式解決。
以Nova為例,每一個Nova服務都會在初期建立兩個隊列,兩個隊列同時與相同的exchange(名稱叫做Nova、類型為Topic)綁定,但是二者的RoutingKey不同也就是Topic不同,格式分別為NODE-TYPE.NODE-ID以及NODE-TYPE,其二者功能也有所不同,并且由于采用RPC結構,所以當操作完成,結果會以Direct的方式回復給服務調用方。該流程是RabbitMQ在Openstack中實現的核心思想,具體圖示如下:
其中Invoker可以看做Nova.api,發出指令,這里TopicConsumer會以一個subscriber的身份注冊到相應隊列上,當隊列有消息過來時,會及時Push給Consumer,當Worker處理完成,則會返回結果,以Direct方式(即雙方Routing Key相同且唯一)回復給Invoker,完成RPC全部流程。
其實針對于OpenStack而言,RabbitMQ并不是唯一選擇,任何基于AMQP協議的消息隊列都可以作為該中間件存在于OpenStack之中。
由于上文提到了以Topic方式進行消息分配(exchange),這里就對RabbitMQ的消息分配模式進行簡單介紹:
1、Direct Exchange queue綁定到exchange上,發送與接收方(訂閱該Queue)必須使用一個完全相同的Routing Key才行
2、Fanout Exchange 不關心Routingkey是什么,只要Queue與該exchange綁定,接收方(訂閱該Queue)就會收到該消息。
3、Topic Exchange 對Routing key進行加工,引入了兩個符號* #,*匹配任意一個詞,#可匹配一個或多個詞,這樣queues以一個高級的Routing Key命名方式與exchange綁定,針對自己感興趣的Topic進行訂閱。
這樣我們就明白了為何Openstack中用topic模式的原因,拿Exchange Nova為例,這上面有六個queue與之綁定,分別是Network、Network.xxx、queue通過這些不同的RoutingKey來獲取不同Topic的消息。
最后還要澄清幾個概念
Connection:連接,是針對于RabbitMQ的AMQP客戶端與之建立的,類似于一個DB的connection
Channel:在Connection基礎上的輕量級的信道
Exchange、Queue、RoutingKey,下圖很好的解釋了三個名詞的概念,這里以一個RoutingKey將Queue Binding到一個Exchange上,一個Exchange與一個Routingkey共同確定了一個到達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?可以看到友善的管理界面
轉載于:https://my.oschina.net/scalewing/blog/169477
總結
以上是生活随笔為你收集整理的openstack rabbitmq的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 泰拉瑞亚天磨有什么用 汉典泰字的基本解释
- 下一篇: 火影忍者祈愿绘马可以买吗