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
Sobolev Nikita
April 09, 2025
Technology
310
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
210
Внутреннее устройство сборки мусора в CPython 3.14+ – Сергей Мирянов, PythoNN
sobolevn
0
130
Генератор байткода и байткод генератора, Михаил Ефимов, PythoNN
sobolevn
0
120
Дотянуться до кремния. HighLoad Python: SIMD, GPU – Пётр Андреев, PythoNN
sobolevn
0
120
Проектирование — это когда чувствуешь, а не какие-то там циферки, Николай Хитров, PythoNN
sobolevn
0
140
Continuous profiling, Давид Джалаев, PythoNN
sobolevn
0
160
Дмитрий Бровкин – Почему исправление опечаток сложнее, чем кажется, и как мы с этим српавляемся @ PythoNN
sobolevn
0
69
Алексей Гончарук – Современный веб с темлейтами @ PythoNN
sobolevn
0
150
Other Decks in Technology
See All in Technology
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
なぜ私たちのSREプラクティスはなかなか機能しないのか 〜システムより先に組織を見る〜 / Why our SRE practices aren't really working
vtryo
3
3.6k
ローカルLLMとLINE Botの組み合わせ その3 / LINE DC Generative AI Meetup #8
you
PRO
0
130
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
Road to SRE NEXTの今までとこれから
hiroyaonoe
0
310
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
1
170
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
3
220
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
210
美しいコードを書くためにF#を学んでみた話
yud0uhu
1
410
ループエンジニアリングでE2Eテストを実践
noriyukitakei
0
350
地域 SRE コミュニティ最前線 / SRE NEXT 2026 Discussion Night Track C
muziyoshiz
0
210
kintone の AI コワーカーを、 Anthropic にエージェントを"ホストさせて"作った話 #devkinmeetup
sugimomoto
0
100
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
840
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
ラッコキーワード サービス紹介資料
rakko
1
3.9M
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
Designing for Performance
lara
611
70k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
230
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
Claude Code のすすめ
schroneko
67
230k
Speed Design
sergeychernyshev
33
1.9k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
970
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
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