Группы приоритетов 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