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
320
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
220
Внутреннее устройство сборки мусора в CPython 3.14+ – Сергей Мирянов, PythoNN
sobolevn
0
130
Генератор байткода и байткод генератора, Михаил Ефимов, PythoNN
sobolevn
0
130
Дотянуться до кремния. 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
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
Data Hubグループ 紹介資料
sansan33
PRO
0
3.1k
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
AIエージェントの知識表現と推論に なぜグラフが使われるのか - 記号的AIの復権とニューラルAIとの統合
yohei1126
1
280
ウォーターフォール開発案件のPMとしてAI活用を模索している話
hatahata021
3
310
Goでデータパイプラインを作ろう
sansantech
PRO
0
250
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
250
Webアクセシビリティ入門 2026
recruitengineers
PRO
1
280
最高のシステムプロンプトを作るためにフィードバック機能を導入した話
alchemy1115
1
330
名古屋の市バスGTFS-JPデータ×スガキヤ 最寄りバス停検索をAmazon ElastiCache Serverless for Valkeyで最適化する
usanchuu
1
270
PLaMoを毎日の開発で使い育てていく
pfn
PRO
0
180
Retriever と Reranker、結局どうする?
kazuaki
2
670
Featured
See All Featured
The Mindset for Success: Future Career Progression
greggifford
PRO
0
440
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
430
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.2k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
360
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
230
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
510
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