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

18 проектов от CLI-утилит до микросервисов. Автопроверка каждого требования. Персональное ревью кода от инженера.

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

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

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 не сбрасывается.

Что-то непонятно в этом этапе?

AI-помощник объяснит концепции за секунды

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

Проверяем каждое требование

Запушили код в GitHub — и сразу видите результат по каждому требованию этапа. С объяснением, если что-то не так.

Rate Limiting — алгоритм

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

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

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

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

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

Застряли — спросите

AI-помощник знает контекст вашего этапа и объясняет концепции за секунды. Задание за вас не решит — но разобраться поможет.

AI-помощник

Задайте вопрос по этапу «Rate Limiting — алгоритм». AI объяснит концепции, но решать задание за вас не будет.

Вы спросили:

«Зачем нужен EXPIRE при count == 1

EXPIRE задаёт время жизни ключа в Redis. Вызывать его нужно именно при первом запросе (когда INCR вернул 1) — тогда счётчик автоматически сбросится через заданный период.

Если не вызвать EXPIRE, ключ останется в Redis навсегда — окно rate limiting никогда не сбросится, и клиент будет получать 429 до скончания веков.

Например: чем bufio.Scanner отличается от os.ReadFile?

Спросить

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

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

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

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

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

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

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

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

Разработчики о платформе

Из интервью со студентами

«Благодаря вам у меня гитхаб сильнее 90% кандидатов на стажировку.»
О карьере
«Никто никогда не говорил как правильно, никто не направлял. Обратная связь — самое важное. Ревью не для галочки, фидбэк полный.»
О ревью
«Платформа мне правда помогает — то что всё происходит на практике, оно прям ровным кирпичиком рядом в голове укладывается. Раньше читал теорию и казалось, что понял, но по факту этого не было.»
О практике
«На работе похожая история — переезд на микросервисы. Курс отлично помогает, лучше начал понимать что такое монолит и чистая архитектура.»
О работе

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

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

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

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

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

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

Подписка на один курс · Цена зависит от курса

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

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

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

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

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

Для сравнения: OTUS — от 142 200 ₽ за курс · Яндекс Практикум — от 154 000 ₽ за курс

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

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

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

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

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