Попытаемся разобраться с тем, что есть брокер, почему на них все помешались, и если уж досталось работать с брокером, то какой выбрать и как.
Неисчерпывающий список выглядит примерно так:
- Apache Kafka
- RabbitMQ
- ActiveMQ
- Amazon SQS
- Google Cloud Pub/Sub
- Microsoft Azure Service Bus
- Redis (используемый как брокер сообщений)
- NATS
- ZeroMQ
- IBM MQ
- Pulsar (Apache Pulsar)
- RocketMQ
- Mosquitto (для MQTT)
- EMQX (для MQTT)
Довольно внушительный список, сравнивать каждый с каждым - это перебор, попытаемся как-то иначе подойти к этой задаче.
Чтобы разобраться, для чего используются брокеры, давайте разберемся, что это такое.
Первое, что приходит на ум, когда мы слышим "брокер" - это специалист, работающий в финансовой сфере, некий посредник, кто-то мутный в галстуке, с сорванными голосовыми связками, кто-то похожий на героя фильма "Волк с Уолл-Стрит".
Пожалуй, единственное, что можно взять из этого представления брокера в определение брокера в контексте IT сервисов и систем - это посредничество. Брокер на языке разработки по-прежнему посредник. Суть посредничества - это передача информации от сервиса к сервису в форме сообщений.
Уже этого понимания достаточно, чтобы определить, что брокеры оправданы в сложных архитектурных решениях, когда информация должна быть поставлена нескольким потребителям и/или от нескольких отправителей.
Итого, давайте пока зафиксируемсяна том, что брокер - это некое приложение-посредник, задача которого передавать информацию.
Участники процесса
Мы разбираем процесс передачи информации через сообщения.
Рассуждаем, что, вероятно:
- должна быть сторона, которая информацию сгенерировала или создала и нуждается в отправке; на языке брокера - это Издатель (Publisher);
- должна быть сторона, в адрес которой должно быть доставлена информация; на языке брокера - это Потребитель (Consumer);
- должен быть канал передачи информации и какие-то правила, которые позволяют информации безошибочно попасть от определенного отправителя определенному получателю. Exchange - некий обменник, в который попадают сообщения Издателя. Binding - набор правил, по которым сообщение попадает в определенную очередь. Queue - собственно, очередь сообщений (мы исходим из того, что мутить целый сервис ради отправки одного сообщения - это, объектино, перебор).
Как всё работает
1.Издатель на своей стороне генерирует сообщение и отправляет его в брокер, сообщение попадает в обменник.
2.За счет правил или "привязок" сообщение попадает в нужную очередь.
3.Когда Потребитель (Consumer) готов обработать сообщение, он получает копию события, полученного от Издателя (Publisher).

Важно, что Consumer может находиться в неактивном состоянии, или обрабатывать ранее пришедшее сообщение.
4.Consumer на своей стороне как-то обрабатывает сообщение, и дает обратную связь брокеру о результате. На языке брокера это ACK (от acknowledgment - подтверждение)
5.Брокер получает и интерпретирует ответ от Consumer, и удаляет доставленное сообщение из очереди.

На самом деле, разные брокеры поступают с успешно доставленными сообщениями по-разному: одни, как RabbitMQ, удаляют, другие хранят, и далее удаляют по расписанию или через вручную отправленную команду.
Характер отношения к доставленному сообщению - это один из важных аспектов, на которые следует обращать внимание при выборе брокера под решение задачи.
Как выбрать брокер
По факту, ориентируясь на возможности и ограничения, выбираем брокер под задачу.
Нередко бывает, что на проекте, в инфраструктуре уже определены, внедрены те или иные брокеры; означает, что при проектировании функции, предусматривающей интеграцию через брокер, необходимо руководствоваться предопределенным стеком.
Если же наша задача выбрать брокер с ноля, то необходимо самостоятельно определить требования к брокеру через интервьюирование бизнеса.
Вопросы, которые могут нам помочь:
1.Глобально в решение какой задачи должен быть встроен брокер и почему. Есть ли иное (без брокера) решение, возможно уже сегодня задача решается как-то иначе, какие профиты бизнес рассчитывает получить при переходе на брокер. У нас должна быть карта бизнес процесса как он есть.
Иначе говоря, как работает уже, и что не так.
2.Какое масштабирование мы должны предусмотреть: количество и качество издателей и потребителей
3.Какое количество сообщений в единицу времени должно обеспечить
4.Какие требования к хранению и переиспользованию данных сообщений
5.Какие протоколы должен поддерживать брокер.
6.Какие требования к надежности доставки.







Comments are closed