Интересное что-то
517 subscribers
2.71K photos
253 videos
138 files
4.51K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
Forwarded from Daniilak — Канал
Сделал небольшое сравнение между Playwright и Selenium

Надеюсь, будет полезным
Forwarded from Neural Info
Отличная статья, которая на примере vLLM разбирает как работает LLM Inference Engine.

Не самая легкая для прочтения (где-то 1-2 часа вдумчивого чтения мне понадобилось), но дает хорошее понимание того, какие приемы используются для эффективного сервинга LLM at scale в multi-gpu, multi-node сетапе.

https://www.aleksagordic.com/blog/vllm
Forwarded from Андрей Созыкин (Andrey Sozykin)
Книги по нейронным сетям

В этом семестре веду курс по нейронкам в Уральском федеральном университете. Cобрал для студентов список рекомендованных книг (все доступны бесплатно, что важно для студентов):
- Alice’s Adventures in a differentiable wonderland, Simone Scardapane. Понятное объяснение математики нейронных сетей с наглядной визуализацией. Примеров кода не очень много. Рекомендую читать, если хотите разобраться во внутреннем устройстве нейронок.
- Deep Learning with Python, François Chollet, Matthew Watson. Третье издание книги автора Keras Франсуа Шолле вышло в этом году. На мой взгляд, самая понятная книга для тех, кто хочет начать применять нейронные сети для практических задач. Код на Keras и TensorFlow, есть репозиторий на GitHub.
- Dive into Deep Learning, Aston Zhang, Zack C. Lipton, Mu Li, Alex J. Smola. Интерактивный учебник по нейронным сетям с математикой и кодом. Более глубокая, чем две предыдущие книги, но и более сложная. Книга очень популярная, 27 тыс. звезд у репозитория на Github! Примеры кода есть на четырех фреймворках: PyTorch, TensorFlow, JAX и MXNET. Рекомендую читать после Alice’s Adventures in a differentiable wonderland и Deep Learning with Python. Но можно и сразу, если уверены в своих силах 🙂
- Хендбук по машинному обучению от Яндекс. Написали преподаватели и выпускники Школы анализа данных Яндекса. Хендбук о машинном обучении в целом, по нейронным сетям есть несколько разделов. Кроме текста в хендбуке есть полезные упражнения с автоматической проверкой, рекомендую их выполнять.

Какие книги по нейронным сетям нравятся вам?
Forwarded from Андрей Созыкин (Andrey Sozykin)
Продолжаем рассматривать протокол TLS, в этот раз целостность данных - обнаружение случайного или преднамеренного изменения данных.

Чтобы обеспечить целостность в TLS используется Message Authentication Code (MAC), русскоязычное название имитовставка. Не путать с MAC-адресом на канальном уровне.

Идея простая: считаем хэш от сообщения с помощью криптографической хэш-функции и добавляем его к сообщению. Получатель также считает хэш по таким же правилам и сравнивает его с хэшем в полученном сообщении. Если хэши совпадают, то сообщение не было изменено.

Однако такая простая схема не работает: злоумышленник может перехватить сообщение, изменить его, пересчитать хэш, записать обновленное значение хэша в сообщение, а затем передать получателю.

Поэтому в Message Authentication Code хэш считается не только от самого сообщения, но и от ключа, который есть только у отправителя и получателя. Такой код аутентификации злоумышленник не может подделать (только если не получит доступ к ключу, но в этом случае вся защита закончится).

В современной версии TLS 1.3 используется еще более сложный подход: шифры типа Authenticated Encryption with Associated Data (AEAD). В них сразу выполняется шифрование и MAC. Примеры таких шифров: AES-GCM, Chacha20-Poly1305.

Если плохо работает YouTube, то можно смотреть в Дзен или VK.

Поддержать создание курса можно на Boosty или CloudTips.
senior_python.pdf
191.7 KB
Сборник вопросов по python для подготовки к собесу на бэкендера, дата сайнтиста и аналитика, самые ключевые вопросы с развернутым ответом. Формат pdf позволяет готовиться к интервью в любой обстановке. Ставим огонек 🔥 и делимся с другом такой годнотой, если хотите больше подобных сборников!

@postypashki_old
Forwarded from Женя Янченко
Rate Limiter

Выходные прошли, рабочие дни вернулись, и я подготовила технический пост.

В посте про API Gateway упоминалось, что одной из его функций является rate limiting. Предлагаю сегодня разобраться с этим подробнее.

🫧 Что такое Rate Limiter

Rate Limiter — это механизм, который контролирует количество запросов, которые система может обработать за определённый промежуток времени. Его задача заключается в защите ресурсов от чрезмерной нагрузки при массовых обращениях к API.

В настройках рейт лимитера задают лимиты количества запросов в единицу времени. Например, у нас есть публичное API, на которое могут обращаться авторизованные пользователи, и мы настраиваем лимит 20 запросов/сек от одного пользователя. Определять пользователя можно по JWT токену, по IP, по API-ключу.


Пока заданный лимит не исчерпан, рейт лимитер передает запрос дальше на бэк.
Если лимит превышен, рейт лимитер не пропускает запрос и отдает ошибку 429 Too Many Requests.

Rate limiter предназначен для ограничения количества запросов от "хороших" клиентов, чтобы конкретный клиент не перегрузил сервис. При суровой DDoS-атаке только он не спасет, так как атака может идти с тысяч разных IP-адресов.

🫧 Место Rate Limiter в микросервисной архитектуре

Почти все современные API Gateway имеют встроенные механизмы rate limiting, но иногда рейт лимитер выносят в отдельный сервис, к которому уже обращается API Gateway.

Рейт лимитеру нужно хранить состояние, чтобы посчитать, сколько запросов уже было за период. Эти данные он может хранить у себя в памяти или в отдельном хранилище (например, Redis). Отдельное хранение нужно, когда используется несколько инстансов API Gateway. Redis помогает обеспечить атомарность операций, чтобы все инстансы гейтвеев видели общее состояние, и не возникало гонок и рассинхронизации.

🫧 Алгоритмы rate limiting

🤍 Fixed window (фиксированное окно)

Как работает:

Представим, что у нас есть лимит 10 запросов в минуту. Например: 09:00:00 → 09:00:59 — это одно окно.

Окно не обязано быть минутой, это может быть и 10 миллисекунд.

Считаем, сколько запросов пришло в этом окне.

Пока запросов меньше 10 → пропускаем их
Если уже больше 10 → отклоняем

Когда наступает новая минута — счётчик сбрасывается.

Проблема fixed window заключается во всплесках (burst) на границе окон: если пришло 10 запросов в 09:00:59, а потом еще 10 запросов в 09:01:01, то получается 20 запросов за 2 секунды, а должно быть не больше 10 в минуту.

🤍 Sliding window (скользящее окно)

Этот алгоритм решает проблему со всплесками на границе окон.

Как работает:

Если лимит 10 запросов в минуту, то храним временные метки всех запросов за последние 60 секунд.

На практике это оптимизируют, чтобы не хранить всё.

Для каждого запроса проверяем, сколько за последние 60 секунд уже пришло запросов от этого пользователя.

Если прошлых запросов меньше 10 → пропускаем
Если за последние 60 секунд уже было 10 запросов → отклоняем

Запросы старше 60 секунд убираем из списка.

Sliding window обеспечивает равномерное распределение, но у него выше требования к памяти (нужно хранить временные метки запросов) и выше вычислительная сложность (нужно перебирать и удалять устаревшие временные метки из списка).

Давайте посмотрим более гибкий алгоритм, который используется во многих API Gateway ⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Женя Янченко
🤍 Token Bucket (ведро с токенами)

Это популярный алгоритм для рейт лимитинга. Например, он используется в API Gateway Tyk.

Как работает:

Как следует из названия, у нас есть ведро с токенами 🪣

Приходит запрос. Чтобы пропустить запрос на бэк, используем один токен из ведра
Если токенов в ведре не осталось → запрос отклоняем

Максимальное количество токенов в ведре называется capacity.
Скорость, с которой токены добавляются в корзину, называется fillRate.

Ведро пополняется равномерно.

Например, если capacity = 60, то 60 токенов не будут подсыпаны разом в 09:00:00 (как счетчик в Fixed Window), а будут добавляться
постепенно со скоростью fillRate. Если fillRate = 5 токенов в секунду, и прошло только 2 секунды, то в ведре будет 10 токенов и только 10 запросов смогут пройти на бэк.

На практике добавление стараются делать максимально плавным, не раз в секунду, а использовать доли секунды

Если расходующих токены запросов не будет, то через 12 секунд (5 * 12 = 60) ведро наполнится до максимальной capacity в 60 токенов, и новые токены в него поступать не будут. Но и сбрасываться не будут. Все 60 токенов будут ждать свои запросы. И это может привести к кратковременному всплеску нагрузки, так как все 60 запросов смогут пройти одновременно 🔥


Token Bucket допускает всплески трафика, но не больше capacity.

По сравнению со Sliding window алгоритм Token bucket проще и требует меньше памяти.

Пропускание всплесков заданного размера считается плюсом, так как разрешает более естественный трафик.

Минус: может быть сложно выбрать capacity и fillRate.

🤍 Leaky Bucket (протекающее ведро)

Как работает:

В Leaky Bucket в ведре лежат не токены, а сами запросы.

Приходит запрос. Если ведро не переполнено → кладём запрос в ведро (в очередь)
Если переполнено → отклоняем запрос

Каждые N миллисекунд пропускаем фиксированное число запросов из ведра на бэк.
Если запросов нет, то ведро стоит пустое, ничего не копится.

То есть Leaky Bucket — это как очередь First In First Out фиксированного размера.

Кто в очередь не поместился, тому до свидания, приходите попозже.


Ключевая особенность Leaky Bucket в том, что он выравнивает нагрузку — запросы проходят на бэк с постоянной скоростью, даже если приходят неравномерно.

Недостаток Leaky Bucket является продолжением его достоинства: он не пропускает всплески, поэтому при резком увеличении трафика если очередь уже заполнена старыми запросами, это лишит систему возможности обрабатывать более свежие запросы.

На практике Rate Limiter обычно написан за нас, но мне кажется, эту тему полезно повторить перед System Design собесом.
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️Как улучшить RAG?

Наткнулся на статью про базы знаний. На русском!

В ней рассмотрены различные стратегии повышения качества ответов. Объяснено достаточно понятно.

Конечно, после прочтения вы не станете КМСом по RAG, но на любой технарской тусовке уже сможете прокатить за своего и втереться в доверие😄
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯 Мои инсайты из года внедрения AI в разработку (ч.1)

У меня главный фокус последнего года — это обучение команд разработки и внедрение AI в их процессы. Я поработал с разными компаниями — стартапами и корпорациями; и с разными ролями — СEO, СТО, продакт-менеджеры и разработчики. И мне есть, что рассказать.

Для начала разделим эту историю на два понятных стрима:

1. Для команд разработки я помогаю выстраивать системный процесс, rules-management, spec-driven development, итд. Главная задача — выстроить процесс так, чтобы AI стабильно доставлял код, а метрики росли по всей воронке доставки, без просадок по качеству или стабильности релизов. Это направление я называю AI-driven development.

2. Для нетехнических професионалов (продакты, маркетологи, СЕО компаний и многие другие) набор навыков и инструментов отличается. Это тот самый вайбкодинг — навык быстро проверять гипотезы, автоматиировать рутину, все те ситуации, где раньше для реализации идеи нужно было искать для себя технического партнера или обращаться к команде разработки, а теперь можно сделать все самому. С этим мы работаем в Vibecon.

И вот мой главный инсайт на текущий момент: вы либо вайбкодите свой продукт без команды разработки; либо у вас есть команда разработки, но она безоговорочно использует AI на всех этапах разработки и ускорена за счет этого.

Я так часто слышал аргументы против применения AI в разработке и в 99% это упирается в skill issue. Галлюцинирует модель? Научитесь прокидывать контекст и писать спеку перед тем, как нести агенту. Спефичиные подходы к разработке в команде? Распишите рулы для AI-агента и раскатите на всю компаню. Так можно долго продолжать.

Я тратил месяцы своей карьеры на фичи или продукты, которые сейчас создаю за 1-2 вечера. Впервые в жизни я чувствую, что могу реализовать любую свою идею, и мне для этого не нужен дизайнер или разработчик.

И это невероятное чувство 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯 Мои инсайты из года внедрения AI в разработку (ч.2)

Для меня это во многом личная история. Я начинал карьеру, как разработчик и до 2020 писал код фуллтайм и мне это нравилось, но тянуло в продуктовую сторону. Дальше был переход в продакт-менеджеры. Я продолжил любить код, но времени на него не осталось, а со времнем и сам навык постепенно теряться. Каждый заход «накодить» что-то после перерыва становился все более тяжелым.

Я все еще мог накидать архитектуру, соединить с продуктовым видением, отгрузить в виде спеки, но дальше его реализовать могли только разработчики. Так было до начала 2024, когда я плотно подсел на Cursor. Там еще не было агента, но уже можно было писать код в 2-3 раза быстрее промтами.

А дальше наступила agentic-code революция, апдейты моделей от claude с 3.5 до 4. Я все также могу накидать спеку и соединить с продуктовым видением, только код за меня пишет теперь агент вместо разработчика. Продумываешь, подгатавливаешь документ, декомпозируешь, отгружаешь агенту и забываешь. Время от идеи до реализации сократилось до часов. А я оказался наконец на своем месте: работаю с кодом каждый день, реализую идеи, не теряя при этом фокуса на продукте и продажах.

Забавный факт, таким образом получается работать паралельно над несколькими продуктами за счет того, что уровень абстракции поднимается ниже и не нужно думать о деталях реализации конкретного места в коде. В этом я вижу наибольший потенциал для трансформации IT-команд, но напишу про это отдельно.

Нет более заезженной фразы, чем «будущее уже здесь, просто оно неравномерно распределено», но именно разработка это то место, где это сильнее всего заметно.
Please open Telegram to view this post
VIEW IN TELEGRAM