Merge "Add documentation for hybrid messaging configuration"
This commit is contained in:
commit
b7d220857c
@ -35,3 +35,4 @@ For in-depth technical information, see the
|
|||||||
security/index.rst
|
security/index.rst
|
||||||
source-overrides/index.rst
|
source-overrides/index.rst
|
||||||
prod/gnocchi_redis.rst
|
prod/gnocchi_redis.rst
|
||||||
|
messaging/messaging.rst
|
||||||
|
107
doc/source/user/messaging/messaging.rst
Normal file
107
doc/source/user/messaging/messaging.rst
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
========================
|
||||||
|
Hybrid messaging example
|
||||||
|
========================
|
||||||
|
|
||||||
|
This section provides an overview of hybrid messaging deployment
|
||||||
|
concepts and describes the necessary steps for a working
|
||||||
|
OpenStack-Ansible (OSA) deployment where RPC and Notify communications
|
||||||
|
are separated and integrated with different messaging server backends
|
||||||
|
(e.g. rabbitmq and qdrouterd).
|
||||||
|
|
||||||
|
oslo.messaging library
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
The oslo.messaging library is part of the OpenStack Oslo project that
|
||||||
|
provides intra-service messaging capabilities. The library supports
|
||||||
|
two communication patterns (RPC and Notify) and provides an abstraction
|
||||||
|
that hides the details of the messaging bus operation from the OpenStack
|
||||||
|
services.
|
||||||
|
|
||||||
|
Notifications
|
||||||
|
+++++++++++++
|
||||||
|
|
||||||
|
Notify communications are an asynchronous exchange from notifier to
|
||||||
|
listener. The messages transferred typically correspond to
|
||||||
|
information updates or event occurrences that are published by an
|
||||||
|
OpenStack service. The listener need not be present when the
|
||||||
|
notification is sent as notify communications are temporally
|
||||||
|
decoupled. This decoupling between notifier and listener requires that
|
||||||
|
the messaging backend deployed for notifications provide message
|
||||||
|
persistence such as a broker queue or log store. It is noteworthy that
|
||||||
|
the message transfer is unidirectional from notifier to listener and
|
||||||
|
there is no message flow back to the notifier.
|
||||||
|
|
||||||
|
RPC
|
||||||
|
+++
|
||||||
|
|
||||||
|
The RPC is intended as a synchronous exchange between a client and
|
||||||
|
server that is temporally bracketed. The information transferred
|
||||||
|
typically corresponds to a request-response pattern for service
|
||||||
|
command invocation. If the server is not present at the time the
|
||||||
|
command is invoked, the call should fail. The temporal coupling
|
||||||
|
requires that the messaging backend deployed support the
|
||||||
|
bi-directional transfer of the request from caller to server and the
|
||||||
|
associated reply sent from the server back to the caller. This
|
||||||
|
requirement can be satisfied by a broker queue or a direct messaging
|
||||||
|
backend server.
|
||||||
|
|
||||||
|
Messaging transport
|
||||||
|
+++++++++++++++++++
|
||||||
|
|
||||||
|
The oslo.messaging library supports a messaging
|
||||||
|
`transport plugin`_ capability such that RPC and Notify communications
|
||||||
|
can be separated and different messaging backend servers can be deployed.
|
||||||
|
|
||||||
|
.. _transport plugin: https://docs.openstack.org/oslo.messaging/latest/reference/transport.html
|
||||||
|
|
||||||
|
The oslo.messaging drivers provide the transport integration for the
|
||||||
|
selected protocol and backend server. The following table summarizes
|
||||||
|
the supported oslo.messaging drivers and the communication services they
|
||||||
|
support.
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
+----------------+-----------+-----------+-----+--------+-----------+
|
||||||
|
| Oslo.Messaging | Transport | Backend | RPC | Notify | Messaging |
|
||||||
|
| Driver | Protocol | Server | | | Type |
|
||||||
|
+================+===========+===========+=====+========+===========+
|
||||||
|
| rabbit | AMQP V0.9 | rabbitmq | yes | yes | queue |
|
||||||
|
+----------------+-----------+-----------+-----+--------+-----------+
|
||||||
|
| amqp | AMQP V1.0 | qdrouterd | yes | | direct |
|
||||||
|
+----------------+-----------+-----------+-----+--------+-----------+
|
||||||
|
| kafka | kafka | kafka | | yes | queue |
|
||||||
|
| (experimental) | binary | | | | (stream) |
|
||||||
|
+----------------+-----------+-----------+-----+--------+-----------+
|
||||||
|
|
||||||
|
|
||||||
|
Standard deployment of rabbitmq server
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
A single rabbitmq server backend (e.g. server or cluster) is the
|
||||||
|
default deployment for OSA. This broker messaging backend
|
||||||
|
provides the queue services for both RPC and Notification
|
||||||
|
communications through its integration with the oslo.messaging rabbit
|
||||||
|
driver. The `oslo-messaging.yml`_ file provides the default
|
||||||
|
configuration to associate the oslo.messaging RPC and Notify services
|
||||||
|
to the rabbitmq server backend.
|
||||||
|
|
||||||
|
.. literalinclude:: ../../../../inventory/group_vars/all/oslo-messaging.yml
|
||||||
|
:language: yaml
|
||||||
|
:start-after: ## Main
|
||||||
|
|
||||||
|
.. _oslo-messaging.yml: https://github.com/openstack/openstack-ansible/blob/master/inventory/group_vars/all/oslo-messaging.yml
|
||||||
|
|
||||||
|
Hybrid messaging deployment with qdrouterd server
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
|
In OSA, the deployment of disparate messaging backends is completely
|
||||||
|
transparent to the OpenStack services. By managing the inventories for
|
||||||
|
the messaging servers, a hybrid messaging configuration will be created.
|
||||||
|
The instantiation of the qdrouterd server role in the
|
||||||
|
qdrouterd_host_group will automatically setup the oslomsg_rpc*
|
||||||
|
variables to use this messaging backend. No additional configuration
|
||||||
|
is required. The result is that RPC services will communicate via the
|
||||||
|
amqp (V1.0 protocol) driver and the Notify services will communicate
|
||||||
|
via the rabbit driver. The separation and use of different messaging
|
||||||
|
backends can provide increased scale and resiliency.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user