Практика архитектуры малых и средних групп R&D: как эффективно использовать очередь сообщений RabbitMQ?

Архитектура

1. Пишите впереди

Любой, кто использовал распределенное промежуточное программное обеспечение, знает, что его использование несложно для программистов, и существует всего несколько часто используемых клиентских API, которые намного меньше, чем API, которые мы используем в повседневном программировании. Однако распределенное ПО промежуточного слоя мало используется в малых и средних командах, занимающихся исследованиями и разработками, почему?

Причина в том, что обязанности промежуточного программного обеспечения относительно едины.Хотя использование клиента простое, настроить всю среду непросто. Поэтому в нескольких статьях по промежуточному ПО в этой серии мы сосредоточимся на решении пороговой проблемы, настройке серверной среды (которая может быть решена в облаке или эксплуатации и обслуживании позже), ознакомлении с основными обязанностями и функциями промежуточного ПО, а также ознакомлении с Демонстрация клиента После того, как она написана, дайте программисту поднять ногу, и вы сможете легко приступить к отладке кода.

Согласно нашему опыту за последние несколько лет, первый контакт также может быть самостоятельным и быстрым обучением.Статьи и демонстрации в основном практичны.Ниже приводится краткое введение и применение очереди сообщений RabbitMQ.

2. Зачем использовать очередь сообщений MQ

1. Бизнес-системы часто требуют особенно сильной реакции, которая может сыграть роль в сокращении пиков и заполнении падений.

2. Развязка: если одна система зависнет, это не повлияет на дальнейшую работу другой системы.

3. Бизнес-системы часто имеют высокие требования к надежности сообщений, а также требования к сложным функциям, таким как Ack.

4. Расширьте возможности асинхронной обработки бизнес-системы и уменьшите или даже почти полностью исключите параллелизм:

Использование очередей сообщений похоже на строительство плотины Гэчжоу для борьбы с наводнениями: оно позволяет накапливать большие объемы данных, а затем надежно выводить их в асинхронном режиме. Например:

Традиционный подход имеет следующие проблемы, как показано на рисунке выше:

  1. Как только время обработки бизнеса превысит интервал таймера, это приведет к пропущенным заказам.
  2. Если для получения данных используется новый поток, сервер будет подвержен простою из-за обработки большого количества вновь открытых потоков.
  3. База данных находится под высоким давлением и склонна к параллелизму.

Преимущества использования MQ смотрите на картинке выше:

  1. Бизнес можно зарегистрировать и настроить.
  2. Правила получения данных настраиваются.
  3. Только сообщения в MQ будут подтверждены при успешном использовании, что повышает надежность.
  4. Значительно расширяет возможности асинхронной обработки бизнес-заданий:

После регулярного получения данных из базы данных они сохраняются в очереди сообщений MQ, а затем задание будет периодически сканировать очередь сообщений MQ.Предположим, задание выполняет предварительную выборку 5 сообщений после сканирования, а затем обрабатывает эти 5 сообщений асинхронно, что означает что эти 5 сообщений могут обрабатываться одновременно.

3. Введение в RabbitMQ

RabbitMQ — это компонент сообщений с открытым исходным кодом, реализованный на основе AMQP, который в основном используется для хранения и пересылки сообщений в распределенных системах.Он написан на языке Erlang, который славится своей высокой производительностью, высокой доступностью и высокой расширяемостью.

Среди них AMQP (Advanced Message Queuing Protocol, Advanced Message Queuing Protocol) — спецификация протокола прикладного уровня, используемая для асинхронной доставки сообщений, разработанная для промежуточного программного обеспечения, ориентированного на сообщения.

Возможности RabbitMQ следующие:

Высокая надежность: RabbitMQ предоставляет множество функций, позволяющих найти компромисс между надежностью и производительностью, включая постоянство, отправку ответов, публикацию подтверждений и высокую доступность.

очередь высокой доступности: Поддерживает межмашинную кластеризацию и поддерживает резервное копирование зеркала безопасности очереди.Независимо от того, на какой стороне отправителя и получателя сообщений возникают проблемы, это не повлияет на нормальную отправку и получение сообщений.

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

Поддержка нескольких клиентов: Существуют клиентские реализации для основных языков разработки (таких как: Python, Ruby, .NET, Java, C, PHP, ActionScript и т. д.).

кластер: Несколько серверов в локальной сети могут быть объединены вместе для формирования логического брокера.

Расширяемость: Поддерживает балансировку нагрузки, просто и удобно динамически увеличивать или уменьшать количество серверов.

управление полномочиями: Гибкое управление правами ролей пользователей, виртуальный хост — это наименьшая степень детализации управления правами.

Система плагинов: Поддерживает различные расширенные подключаемые модули, а также настраиваемые подключаемые модули. Наиболее часто используемым подключаемым модулем является инструмент веб-управления RabbitMQ_Management, а его адрес доступа к веб-интерфейсу:

http://139.198.13.12:6233/,

Аккаунт для входа: Flight, пароль: yyabc123.

В-четвертых, принцип работы RabbitMQ

Поток сообщений от отправителя к получателю — это рабочий механизм сообщений RabbitMQ, как показано на следующем рисунке:

Рабочий механизм отправки и получения сообщений

5. Базовое использование RabbitMQ

Существует 6 основных вариантов использования: один-к-одному, один-ко-многим, режим публикации-подписки, отправка и получение в соответствии с правилами маршрутизации, топик, RPC (то есть вызов удаленного хранилища). Мы рассмотрим использование «один-к-одному», «один-ко-многим» и темы.

1,один на один: Одиночная отправка, однократное получение. См. изображение ниже.

2,один ко многим: один отправитель, несколько получателей, например распределенная диспетчеризация задач. Смотрите изображение ниже:

3.тема: Тип обмена — тема. При отправке сообщения необходимо указать коммутатор и ключ маршрутизации. Очередь сообщений потребителя привязана к коммутатору и соответствует ключу маршрутизации для подписки на сообщения. После подписки сообщения можно получать. Потребитель может получить сообщение только в том случае, если очередь привязана к обмену и указанный ключ маршрутизации соответствует правилам сопоставления.

Ключ маршрутизации может быть установлен в виде подстановочного знака, например: * или # (* означает соответствие слову в ключе маршрутизации, # означает, что может быть получено любое сообщение ключа маршрутизации). Если ключ маршрутизации состоит из нескольких слов, используйте . для разделения слов.

Соглашения об именах:

Предложение по именованию для имени обмена: Ex{AppID}.{custom ExchangeName}, предложение по именованию для имени очереди: MQ{AppID}.{custom QueueName} .

6. Загрузка демоверсии и дополнительная информация

Адрес загрузки RabbitMQDemo:GitHub.com/intent 2017/раба…

Официальный сайт RabbitMQ:www.rabbitmq.com

Список контента, задействованного в этой серии статей, выглядит следующим образом (опубликовано не в таком порядке).Если вам интересно, обратите внимание:

об авторе

Чжан Хуэйцин, ветеран ИТ с более чем 10-летним стажем, последовательно работал архитектором Ctrip, главным архитектором Guda Group, техническим директором Zhongqing Yiyou и т. д., а также руководил модернизацией и преобразованием технической структуры двух компаний. Теперь сосредоточьтесь на архитектуре и инженерной эффективности, сочетании и интеграции технологий и бизнеса, ценности технологий и инновациях.

Ян Ли, имеет многолетний опыт в исследованиях и разработках систем интернет-приложений, работал в Guda Group, а сейчас работает системным архитектором Zhongqing Yiyou, в основном отвечая за архитектурный дизайн бизнес-системы центра исследований и разработок компании и накопления и обучение новым технологиям. На данном этапе основное внимание уделяется программному обеспечению с открытым исходным кодом, архитектуре программного обеспечения, микросервисам и большим данным.

благодарныйЮтада ХикаруОбзор этой статьи.