[ English | русский | Deutsch | 한국어 (대한민국) | English (United Kingdom) | Indonesia ]

Пример гибридного обмена сообщениями

В данном разделе предоставлен концепт развертывания с гибридным обменом сообщениями и описаны необходимые шаги для развертывания работающего OpenStack-Ansible (OSA), где сообщения RPC и Уведомлений разделены и используют различные сервера (напр. rabbitmq и qdrouterd).

Библиотека oslo.messaging

Библиотека oslo.messaging является частью проекта OpenStack Oslo, который предоставляет возможности обмена сообщениями между сервисами. Библиотека поддерживает два паттерна взаимодействия (RPC и Уведомления) и предоставляет абстракцию, которая прячет детали процесса обмена сообщениями от сервисов OpenStack.

Уведомления

Уведомления это асинхронный обмен сообщениями от уведомителя к получателю. Передаваемые сообщения обычно содержат информацию об обновлениях или возникновении событий, которые публикуются сервисом OpenStack. Получатель не должен присутствовать, когда сообщение отправляется так как сообщения уведомлений временно отделены. Такое отделение между уведомителем и получателем требует от сервиса обмена хранения сообщений, такого как очередь брокера или хранилище логов. Стоит упомянуть, что передача сообщения от уведомителя получателю однонаправленная и направление сообщений обратно к уведомителю отсутствует.

RPC

RPC предназначался для синхронного обмена между клиентом и сервером, который временно ограничен. Передаваемая информация обычно отвечает паттерну запроса-ответа для вызова команд сервиса. Если сервер отсутствует в момент выполнения команды, вызов должен завершиться ошибкой. Временная связь требует, что бы сервер обмена сообщениями имел поддержку двунаправленной передачи запроса от вызывающего к серверу и связного ответа от сервера обратно к вызывающему. Это требование может быть удовлетворено очередью брокера или прямым обменом сообщениями сервера.

Транспорт для обмена сообщениями

Библиотека oslo.messaging поддерживает возможность transport plugin так что RPC и Уведомления могут быть разъединены и для них могут быть развернуты различные серверы для обмена сообщениями.

Драйвера oslo.messaging предоставляют интеграцию транспорта для выбранного протокола и сервера. Следующая таблица резюмирует поддерживаемые драйвера oslo.messaging и сервисы взаимодействия, которые они поддерживают.

+----------------+-----------+-----------+-----+--------+-----------+
| 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) |
+----------------+-----------+-----------+-----+--------+-----------+

Стандартная установка rabbitmq сервера

Единый бекенд rabbitmq сервера (сервер или кластер серверов) это стандартная конфигурация развертывания OSA. Данный брокер обмена сообщениями предоставляет сервисы очередей как для RPC так и для обмена Уведомлениями при помощи интеграции с rabbit драйвером oslo.messaging. Файл oslo-messaging.yml предоставляет стандартную настройку для связи oslo.messaging сервисов RPC и Уведомлений с rabbitmq сервером.

# RPC
oslomsg_rpc_transport: "{{ (groups[qdrouterd_host_group] | length > 0) | ternary('amqp', 'rabbit') }}"
oslomsg_rpc_port: "{{ (groups[qdrouterd_host_group] | length > 0) | ternary(qdrouterd_port, rabbitmq_port) }}"
oslomsg_rpc_servers: "{{ (groups[qdrouterd_host_group] | length > 0) | ternary(qdrouterd_servers, rabbitmq_servers) }}"
oslomsg_rpc_use_ssl: "{{ (groups[qdrouterd_host_group] | length > 0) | ternary(qdrouterd_use_ssl, rabbitmq_use_ssl) }}"
oslomsg_rpc_host_group: "{{ (groups[qdrouterd_host_group] | length > 0) | ternary(qdrouterd_host_group, rabbitmq_host_group) }}"
oslomsg_rpc_policies: "{{ rabbitmq_policies }}"

# Notify
oslomsg_notify_transport: "{{ (groups[rabbitmq_host_group] | length > 0) | ternary('rabbit', 'none') }}"
oslomsg_notify_port: "{{ rabbitmq_port }}"
oslomsg_notify_servers: "{{ rabbitmq_servers }}"
oslomsg_notify_use_ssl: "{{ rabbitmq_use_ssl }}"
oslomsg_notify_host_group: "{{ rabbitmq_host_group }}"
oslomsg_notify_policies: "{{ rabbitmq_policies }}"

Гибридный обмен сообщениями с сервером qdrouterd

Установка в OSA различных серверов обмена сообщениями абсолютно прозрачна для сервисов OpenStack. При помощи управления инвентаризационной информацией для серверов обмена сообщениями, можно создать конфигурацию для гибридного обмена сообщениями. Конкретизация серверной роли qdrouterd в qdrouterd_host_group автоматически настроит переменные oslomsg_rpc* использовать данный сервер для обмена сообщениями. Никакой дополнительной настройки не требуется. В результате RPC сервисы будут общаться через amqp (V1.0 протокол) драйвер, а сервисы Уведомления будут общаться через драйвер rabbit. Разделение использования различных серверов обмена сообщениями может предоставить улучшенную масштабируемость и отказоустойчивость.