Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Михаил Гурбанов – Are you NATS? @ PythoNN
Search
Sobolev Nikita
April 09, 2025
Technology
340
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
adaptix_slides.pdf
sobolevn
0
4
Зачем программисту Twitch (что?) – Алексей Гладких, PythoNN
sobolevn
0
6
MQTT глазами BE для работы с embedded устройствами – Сергей Макаров, PythoNN
sobolevn
0
4
Я в СКРЫТОМ ПУЛЕ: выстраиваем процессы в команде без тильта – Максим Мельников, PythoNN
sobolevn
0
9
Я твой fastapi msgspec'ом ускорял – Александр Целуйко, PythoNN
sobolevn
0
5
Будущее локальных LLM – Алексей Голобурдин, PythoNN
sobolevn
0
33
Чего вы не знали о строках в Python – Василий Рябов, PythoNN
sobolevn
0
260
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
230
Внутреннее устройство сборки мусора в CPython 3.14+ – Сергей Мирянов, PythoNN
sobolevn
0
150
Other Decks in Technology
See All in Technology
Rust で関数型ドメインモデリング
takonda
0
170
導入から定着へ ~コーディングエージェントを日常業務に組み込む実践知~
yukisakai1225
0
130
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
220
LLM Content Moderationを支える評価・改善ループの実践
suikabar
1
230
dbt Semantic Layerで進めるenechainのデータ民主化
akizhou
1
160
ソフトウェア ファクトリー - 再現性のあるソフトウェアの工場づくり / Software factory
iktakahiro
7
5.2k
Webの常識が通じないHTMLメールのダークモード
teamlab
PRO
0
150
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
190
フィンテック養成勉強会#68
finengine
0
180
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
1k
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
210
オントロジーって 結局なにもの? AI エージェントに「意味」を渡す知識設計の話
greenmidori
0
250
Featured
See All Featured
Designing Experiences People Love
moore
143
24k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Exploring anti-patterns in Rails
aemeredith
4
540
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
870
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
How to build a perfect <img>
jonoalderson
1
6.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Abbi's Birthday
coloredviolet
4
10k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
320
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
560
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