Различия систем обмена сообщениями и обмена потоковыми данными, или Чем отличаются Yandex Message Queue и Yandex Data Streams

24 декабря 2021 г.
9

Недавно в Yandex.Cloud появился новый сервис — Yandex Data Streams. У пользователей Yandex.Cloud регулярно возникают вопросы, чем отличается этот новый сервис от существующего Yandex Message Queue. Мы решили ответить сразу всем и кратко описать сценарии использования обоих сервисов, как они устроены и чем различаются.

Основным различием между Yandex Data Streams и Yandex Message Queue является их назначение. Yandex Data Streams предназначен для передачи значительных потоков данных для их обработки приложениями, в то время как Yandex Message Queue ориентирован на передачу сообщений между компонентами распределенных приложений.

Шина обмена сообщениями, или Yandex Message Queue

Шины обмена сообщениями ориентированы на доставку отдельных, независимых сообщений компонентам приложений, реализуя сценарий очереди обработки задач. Ранее в блоге мы подробно рассказывали о принципе работы сервиса Message Queue. Если коротко, задачи записываются в очередь, а приложения-обработчики получают задачи из этой очереди и их исполняют. Если обработчиков недостаточно, можно добавить новые — они подключатся к очереди, начнут получать сообщения и ускорят обработку сообщений в очереди в целом.

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

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

На схеме ниже показано, что внутри Yandex Message Queue сообщения в основном упорядочены по времени записи, но это не гарантируется. Из очереди данные получают несколько обработчиков, сообщения могут обрабатываться не в порядке записи.

Message Queue scheme

Шины потоков данных, или Yandex Data Streams

Основное назначение Yandex Data Streams — это передача не отдельных сообщений, а потоков данных (килобайты-мегабайты-гигабайты-терабайты и так далее в час) в приложения для обработки.

Данные в Yandex Data Streams передаются через потоки, которые состоят из сегментов. Все входящие сообщения обладают ключами, которые определяют, в какой именно сегмент данные попадут. В пределах одного сегмента данные располагаются и считываются в порядке записи. Из одного сегмента данные может получать только один обработчик приложения. Масштабирование всей системы происходит за счет увеличения пропускной способности (числа сегментов) и увеличения числа обработчиков. В Yandex Message Queue распределением нагрузки управляет сервер, а в Yandex Data Streams распределением нагрузки между собой занимаются сами приложения. Удобнее всего для масштабирования использовать готовые библиотеки вида Kinesis Consumer Library.

Основным отличием Yandex Data Streams от Yandex Message Queue является возможность в Yandex Data Streams одновременно из одной очереди считывать данные сразу нескольким независимым приложениям, при этом каждое приложение может читать данные с произвольной позиции. После считывания из потока данные не удаляются, удаление производится только по истечении времени хранения, что позволяет повторно перечитывать данные при необходимости.

Возможность одновременно считывать данные разными приложениями удобна в следующих случаях:

  • Когда одни и те же данные нужно обработать сразу несколькими приложениями.

  • Для защиты от ошибок. Если в обработчике была ошибка, то можно исправить ошибку и пересчитать хранимые в очереди данные заново, уже правильным способом.

  • При запуске нового приложения. При разработке новой версии приложения его можно запустить параллельно с основным и проверить в работе над реальными данными.

Через шины данных можно передавать любые данные, но чаще всего передают журналы работы приложений, журналы поведения пользователей или напрямик передают собираемые от пользователей данные, для чего Yandex Data Streams поддерживает HTTP API.

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

Data Streams scheme

Сравнение Yandex Message Queue и Yandex Data Streams

Yandex Message Queue Yandex Data Streams
Основной сценарий Очередь сообщений между компонентами приложения Пересылка данных между приложениями, поставка данных в системы хранения Облака
Получение данных Компоненты одного приложения Независимые приложения
Гарантии At least once, exactly once для FIFO очередей At least once
Пропускная способность 300 сообщений/c для обычной очереди, 30 сообщений/c для FIFO очередей Не ограничена, определяется числом сегментов
Тарификация За запросы на запись и чтение сообщений За сегменты, их скорость и объем хранимых данных
Совместимость с API Amazon SQS Amazon Kinesis Data Streams API
Интеграции Cloud Functions, API Gateway Cloud Functions, API Gateway, Data Transfer
Отказоустойчивость Данные хранятся в трех зонах доступности Данные хранятся в трех зонах доступности
Масштабируемость на чтение Серверная Клиентская (KCL). Поддерживаются версии KCL 1.x.

Заключение

Сервисы Yandex Message Queue и Yandex Data Streams предназначены для решения разных задач: Yandex Message Queue — для реализации очереди задач между компонентами, а Yandex Data Streams — для передачи потоков данных между различными приложениями.


Будем рады пообщаться и ответить на ваши вопросы — наша команда на связи в телеграм-чате Yandex Serverless Ecosystem.

Алексей Дмитриев
В Яндексе с 2017 года. Занимается потоковыми системами анализа данных. До Яндекса разрабатывал программное обеспечение и программно-аппаратные комплексы в сфере видеоанализа.
Различия систем обмена сообщениями и обмена потоковыми данными, или Чем отличаются Yandex Message Queue и Yandex Data Streams
24 декабря 2021 г.
9