Сравнение с Yandex Message Queue
В Yandex Cloud для обмена данными используются сервисы Yandex Data Streams и Yandex Message Queue.
Сервисы шин обмена данными и потоков передачи данных решают похожие задачи, но предназначены для разных сценариев использования:
- Yandex Message Queue ориентирован на передачу сообщений между компонентами распределенных приложений.
- Yandex Data Streams предназначен для передачи потоков данных (например, журналов работы приложений или действий пользователей, CDC-потоков изменений БД, данных с устройств) для их обработки приложениями.
Yandex Message Queue
Шины обмена сообщениями ориентированы на доставку отдельных, независимых сообщений компонентам приложений (обработчикам) и реализуют сценарий очереди обработки задач. Задачи записываются в очередь, а приложение-обработчик получает их из этой очереди и исполняет. Из одной очереди сообщения считывает только одно приложение. Обработчик может состоять из нескольких одновременно работающих экземпляров.
Шины обмена сообщениями подходят для обработки набора независимых задач, каждая из которых может быть выполнена любым обработчиком. Главное, чтобы событие было обработано, порядок обработки не важен.
Например, очереди сообщений используют поисковые роботы
Yandex Data Streams
Yandex Data Streams предназначен для того, чтобы передавать в приложения не отдельные сообщения, а потоки данных. Пропускная способность обрабатываемых потоков может быть от килобайтов до терабайтов в час и более.
Данные в Yandex Data Streams передаются через потоки, которые состоят из сегментов. У всех входящих записей есть ключи, которые определяют в какой сегмент попадут данные. В пределах одного сегмента данные считываются в порядке записи.
В Yandex Data Streams, в отличие от Yandex Message Queue, несколько разных приложений могут одновременно считывать данные из одного потока. При этом каждое приложение может читать данные с произвольной позиции.
Считывать данные одновременно разными приложениями может быть необходимо в следующих случаях:
- Когда одни и те же данные нужно обработать сразу несколькими приложениями.
- Для защиты от ошибок. Если в обработчике была ошибка, то можно исправить ошибку и пересчитать хранимые в очереди данные заново, уже правильным способом.
- При запуске нового приложения. При разработке новой версии приложения его можно запустить параллельно с основным и проверить в работе над реальными данными.
Через шины данных можно передавать любые данные, но чаще всего передают журналы работы приложений, журналы действий пользователей или данные с устройств. Для этого Yandex Data Streams поддерживает HTTP API.
Сравнение Yandex Message Queue и Yandex Data Streams
Параметр | Yandex Message Queue | Yandex Data Streams |
---|---|---|
Основной сценарий | Очередь задач между компонентами приложения | Пересылка данных между приложениями, поставка данных в системы хранения Yandex Cloud |
Кто получает данные | Компоненты одного приложения | Независимые приложения |
Гарантии | At least once |
At least once |
Порядок получения сообщений | Гарантируется для FIFO-очереди, не гарантируется для обычной очереди | Гарантируется |
Пропускная способность | До 300 сообщений в секунду для обычной очереди, до 30 сообщений в секунду для FIFO-очереди | Не ограничена, определяется числом сегментов |
Что тарифицируется | За запросы на запись и чтение сообщений | За сегменты, их скорость и объем хранимых данных |
Поддерживаемый протокол | Amazon SQS API | Amazon Kinesis Data Streams API |
С какими сервисами Yandex Cloud есть интеграция | Yandex Cloud Functions, Yandex API Gateway | Yandex Cloud Functions, Yandex API Gateway, Yandex Data Transfer |
Надежность | Данные хранятся во всех зонах доступности | Данные хранятся во всех зонах доступности |
Масштабируемость на чтение | Серверная | Клиентская (KCL |