Перейти к содержимому

Группы приоритетов pull-консьюмеров в NATS JetStream: Overflow, Pinned и Prioritized

Synadia

0:00 / 0:00

Группы приоритетов pull-консьюмеров в NATS JetStream: Overflow, Pinned и Prioritized

398 просмотров · 2 месяца назад
Synadia
7,05 тыс. подписчиков
398 просмотров · 2 месяца назад
Несколько клиентов получают сообщения от одного и того же потребителя JetStream? По умолчанию NATS просто распределяет сообщения по кругу — не имея представления о том, какой клиент должен получить работу. Группы приоритетов потребителей решают эту проблему: несколько клиентов получают сообщения от одного потребителя в рамках политики, и сервер решает, кто будет обслуживаться следующим. В этом видео рассматриваются все три политики — переполнение, закрепленный клиент и приоритетная — как они работают в сети, какие подводные камни могут возникнуть, а также приводятся демонстрации работы каждой из них в режиме реального времени с помощью CLI и кода. Что вы узнаете: Переполнение: пусть локальные обработчики сначала обрабатывают очередь задач, а удаленные обработчики, находящиеся под нагрузкой, передаются только при необходимости. Закрепленный клиент: маршрутизация всей работы к одному активному обработчику с автоматическим переключением при сбое — служба блокировки не требуется. Приоритизация: многоуровневые пулы обработчиков, обслуживаемые с приоритетом от 0 до 9, с передачей без задержки (NATS 2.12). Детали передачи данных, обеспечивающие работу: min_pending, заголовок Nats-Pin-Id, несоответствие 423 и API отмены закрепления. Подвохи: закрепление — это аффинность и переключение при сбое (а не распределенная блокировка), почему обработчики должны быть идемпотентными, и как поддерживать время ожидания закрепления выше времени истечения срока действия запроса. -- Временные метки -- 0:00 Проблема: кто получит следующее сообщение? 0:48 Круговое распределение и шаблоны, которые оно не может выразить 1:38 Что такое группа приоритетов — три политики 2:03 Политика переполнения 2:51 Политика закрепленного клиента и приоритетной группы 4:21 Когда использовать каждую: региональная маршрутизация и один активный рабочий процесс 6:05 Подводные камни: только pull, явное подтверждение, идемпотентность, не блокировка 7:00 Тайм-ауты и несоответствие pin-id 423 7:45 ​​Демонстрация CLI: закрепленный клиент (pin id, неверный id, unpin) 11:27 Демонстрация CLI: переполнение (min_pending, переполнение под нагрузкой) 15:09 Демонстрация CLI: приоритетная группа (приоритет 0–9) 17:35 Визуальный демонстрационный проект (Go + Datastar) 17:58 Визуализация переполнения: min_pending 19:35 Визуализация переполнения: min_ack_pending 20:55 Визуализация закрепленного клиента: unpin и TTL отказоустойчивость 22:18 Визуализация приоритетов: многоуровневые приоритеты 23:37 Все политики на одной панели мониторинга 24:47 Заключение -- Ресурсы -- Документация NATS: https://docs.nats.io NATS GitHub: https://github.com/nats-io Synadia: https://www.synadia.com Datastar: https://data-star.dev/ #NATS #JetStream #Messaging #DistributedSystems #CloudNative #golang #datastar