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

19 проектов для портфолио с персональным ревью от опытных инженеров

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

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

API Gateway

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

Контакты ментора

Rate Limiting — алгоритм

Представьте: ваш API стал популярным. Один клиент решает скачать все книги за раз — 1000 запросов в секунду. Сервер захлёбывается, остальные пользователи видят ошибки. Или хуже — злоумышленник запускает DDoS-атаку.

Rate limiting — это защита: «не более N запросов за период времени». Как турникет в метро: пропускает по одному, не даёт толпе хлынуть разом.

Ключевая концепция: Fixed Window Counter

Существует несколько алгоритмов rate limiting (Token Bucket, Sliding Window, Leaky Bucket). Мы используем Fixed Window Counter — самый простой для понимания и реализации.

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

  1. Для каждого клиента создаётся счётчик в Redis
  2. Каждый запрос увеличивает счётчик на 1
  3. Счётчик имеет TTL (время жизни) — например, 1 минута
  4. Когда счётчик достигает лимита — запросы блокируются
  5. Когда TTL истекает — ключ удаляется, счётчик обнуляется

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

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

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

Критерии завершения

Создан файл internal/ratelimit/ratelimit.go
Структура RateLimiter содержит redis.Client и window
Метод Allow() использует INCR + EXPIRE
EXPIRE устанавливается только при первом запросе (count == 1)

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

Три шага от задачи до готового навыка

01

Не учебные задачки — реальные проекты

API Gateway, CLI-утилиты, микросервисы — 19 проектов для портфолио, а не для галочки

API Gateway
Go · Docker · Redis
02

Каждый шаг — понятный и конкретный

Материалы, задача и чёткие критерии завершения на каждом этапе. Не нужно гадать, что делать дальше

Rate Limiting — алгоритм

Критерии завершения

Создан файл internal/ratelimit/ratelimit.go
Структура RateLimiter содержит redis.Client и window
Метод Allow() использует INCR + EXPIRE
EXPIRE устанавливается только при первом запросе (count == 1)

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

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

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

03

Ревью как в настоящей команде

Опытный инженер проводит код-ревью, находит слабые места и показывает, как сделать лучше

📝 Обратная связьНа доработку

Логика 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-разработчик

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

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

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

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

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

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

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

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

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

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

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

Откройте вводный проект и оцените формат обучения.

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