(Microsoft.AspNetCore.RateLimiting)
Вбудований middleware для обмеження кількості запитів від клієнта за певний період часу.
Основні задачі:
- Захист від brute-force, DDoS, зловмисного навантаження
- Запобігання перевантаженню сервера
- Забезпечення справедливого розподілу ресурсів
- Критично важливий для публічних API
| Алгоритм | Короткий опис | Переваги | Недоліки / особливості | Найкраще підходить для |
|---|---|---|---|---|
| Fixed Window | Фіксоване вікно (наприклад, 60 с), чітка кількість запитів, потім обнулення | Найпростіший, дуже низьке споживання пам'яті | Різке, короткочасне збільшення (сплеск) кількості запитів за дуже короткий проміжок часу (т.зв. спайк) на межі вікон | Прості сценарії, коли спайки не критичні |
| Sliding Window | Ковзне вікно (розбивається на сегменти), плавно враховує попередні запити | Немає різких спайків, більш справедливе обмеження | Більше споживання пам'яті | Сценарії, де важлива рівномірність |
| Token Bucket | Відро з токенами: максимальна ємність + період поповнення | Дозволяє контрольовані сплески (burst) + стабільна швидкість | Потребує розуміння burst-логіки | Більшість реальних API (найпопулярніший) |
| Concurrency Limiter | Обмеження кількості одночасних запитів (не за часом, а за паралелізмом) | Захищає дорогі ресурси (БД, CPU, зовнішні сервіси) | Не контролює швидкість за хвилину/годину | Захист backend-ресурсів з високою вартістю |
- Найпростіше рішення → Fixed Window
- Плавне обмеження → Sliding Window
- Контрольовані сплески + стабільна швидкість → Token Bucket (найчастіше рекомендують)
- Захист від одночасного перевантаження → Concurrency Limiter
Усі алгоритми підтримують:
QueueLimit— черга для запитів, що перевищили ліміт- Відхилення надлишкових запитів (429 Too Many Requests)