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
330
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
250
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
220
Внутреннее устройство сборки мусора в CPython 3.14+ – Сергей Мирянов, PythoNN
sobolevn
0
140
Генератор байткода и байткод генератора, Михаил Ефимов, PythoNN
sobolevn
0
130
Дотянуться до кремния. HighLoad Python: SIMD, GPU – Пётр Андреев, PythoNN
sobolevn
0
120
Проектирование — это когда чувствуешь, а не какие-то там циферки, Николай Хитров, PythoNN
sobolevn
0
140
Continuous profiling, Давид Джалаев, PythoNN
sobolevn
0
170
Дмитрий Бровкин – Почему исправление опечаток сложнее, чем кажется, и как мы с этим српавляемся @ PythoNN
sobolevn
0
69
Алексей Гончарук – Современный веб с темлейтами @ PythoNN
sobolevn
0
150
Other Decks in Technology
See All in Technology
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
ハーレムエンジニアリング
kazuma777777
0
180
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.6k
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.2k
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
6.2k
Goでデータパイプラインを作ろう
sansantech
PRO
1
500
Genie Codeハンズオン基礎編
taka_aki
1
130
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
Model Studio CLI × Token Plan
maigo999
0
190
Apache Icebergインフラストラクチャ:ストレージ・カタログ・エンジンの選択肢とClouderaプラットフォームでの実装
tsugiyama
0
110
関東Kaggler会発表資料
takoi
1
250
事業価値と Engineering 2026年度版
recruitengineers
PRO
50
25k
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
24k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Ethics towards AI in product and experience design
skipperchong
2
340
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
470
How to Think Like a Performance Engineer
csswizardry
28
2.7k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.2k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
370
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
420
How to build a perfect <img>
jonoalderson
1
5.9k
Bash Introduction
62gerente
615
220k
The Curious Case for Waylosing
cassininazir
1
460
KATA
mclloyd
PRO
35
15k
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