Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Михаил Гурбанов – Are you NATS? @ PythoNN
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Sobolev Nikita
April 09, 2025
Technology
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Михаил Гурбанов – Are you NATS? @ PythoNN
Sobolev Nikita
April 09, 2025
More Decks by Sobolev Nikita
See All by Sobolev Nikita
Чего вы не знали о строках в Python – Василий Рябов, PythoNN
sobolevn
0
240
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
200
Внутреннее устройство сборки мусора в CPython 3.14+ – Сергей Мирянов, PythoNN
sobolevn
0
120
Генератор байткода и байткод генератора, Михаил Ефимов, PythoNN
sobolevn
0
110
Дотянуться до кремния. HighLoad Python: SIMD, GPU – Пётр Андреев, PythoNN
sobolevn
0
110
Проектирование — это когда чувствуешь, а не какие-то там циферки, Николай Хитров, PythoNN
sobolevn
0
130
Continuous profiling, Давид Джалаев, PythoNN
sobolevn
0
150
Дмитрий Бровкин – Почему исправление опечаток сложнее, чем кажется, и как мы с этим српавляемся @ PythoNN
sobolevn
0
68
Алексей Гончарук – Современный веб с темлейтами @ PythoNN
sobolevn
0
150
Other Decks in Technology
See All in Technology
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
2.5k
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
360
生成 AI × MCP で切り拓く次世代 SRE!自律型運用への挑戦と開発者体験の進化
_awache
0
190
Snowflakeと仲良くなる第一歩
coco_se
4
410
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
140
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
4
1.3k
AGENTS.mdとSkillsで始めるAIエージェント活用
sonoda_mj
2
190
AWSシリコン最前線 〜AI時代のチップ選択を読み解く〜
htokoyo
2
420
10倍の生産性を実現するAI駆動並列エージェントのすべて
kumaiu
5
1.3k
新しいVibe Codingと”自走”について
watany
5
290
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
MIERUNE JCT 発表資料「宇宙から伊能忠敬ごっこ」
syuchimu
0
200
Featured
See All Featured
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
170
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
230
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
450
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
エンジニアに許された特別な時間の終わり
watany
107
250k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
580
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
380
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
390
The Spectacular Lies of Maps
axbom
PRO
1
800
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
The Limits of Empathy - UXLibs8
cassininazir
1
350
Transcript
Are you NATS? Гурбанов Михаил Техлид в Virtual Assistants 1
Обо мне 2 • Тимлид в райфе • Выступаю и
пишу статейки • Пишу на python, typescript, rust • Иногда захожу на гитхаб
Натс или натс? 3
А может натс? 4
NATS • Быстрый брокер сообщений • Миллионы сообщений в секунду
• Легко конфигурировать • Очень легковесный 5
История • Создан в 2011-м году • Написан на go
• Развивается как часть CNCF 6
Основные концепции • Subject-based Messaging • Publish/Subscribe (Pub/Sub) • Request/Reply
(RPC) • Jetstream (Persistent) 7
Subjects 8
Иерархия time.us time.us.east time.us.east.atlanta time.us.west time.us.west.seattle 9
Wildcard: * 10
Wildcard: * 11
Wildcard: * 12
Wildcard: * 13
Wildcard: * 14
Wildcard: > 15
Wildcard: > 16
Wildcard: > 17
Wildcard: > 18
Wildcard: > 19
Pub/Sub 20
Pub/Sub • Без персистентности • Много subsriber’ов • Множественная подписка
21
Pub/Sub • Без персистентности • Много subsriber’ов • Множественная подписка
• База 22
Request-Reply 23
Request-Reply 24
Request-Reply 25
Request-Reply 26
Request-Reply 27
Request-Reply • На основе Pub/Sub • Паблишеры сами объединяются в
группы • Одинаковые ответы отбрасываются автоматически 28
Request-Reply • Легковесное • Отлично подходит для межсервисной коммуникации •
Легкий способ достичь EDA 29
Jetstream Если хотите большего 30
Jetstream 31
Jetstream • Persistent • Много subject в jetstream • Иерархия
сохраняется • ACK на сообщения 32
Retention • LimitsPolicy • WorkQueuePolicy • InterestPolicy Когда удалять старые
сообщения? 33
LimitsPolicy • Кол-во сообщений • Размер jetstream • Возраст сообщений
• Кол-во сообщений в subjetct При достижении лимита 34
WorkQueuePolicy • Один получатель для каждого subject • Если отправлен
ACK - сообщение удаляется Одноразовые сообщения 35
InterestPolicy • Получателей может быть несколько • Если все отправили
ACK сообщение удаляется Очень жестоко 36
DiscardPolicy • При определении >= 1 лимита из LimitsPolicy •
DiscardOld или DiscardNew Если не влезает 37
Mirror stream • Копировать сообщения только из одного Jetstream •
Писать в mirror нельзя 38
Source stream • Копировать сообщения только из многих Jetstream •
Можно писать в копию 39
Dead Letter Queue • Просто задать ретраи • NATS сам
откинет • Можно как-то обработать 40
Consumers Они хотят забрать сообщения 41
Consumers • At least once • Pull/Push • Durable/Ephemeral 42
Pull consumer • Клиент забирает батчами • Хорошо масштабируется •
Реализованный backpressure • Все к ним привыкли 43
Push consumer • Jetstream отправляет сам • Мгновенно при появлении
• Можно убить консьюмеры • Если очень надо быстро обработать 44
Durable consumer • Pull или Push • Сохраняет стейт вычитки
• Надо указать durable_name • Несколько консьюмеров могут иметь одинаковый durable_name 45
Ephemeral consumer • Pull или Push • НЕ сохраняет стейт
вычитки • Не получится восстановить после отказа • Без лишней конфигурации 46
Дополнительные настройки • AckPolicy - как делаем ACK • DeliverPolicy
- с какого сообщения доставляем • FilterSubjects - как фильтруем • … 47
Недавний релиз 2.11.0 • Per-message-TTLs • PriorityGroup, PriorityPolicy • PauseUntil
• max_buffered_size, max_buffered_msgs 48
KV Storage Кэш видишь? А он есть 49
KV Storage • Кладем в бакеты • Все persistent •
get, put, delete, keys, purge 50
KV Storage • Кладем в бакеты • Все persistent •
get, put, delete, keys, purge • watch, watch_all 51
KV Storage • Кладем в бакеты • Все persistent •
get, put, delete, keys, purge • watch, watch_all • Типа вместо redis и больше 52
Использование Дайте уже потрогать 53
Развертывание • Можно через HELM • Или в докере •
Можно один инстанс • А можно как кластер 54
Подключение • Можно по логопассам • Или по токенам •
Либо же по сертам • Еще можно через NKEYS • А можно и просто так 55
Использование в Python • nats.py - от разработчиков • faststream
- от Никиты Наконец-то 56
Nats.py • Писали гошники • Код не лучшего качества •
Поддержаны все фичи • Использовать не хочется, но приходится Гошники, что поделаешь 57
Nats.py - пример Pull подписка 58
Nats.py - пример Pull подписка 59
Nats.py - пример Pull подписка 60
Nats.py - пример Pull подписка 61
Nats.py - пример Pull подписка 62
Nats.py - пример Pull подписка 63
Nats.py - пример Pull подписка 64
Nats.py - пример Pull подписка 65
Nats.py - пример Использование KV storage 66
Nats.py - пример Использование KV storage 67
Nats.py - пример Использование KV storage 68
Nats.py - пример Использование KV storage 69
Nats.py - пример Использование KV storage 70
Nats.py - пример Использование KV storage 71
Nats.py - пример Использование KV storage 72
Nats.py - пример Использование KV storage 73
Faststream • Код - топ • Хорошо написано • Поддержаны
все фичи • Лучше использовать это Намного лучше 74
Faststream - пример Pull подписка 75
Faststream - пример Pull подписка 76
Faststream - пример Pull подписка 77
Faststream - пример Pull подписка 78
Faststream - пример Pull подписка 79
Faststream - пример Pull подписка 80
Faststream - пример Pull подписка 81
Faststream - пример Использование KV storage 82
Faststream - пример Использование KV storage 83
Faststream - пример Использование KV storage 84
Faststream - пример Использование KV storage 85
Faststream - пример Использование KV storage 86
Faststream - пример Использование watch из KV storage 87
Faststream - хочется • Более точный healthcheck • Единый интерфейс*
• Поддержите релизные фичи И так все супер, но 88
Сравнение Так надо использовать или нет? 89
Сравнение • NATS • Kafka • RabbitMQ 90
Сравнение: Архитектура • NATS - Pub/Sub, RPC, KV, Jetstream, Cluster
setup • Kafka • RabbitMQ 91
Сравнение: Архитектура • NATS - Pub/Sub, RPC, KV, Jetstream, Cluster
setup • Kafka - Persistent Pub/Sub, Cluster setup, Аля KV через Logs Storage • RabbitMQ 92
Сравнение: Архитектура • 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
Сравнение: Тип доставки • NATS - at-least-once, at-most-once, exactly-once* •
Kafka • RabbitMQ 94
Сравнение: Тип доставки • NATS - at-least-once, at-most-once, exactly-once* •
Kafka - at-least-once, at-most-once, exactly-once • RabbitMQ 95
Сравнение: Тип доставки • NATS - at-least-once, at-most-once, exactly-once* •
Kafka - at-least-once, at-most-once, exactly-once • RabbitMQ - at-least-once 96
Сравнение: Производительность • NATS - 6 млн/сек • Kafka •
RabbitMQ 97
Сравнение: Производительность • NATS - 6 млн/сек • Kafka -
2 млн/сек • RabbitMQ 98
Сравнение: Производительность • NATS - 6 млн/сек • Kafka -
2 млн/сек • RabbitMQ - 60 тыс/сек 99
Сравнение: Развертывание • NATS - легко разворачивать в кластере и
без • Kafka • RabbitMQ 100
Сравнение: Развертывание • NATS - легко разворачивать в кластере и
без • Kafka - сложная настройка, как для кластера, так и без него • RabbitMQ 101
Сравнение: Развертывание • NATS - легко разворачивать в кластере и
без • Kafka - сложная настройка, как для кластера, так и без него • RabbitMQ - легко разворачивать, но требуется настройка 102
Сравнение: Сценарии использования • NATS - IoT, микросервисы, real-time приложения
• Kafka • RabbitMQ 103
Сравнение: Сценарии использования • NATS - IoT, микросервисы, real-time приложения
• Kafka - потоковая обработка данных, ETL, логирование, шины данных • RabbitMQ 104
Сравнение: Сценарии использования • NATS - IoT, микросервисы, real-time приложения
• Kafka - потоковая обработка данных, ETL, логирование, шины данных • RabbitMQ - Микросервисы, асинхронные задачи 105
Вывод 🔍 Параметр ⚡ 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
t.me/mygurbanov Вопросы 107