Практикуйтесь с мгновенной обратной связью: автопроверка на каждом этапе и экспертное ревью от инженеров в финале проекта
Бесплатный вводный проект · Без регистрации
Пройдено 13 из 26
Представьте: ваш API стал популярным. Один клиент решает скачать все книги за раз — 1000 запросов в секунду. Сервер захлёбывается, остальные пользователи видят ошибки.
Rate limiting — это защита: «не более N запросов за период времени». Как турникет в метро: пропускает по одному, не даёт толпе хлынуть разом.
Ключевая концепция: Fixed Window Counter
Существует несколько алгоритмов rate limiting (Token Bucket, Sliding Window, Leaky Bucket). Мы используем Fixed Window Counter — самый простой для понимания и реализации.
Делите время на окна фиксированной длины (например, 1 минута). Для каждого окна считаете количество запросов через INCR в Redis. Если счётчик превышает лимит — возвращаете 429 Too Many Requests.
Rate Limiting Algorithms — обзор алгоритмов
Redis INCR — атомарный инкремент
RateLimiter — содержит нужные поляAllow() — использует INCR + EXPIREВызов EXPIRE нужен при count == 1, чтобы ключ не остался в Redis навсегда. Без него окно rate limiting не сбрасывается.
Запушили код в GitHub — видите результат по каждому требованию этапа. Что пройдено, что нет, и почему. Не нужно гадать, правильно ли вы сделали.
RateLimiter — содержит нужные поляAllow() — INCR + EXPIREВызов EXPIRE нужен при count == 1, чтобы ключ не остался в Redis навсегда. Без него окно rate limiting не сбрасывается.
Полезные материалы
Rate Limiting Algorithms — обзор алгоритмов
Redis INCR — атомарный инкремент
После прохождения проекта можно отправить код на ревью. Инженер смотрит архитектуру, именование и стиль — как на настоящем ревью в команде.
Логика INCR + EXPIRE корректна, структуры чистые. Но посмотри на return:
ResetAt не заполняется в Result — клиент не узнает, когда лимит сбросится. Без этого не получится показать «попробуйте через 45 сек» — клиент будет ретраить вслепую.
Вводный проект · Без регистрации
Начать бесплатноОт основ до продакшн-разработки за 4 курса
18 проектов в портфолио · Готовность к коммерческой разработке
Подписка на один курс · Цена зависит от курса · Отменяйте в любой момент
Первые 3 этапа каждого проекта — бесплатно
Остались вопросы? Напишите нам
Откройте вводный проект и попробуйте сами — бесплатно и без регистрации.