Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Михаил Гурбанов – Are you NATS? @ PythoNN

Михаил Гурбанов – Are you NATS? @ PythoNN

Avatar for Sobolev Nikita

Sobolev Nikita

April 09, 2025
Tweet

More Decks by Sobolev Nikita

Other Decks in Technology

Transcript

  1. Обо мне 2 • Тимлид в райфе • Выступаю и

    пишу статейки • Пишу на python, typescript, rust • Иногда захожу на гитхаб
  2. NATS • Быстрый брокер сообщений • Миллионы сообщений в секунду

    • Легко конфигурировать • Очень легковесный 5
  3. История • Создан в 2011-м году • Написан на go

    • Развивается как часть CNCF 6
  4. Request-Reply • На основе Pub/Sub • Паблишеры сами объединяются в

    группы • Одинаковые ответы отбрасываются автоматически 28
  5. Jetstream • Persistent • Много subject в jetstream • Иерархия

    сохраняется • ACK на сообщения 32
  6. LimitsPolicy • Кол-во сообщений • Размер jetstream • Возраст сообщений

    • Кол-во сообщений в subjetct При достижении лимита 34
  7. WorkQueuePolicy • Один получатель для каждого subject • Если отправлен

    ACK - сообщение удаляется Одноразовые сообщения 35
  8. DiscardPolicy • При определении >= 1 лимита из LimitsPolicy •

    DiscardOld или DiscardNew Если не влезает 37
  9. Dead Letter Queue • Просто задать ретраи • NATS сам

    откинет • Можно как-то обработать 40
  10. Pull consumer • Клиент забирает батчами • Хорошо масштабируется •

    Реализованный backpressure • Все к ним привыкли 43
  11. Push consumer • Jetstream отправляет сам • Мгновенно при появлении

    • Можно убить консьюмеры • Если очень надо быстро обработать 44
  12. Durable consumer • Pull или Push • Сохраняет стейт вычитки

    • Надо указать durable_name • Несколько консьюмеров могут иметь одинаковый durable_name 45
  13. Ephemeral consumer • Pull или Push • НЕ сохраняет стейт

    вычитки • Не получится восстановить после отказа • Без лишней конфигурации 46
  14. Дополнительные настройки • AckPolicy - как делаем ACK • DeliverPolicy

    - с какого сообщения доставляем • FilterSubjects - как фильтруем • … 47
  15. KV Storage • Кладем в бакеты • Все persistent •

    get, put, delete, keys, purge • watch, watch_all 51
  16. KV Storage • Кладем в бакеты • Все persistent •

    get, put, delete, keys, purge • watch, watch_all • Типа вместо redis и больше 52
  17. Развертывание • Можно через HELM • Или в докере •

    Можно один инстанс • А можно как кластер 54
  18. Подключение • Можно по логопассам • Или по токенам •

    Либо же по сертам • Еще можно через NKEYS • А можно и просто так 55
  19. Nats.py • Писали гошники • Код не лучшего качества •

    Поддержаны все фичи • Использовать не хочется, но приходится Гошники, что поделаешь 57
  20. Faststream • Код - топ • Хорошо написано • Поддержаны

    все фичи • Лучше использовать это Намного лучше 74
  21. Faststream - хочется • Более точный healthcheck • Единый интерфейс*

    • Поддержите релизные фичи И так все супер, но 88
  22. Сравнение: Архитектура • NATS - Pub/Sub, RPC, KV, Jetstream, Cluster

    setup • Kafka - Persistent Pub/Sub, Cluster setup, Аля KV через Logs Storage • RabbitMQ 92
  23. Сравнение: Архитектура • NATS - Pub/Sub, RPC, KV, Jetstream, Cluster

    setup • Kafka - Persistent Pub/Sub, Cluster setup, Аля KV через Logs Storage • RabbitMQ - Pub/Sub, Persistent Pub/Sub, Cluster setup (тяжело) 93
  24. Сравнение: Тип доставки • NATS - at-least-once, at-most-once, exactly-once* •

    Kafka - at-least-once, at-most-once, exactly-once • RabbitMQ 95
  25. Сравнение: Тип доставки • NATS - at-least-once, at-most-once, exactly-once* •

    Kafka - at-least-once, at-most-once, exactly-once • RabbitMQ - at-least-once 96
  26. Сравнение: Развертывание • NATS - легко разворачивать в кластере и

    без • Kafka - сложная настройка, как для кластера, так и без него • RabbitMQ 101
  27. Сравнение: Развертывание • NATS - легко разворачивать в кластере и

    без • Kafka - сложная настройка, как для кластера, так и без него • RabbitMQ - легко разворачивать, но требуется настройка 102
  28. Сравнение: Сценарии использования • NATS - IoT, микросервисы, real-time приложения

    • Kafka - потоковая обработка данных, ETL, логирование, шины данных • RabbitMQ 104
  29. Сравнение: Сценарии использования • NATS - IoT, микросервисы, real-time приложения

    • Kafka - потоковая обработка данных, ETL, логирование, шины данных • RabbitMQ - Микросервисы, асинхронные задачи 105
  30. Вывод 🔍 Параметр ⚡ NATS 🏛 Kafka 🐇 RabbitMQ 🌐

    Архитектура Pub/Sub, RPC, KV, Jetstream, Cluster setup Persistent Pub/Sub, Logs Storage, Cluster setup Persistent Pub/Sub, Exchange 📦 Гарантии доставки At-least-once, At-most-once, Exactly-once* At-least-once, At-most-once, Exactly-once At-least-once 🚀 Производительность Очень высокая Высокая Средняя 🏗 Сложность развертывания Низкая Высокая Низкая* 🌍 Сценарии использования IoT, микросервисы, real-time приложения Потоковая обработка данных, ETL, логирование Микросервисы, фоновые задачи 106