Перейдите на Go
через реальные проекты

Практикуйтесь с мгновенной обратной связью: автопроверка на каждом этапе и экспертное ревью от инженеров в финале проекта

Начать бесплатный проект

Бесплатный вводный проект · Без регистрации

API Gateway

Пройдено 13 из 26

Помощь

Rate Limiting — алгоритм

Представьте: ваш 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 — атомарный инкремент

Требования

2 из 3 ✓
Структура RateLimiter — содержит нужные поля
Метод Allow() — использует INCR + EXPIRE
EXPIRE при первом запросе — не найден вызов при count == 1

Вызов EXPIRE нужен при count == 1, чтобы ключ не остался в Redis навсегда. Без него окно rate limiting не сбрасывается.

Что-то непонятно в этом этапе?Задать вопрос →

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

Каждое требование проверяется отдельно

Запушили код в GitHub — видите результат по каждому требованию этапа. Что пройдено, что нет, и почему. Не нужно гадать, правильно ли вы сделали.

Rate Limiting — алгоритм

2 из 3 ✓
Структура RateLimiter — содержит нужные поля
Метод Allow() — INCR + EXPIRE
EXPIRE при первом запросе — не найден

Вызов EXPIRE нужен при count == 1, чтобы ключ не остался в Redis навсегда. Без него окно rate limiting не сбрасывается.

Полезные материалы

Rate Limiting Algorithms — обзор алгоритмов

Redis INCR — атомарный инкремент

Всё нужное — в рабочем пространстве

Незнакомые термины объясняются по клику прямо в задаче
Вопрос по теме — задайте не выходя из задания
Статьи из базы знаний привязаны к этапу

Ревью как в команде

После прохождения проекта можно отправить код на ревью. Инженер смотрит архитектуру, именование и стиль — как на настоящем ревью в команде.

📝 Ревью ментораНа доработку

Логика INCR + EXPIRE корректна, структуры чистые. Но посмотри на return:

return &Result{
Allowed: count <= int64(limit),
Remaining: max(0, limit-int(count)),
}, nil

ResetAt не заполняется в Result — клиент не узнает, когда лимит сбросится. Без этого не получится показать «попробуйте через 45 сек» — клиент будет ретраить вслепую.

Вводный проект · Без регистрации

Начать бесплатно

Чему вы научитесь

От основ до продакшн-разработки за 4 курса

1
GoТипы данныхСтруктурыФайлыШифрованиеTUI
Проекты
  • Валидатор карт
  • Файловый органайзер
  • Менеджер паролей
  • Архиватор
  • КиберСнейк
Перейти к курсу
2
3
4

Go-разработчик

18 проектов в портфолио · Готовность к коммерческой разработке

Стоимость обучения

Подписка на один курс · Цена зависит от курса · Отменяйте в любой момент

Самостоятельно

от 2 500 ₽/мес
  • Все материалы и задания курса
  • Проверка кода по каждому требованию
  • Помощник по вопросам
  • Гибкий график — учитесь когда удобно
Попробовать бесплатно
Рекомендуем

С ревью ментора

от 4 500 ₽/мес
  • Персональное ревью кода от ментора
  • Рекомендации по архитектуре и стилю
  • Все материалы и задания курса
  • Проверка кода по каждому требованию
  • Помощник по вопросам
  • Гибкий график — учитесь когда удобно
Попробовать бесплатно

Первые 3 этапа каждого проекта — бесплатно

Частые вопросы

Остались вопросы? Напишите нам

Начните свой первый проект

Откройте вводный проект и попробуйте сами — бесплатно и без регистрации.

Открыть проект