Rate limiting — механизм ограничения количества запросов, разрешённых клиенту за интервал времени. Пример: "максимум 5 попыток входа в минуту с одного IP" или "1000 API-запросов в час на токен". Отвечает 429 Too Many Requests при превышении + заголовки `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `Retry-After`.
Алгоритмы: (1) Fixed window — счётчик в Redis `INCR key EX 60`. Простой, но всплеск на границе (99 запросов в 59:59 + 99 в 60:01 = 198 за 2 сек). (2) Sliding window — считаем последние 60 сек. Точнее, чуть дороже. (3) Token bucket — ведро на N токенов, запрос тратит 1, регенерация K/сек. Разрешает burst. (4) Leaky bucket — очередь фиксированной скорости. Сглаживает.
Ключи ограничения: (1) IP — базово, но NAT школы = 500 учеников за 1 IP. (2) User-ID — при авторизации точнее. (3) API-key/token — для B2B. (4) Комбо — IP + endpoint (`/login` строже, чем `/health`).
Инструменты: (1) nginx `limit_req_zone` — L7 уровень, дёшево. (2) Cloudflare Rate Limiting — L4-7 на edge, до реального сервера не доходит. (3) API Gateway (Kong, Tyk) — сложные правила по route/user. (4) Приложение — `express-rate-limit`, `django-ratelimit`, `slowapi` (FastAPI), Redis-backed.