Архив метки: message queue

«Hello world» в Apache Kafka

Однохостовый Kafka кластер

Ну что, самое время отправить каких-нибудь данных через Apache Kafka. Но сначала, разумеется, его нужно установить.

Установка Кафки настолько простая, что в этот раз я отойду от своего обычного правила и в самом деле объясню, как его устанавливать. Итак, четыре шага:

  • Установить Java Development Kit (почему-то часто уже оказывается установленным)
  • Скачать архив с Кафкой
  • Распаковать ( tar -xzf kafka_2.11-0.10.1.0.tgz в *nix системах)
  • Всё. Кафка готов.

Читать далее «Hello world» в Apache Kafka

Краткое введение в Apache Kafka

Что такое Apache Kafka

Официальное определение для Apache Kafka — распределённая стриминговая платформа. Это одно из тех прекрасных определений, которые не имеют никакого смысла до тех пор, пока не посидишь хорошенько с документацией. На самом деле идея Кафки очень простая. В большой распределенной системе обычно много сервисов, которые генерируют разные события: логи, данные мониторинга, замеченные попытки доступа к секретным ресурсам, и т. п. С другой стороны, есть сервисы, которым эти данные очень нужны. И тут появляется Kafka: он сидит между продюсерами и консьюмерами данных (producer & consumer): собирает данные у первых, хранит у себя в распределенном хранилище по топикам и раздаёт вторым по подписке. Другими словами, Kafka — это гибрид распределенной базы данных и очереди сообщений.

Apache Kafka

Читать далее Краткое введение в Apache Kafka

Создаём RabbitMQ кластер

RabbitMQ кластер

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

RabbitMQ кластер это сразу несколько сервисов, у которых общие пользователи, настройки и даже очереди. Сервисы могут добавляться и удаляться на лету, располагаться на разных краях континента, но для подключённого клиента они будут выглядеть как один большой RabbitMQ сервис. Это хорошо для горизонтального мастшабирования —  когда клиентов становится так много, что одиночному брокеру уже не справиться.

Кластеризация — это не то же самое, что репликация и high availability. В первом и втором случае уход одного из узлов в оффлайн никак не повлияет на доступность данных и работу сервиса в принципе. В кластере же узлы не взаимозаменяемы. Да, пользователи и настройки действительно будут дублироваться на каждом их них, где бы тех не создавали. Но очереди сообщений — нет. Так что если какой-то хост ушёл в оффлайн, то его очереди пойдут следом.

Читать далее Создаём RabbitMQ кластер

Краткое введение в RabbitMQ

Краткое введение в RabbitMQ

RabbitMQ — это полноценная и щедро удобренная фичами очередь сообщений. В отличие от ZeroMQ, который встраивается в приложения, RabbitMQ — сервис-посредник. Он разграничивает права доступа, поддерживает шифрование, сохранение сообщений на диск (чтобы пережить плановое отключение электричества), работу в кластерах и даже дублирование сервисов для повышенной живучести. К тому же он написан на Erlang, за что автоматически становится неубиваемым и поддерживаемым на большинстве популярных ОС.

В этом посте мы посмотрим, насколько тяжело отправлять и получать сообщения с RabbitMQ, да и вообще, на что он похож вблизи. В качестве платформы будет Убунта (запертая внутри Docker контейнера), но сгодился бы и Mac, и Windows. Читать далее Краткое введение в RabbitMQ

Как использовать ZeroMQ с Docker

Как использовать ZeroMQ с Docker

В прошлый раз мы написали аж три примера клиент-сервер Node.js приложений, в которых компоненты общаются между собой через ZeroMQ. Примеры простые, показывают основную идею, но работают всё-таки на localhost, и поэтому слабо пересекаются с реальностью, в которой ZeroMQ обычно работает. И тогда я подумал, а почему бы не раскидать клиента и сервера по Docker-контейнерам? В задачу добавятся новые вопросы, она станет больше похожа на правду, и главное, это отличный шанс откатать сразу несколько инструментов, которые обычно используются вместе.

Итак, задача на сегодня: взять fire-and-forget паттерн из прошлого поста и доработать его до контейнерного приложения. Читать далее Как использовать ZeroMQ с Docker

Очередь сообщений и асинхронное взаимодействие

В прошлых постах я несколько раз использовал фразу «взаимодействие контейнеров», но особо не вдаваясь в то, как на самом деле оно происходит, и, возможно, подавая ложную надежду, что речь идёт о телепатии.

Так как контейнеры изолированы друг от друга, то выбор транспорта для сообщений сильно ограничен, и, скорее всего, это будет сеть и TCP/UDP протоколы. Но при этом есть уйма вариантов, как этой сетью пользоваться, и об этом мы сейчас и поговорим. Читать далее Очередь сообщений и асинхронное взаимодействие