TGViewer
C# Short Posts 🔞 C# Short Posts 🔞 @dimasshortposts · 306 subscribers
Post #398 509
🛡 Rate Limiting, часть 1: зачем тебе ограничивать запросы и какие алгоритмы вообще бывают

Помните серию постов про Геншин? Было давно конечно, но вдруг. Там я вскользь упомянул, что мы готовили систему к нагрузкам. Одна из штук, которую мы тогда настроили — rate limiting. По 3 запроса в минуту на пользователя, чтобы сплоченные школьники-анимешники не положили нам всё к чертям.

Сейчас снова вернулся к теме — планирую API для базы знаний с LLM под капотом, а там без лимитов один “энтузиаст” с циклом в консоли сожрёт весь бюджет. Полез разбираться и оказалось, что алгоритмов четыре штуки. Все они живут в Microsoft.AspNetCore.RateLimiting и подробно описаны в официальной документации.

🖥 Fixed Window — самый тупой и понятный. Окно в 1 минуту, в нём 10 запросов. Счётчик обнулился — снова 10 запросов. Проблема: на стыке двух окон можно пульнуть 20 запросов за секунду (10 в конце первого окна + 10 в начале второго). Для большинства задач это ок, но если у тебя что-то чувствительное — читай дальше.

🎚 Sliding Window — фиксит проблему стыков. Окно "скользит" вместе со временем. Вместо жёстких границ "с 12:00 до 12:01" оно считает запросы за последние 60 секунд от текущего момента. Плавнее, честнее, чуть дороже по ресурсам.

🪣 Token Bucket — у тебя ведро с токенами. Каждый запрос забирает токен. Токены подкапывают с постоянной скоростью. Ведро полное — можно сделать короткий всплеск запросов. Пустое — жди. Все вайбкодеры с этим алгоритмом точно знакомы, только с другой стороны баррикад))) Кайф в том, что это естественно разрешает burst-трафик, но держит среднюю скорость. Идеально для API, где пользователь может иногда хотеть пачку запросов подряд.

🐸 Concurrency Limiter — это вообще другая история. Не "сколько запросов в минуту", а "сколько запросов одновременно". Типа: максимум 5 параллельных запросов от одного юзера. Полезно когда у тебя тяжёлые операции — генерация отчётов, вызовы LLM — и ты не хочешь чтобы один клиент забил все потоки.

Для моего API базы знаний думаю брать Token Bucket — хочу разрешить человечку задать пачку вопросов подряд, но чтобы средняя скорость не превышала, скажем, 20 запросов в час. Ну и еще это просто звучит прикольнее всего 😄 Все остальное скучное какое-то

В следующей части — как это красиво прикрутить в ASP.NET Core через встроенный middleware, с разными лимитами для разных юзеров. Кстати, хорошее введение в тему написал Maarten Balliauw, один из авторов этого middleware (статья).

#csharp #ratelimiting
  • 🔥 5
  • 🐳 1
  • 😎 1
More from @dimasshortposts
  1. Sep 26, 2026🧵 Тредик для вопросов по докладу про MAF на дотнексте В докладе многие подробности опусти…
  2. Sep 23, 2026Даже самым хардкорным ребятам надо отдыхать, так что отдыхаем, мои чюваки 🕺 🧑‍💻dp🥁 #he…
  3. Sep 16, 2026🎯 Instrumented Tier0: профилирование кода В прошлый раз мы разобрали два уровня компиляци…
  4. Sep 15, 2026🔜 Готовлюсь к DOTNEXT 2026 В прошлом году за две недели до выступления я зачитывал свой д…
  5. Sep 9, 2026C# Short Posts 🔞 pinned «🐸 О чём этот канал? Кажется, я уже достаточно давно веду этот к…
  6. Sep 9, 2026🐸 О чём этот канал? Кажется, я уже достаточно давно веду этот канальчик, и пора бы описат…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →