Выбор MQ для HighLoad-проекта | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Backend-разработчик на PHP
-9%
Алгоритмы и структуры данных
-9%
Team Lead
-6%
Архитектура и шаблоны проектирования Разработчик IoT
-13%
C# Developer. Professional
-9%
HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Symfony Framework C++ Developer. Professional Java Developer. Basic JavaScript Developer. Professional Базы данных Android Developer. Professional Framework Laravel Cloud Solution Architecture Highload Architect Reverse-Engineering. Professional Vue.js разработчик Agile Project Manager Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool" PHP Developer. Basic
Инфраструктура
Administrator Linux.Basic
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Administrator Linux. Professional
-6%
Дизайн сетей ЦОД
-13%
Разработчик IoT
-13%
Экспресс-курс по управлению миграциями (DBVC)
-10%
Основы Windows Server MS SQL Server Developer Разработчик программных роботов (RPA) на базе UiPath и PIX Microservice Architecture Reverse-Engineering. Professional Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Экспресс-курс «IaC Ansible» Network engineer. Basic
Корпоративные курсы
Безопасность веб-приложений Пентест. Практика тестирования на проникновение Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
IT-Recruiter
-15%
Дизайн сетей ЦОД
-13%
Компьютерное зрение
-13%
Enterprise Architect
-6%
Экосистема Hadoop, Spark, Hive
-8%
Экспресс-курс по управлению миграциями (DBVC)
-10%
Основы Windows Server SRE практики и инструменты Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Agile Project Manager Супер-практикум по работе с протоколом BGP Infrastructure as a code in Ansible Супер-практикум по использованию и настройке GIT Промышленный ML на больших данных Супер-интенсив Azure Системный аналитик. Advanced
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Выбор MQ для HighLoad-проекта

Чтобы управлять потоком запросов в микросервисной архитектуре, применяют очереди сообщений MQ (message queues). Но какую MQ лучше выбрать, если речь идет о высоконагруженном проекте?

RabbitMQ

RabbitMQ — один из лидеров по популярности и испытанное временем решение класса Enterprise.

Плюсы: — гарантия доставки (это, по сути, главное, чего можно ожидать от MQ); — гибкая система маршрутизации; — поддержка всевозможных стандартов.

Screenshot_1-1801-a668a9.png

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

Очередь на основе распределенного лога

Можно обратить внимание на платформу Apache Kafka, которая появилась внутри LinkedIn в качестве системы агрегации логов. Kafka способна выжимать из дисковой системы более высокую производительность, чем RabbitMQ, т. к. данные пишутся последовательно (sequential I/O), а не случайно (random I/O). Но, к сожалению, отсутствуют гарантии, что запись на диск всегда будет осуществляться последовательно.

Screenshot_1-1801-7cad1f.png

Кроме того: — данные в Kafka делятся по разделам (partition), поэтому для соблюдения порядка доставки каждый получатель читает данные только из одного раздела. Иногда это может быть причиной блокировки очереди, особенно если получатель обрабатывает сообщения медленнее обычного; — для управления кластером Kafka нужен отдельный сервис (zookeeper), что уже усложняет обслуживание, да и нагружает devops.

Таким образом, существуют риски потери производительности, что недопустимо в production.

Высокопроизводительные очереди

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

Screenshot_1-1801-fc21b4.png

NATS

NATS — относительно молодой проект, разработанный Derek Collison. Эта компания имеет больше 20 лет опыта работы над распределенными очередями сообщений.

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

Screenshot_1-1801-df9c4a.png

Из плюсов: — простота администрирования кластера NATS; — сообщения в NATS группируются по темам, то есть каждый узел знает, какие именно узлы имеют живых подписчиков и на какие темы; — сообщения доставляются напрямую от отправителя получателю, отсутствуют промежуточные шаги, задержка минимальна; — обеспечивается высокая производительность, которая порой опережает очереди с «гарантированной доставкой»; — NATS написан на языке программирования Go, однако имеет клиентские библиотеки для других популярных языков.

По материалам https://habr.com/ru/post/326880/.

А что посоветуете вы? Пишите в комментариях!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться