Communication Framework
in
OpenStack
Sean Chang
2014/12
Overview of OpenStack commnication
My OpenStack environment
OpenStack communication architecture
AMQP
RabbitMQ
kombu
How to debug
Three nodes for OpenStack
Nodes(mgm. ip)
control(10.10.10.21)
NTP, RabbitMQ, MySQL,
Keystone, Glance,
Neutron, Nova, Cinder,
Heat, and Horizon
network(10.10.10.22)
NTP and Neutron
compute(10.10.10.23)
NTP, Nova, and Neutron
Communication Flow
Neutron
Messaging in Openstack using RabbitMQ
( Queue–server)
AMQP
MQ support
Supporting list
RabbitMQ(default in JUNO)
Qpid
ZeroMQ(non-AMQP)
●The Advanced Message Queuing Protocol (AMQP) is
an open standard for passing business messages
between applications or organizations.
● AMQP was designed with the following main
characteristics as goals:
○ Security
○ Reliability
○ Interoperability
○ Standard
○ Open
AMQP
AMQP Product and Success Stories
A standard is no use without products, and there are is a choice of
excellent AMQP technology suppliers.
Apache Qpid, an Apache project
Microsoft's Windows Azure Service Bus
JBoss A-MQ by Red Hat built from Qpid
StormMQ a cloud hosted messaging service based on AMQP
VMware Inc RabbitMQ; also supported by SpringSource
...
OpenStack
OpenStack is an open-source initiative that provides a massively scalable cloud operating
system and uses RabbitMQ for messaging.
Why does OpenStack use AMQP
Consider design and scalability
Loose coupling between client and server side
Asynchronize is available
Load balance could be inactive
RabbitMQ
You may be thinking of data delivery, non-blocking operations or push
notifications. Or you want to use publish / subscribe, asynchronous
processing, or work queues. All these are patterns, and they form
part of messaging.
RabbitMQ is a messaging broker - an intermediary for messaging. It
gives your applications a common platform to send and receive
messages, and your messages a safe place to live until received.
kombu
kombu - Messaging library for Python
Kombu is a messaging library for Python.
The aim of Kombu is to make messaging in Python as easy as possible by providing an
idiomatic high-level interface for the AMQ protocol, and also provide proven and tested
solutions to common messaging problems.
AMQP is the Advanced Message Queuing Protocol, an open standard protocol for message
orientation, queuing, routing, reliability and security, for which the RabbitMQmessaging
server is the most popular implementation.
重點提要
雖然網路上有關AMQP、RabbitMQ、kombu的
資料不計其數,但真正OpenStack在實作上
應用範圍看下面幾頁就夠了
了解太多反而會失去方向
The internals elements of a message broker
node
Internals elements relationship
Producers
Producers sends messages to an exchange.
Exchanges
Messages are sent to exchanges. Exchanges are named and can be
configured to use one of several routing algorithms. The exchange routes
the messages to consumers by matching the routing key in the message
with the routing key the consumer provides when binding to the
exchange.
Consumers
Consumers declares a queue, binds it to a exchange and receives messages
from it.
Queues
Queues receive messages sent to exchanges. The queues are declared by
consumers.
Routing keys
Every message has a routing key. The interpretation of the routing key depends on the exchange type.
There are four default exchange types defined by the AMQP standard, and vendors can define
custom types (so see your vendors manual for details).
These are the default exchange types defined by AMQP/0.8:
Direct exchange
Matches if the routing key property of the message and the routing_key attribute of the
consumer are identical.
Fan-out exchange
Always matches, even if the binding does not have a routing key.
Topic exchange
Matches the routing key property of the message by a primitive pattern matching scheme. The
message routing key then consists of words separated by dots (”.”, like domain names),
and two special characters are available; star (“*”) and hash (“#”). The star matches any
word, and the hash matches zero or more words. For example “*.stock.#” matches the
routing keys “usd.stock” and “eur.stock.db” but not “stock.nasdaq”.
The exchange types(define by AMQP)
RPC Casts
RPC Calls
How to debug
command line
rabbitmqctl [-n node] [-q] {command} [command
options...]
How to debug
Management Plugin
The rabbitmq-management plugin
provides an HTTP-based API
for management and monitoring
of your RabbitMQ server, along
with a browser-based UI and a
command line tool,
rabbitmqadmin.
Web UI
http://server-name:15672/
default account/passwd:
guest/guest
心得
docs.openstack.org就是很好的學習出發點,
不管是整體概念、系統架構、設計說明、程
式碼說明;其他資料如lib docs、網路文件、
甚至是openstack source code當作真的看不
懂再去找就可以,避免繞遠路。
小心見林不見樹、見樹不見林
Q & A

Commication Framework in OpenStack

  • 1.
  • 2.
    Overview of OpenStackcommnication My OpenStack environment OpenStack communication architecture AMQP RabbitMQ kombu How to debug
  • 3.
    Three nodes forOpenStack Nodes(mgm. ip) control(10.10.10.21) NTP, RabbitMQ, MySQL, Keystone, Glance, Neutron, Nova, Cinder, Heat, and Horizon network(10.10.10.22) NTP and Neutron compute(10.10.10.23) NTP, Nova, and Neutron
  • 4.
  • 5.
    Neutron Messaging in Openstackusing RabbitMQ ( Queue–server)
  • 6.
  • 7.
    MQ support Supporting list RabbitMQ(defaultin JUNO) Qpid ZeroMQ(non-AMQP)
  • 8.
    ●The Advanced MessageQueuing Protocol (AMQP) is an open standard for passing business messages between applications or organizations. ● AMQP was designed with the following main characteristics as goals: ○ Security ○ Reliability ○ Interoperability ○ Standard ○ Open AMQP
  • 9.
    AMQP Product andSuccess Stories A standard is no use without products, and there are is a choice of excellent AMQP technology suppliers. Apache Qpid, an Apache project Microsoft's Windows Azure Service Bus JBoss A-MQ by Red Hat built from Qpid StormMQ a cloud hosted messaging service based on AMQP VMware Inc RabbitMQ; also supported by SpringSource ... OpenStack OpenStack is an open-source initiative that provides a massively scalable cloud operating system and uses RabbitMQ for messaging.
  • 10.
    Why does OpenStackuse AMQP Consider design and scalability Loose coupling between client and server side Asynchronize is available Load balance could be inactive
  • 11.
    RabbitMQ You may bethinking of data delivery, non-blocking operations or push notifications. Or you want to use publish / subscribe, asynchronous processing, or work queues. All these are patterns, and they form part of messaging. RabbitMQ is a messaging broker - an intermediary for messaging. It gives your applications a common platform to send and receive messages, and your messages a safe place to live until received.
  • 12.
    kombu kombu - Messaginglibrary for Python Kombu is a messaging library for Python. The aim of Kombu is to make messaging in Python as easy as possible by providing an idiomatic high-level interface for the AMQ protocol, and also provide proven and tested solutions to common messaging problems. AMQP is the Advanced Message Queuing Protocol, an open standard protocol for message orientation, queuing, routing, reliability and security, for which the RabbitMQmessaging server is the most popular implementation.
  • 13.
  • 14.
    The internals elementsof a message broker node
  • 15.
    Internals elements relationship Producers Producerssends messages to an exchange. Exchanges Messages are sent to exchanges. Exchanges are named and can be configured to use one of several routing algorithms. The exchange routes the messages to consumers by matching the routing key in the message with the routing key the consumer provides when binding to the exchange. Consumers Consumers declares a queue, binds it to a exchange and receives messages from it. Queues Queues receive messages sent to exchanges. The queues are declared by consumers.
  • 16.
    Routing keys Every messagehas a routing key. The interpretation of the routing key depends on the exchange type. There are four default exchange types defined by the AMQP standard, and vendors can define custom types (so see your vendors manual for details). These are the default exchange types defined by AMQP/0.8: Direct exchange Matches if the routing key property of the message and the routing_key attribute of the consumer are identical. Fan-out exchange Always matches, even if the binding does not have a routing key. Topic exchange Matches the routing key property of the message by a primitive pattern matching scheme. The message routing key then consists of words separated by dots (”.”, like domain names), and two special characters are available; star (“*”) and hash (“#”). The star matches any word, and the hash matches zero or more words. For example “*.stock.#” matches the routing keys “usd.stock” and “eur.stock.db” but not “stock.nasdaq”. The exchange types(define by AMQP)
  • 17.
  • 18.
  • 19.
    How to debug commandline rabbitmqctl [-n node] [-q] {command} [command options...]
  • 20.
    How to debug ManagementPlugin The rabbitmq-management plugin provides an HTTP-based API for management and monitoring of your RabbitMQ server, along with a browser-based UI and a command line tool, rabbitmqadmin. Web UI http://server-name:15672/ default account/passwd: guest/guest
  • 21.
  • 22.