Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Last active January 18, 2026 19:34
Show Gist options
  • Select an option

  • Save sunmeat/a757e33e231b8a9b6f5a0cb2b9b108af to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/a757e33e231b8a9b6f5a0cb2b9b108af to your computer and use it in GitHub Desktop.
Rate Limiting у ASP.NET Core

Rate Limiting у ASP.NET Core

(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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment