Назад к каталогу
Rate Limiter Engine
Rate limiter с sliding window, token bucket и fixed window. Защищает API от DDoS и спама. Настраивается лимитами по IP, пользователю, роуту.
M
Maria Chen
4.5
2 оценок
13
скачиваний
233
просмотров
$ Add to .cursor/skills/ in your project or use Cursor Skills panel
Скачать .mdrate-limitthrottlesliding-windowtoken-bucketddos-protection
# Rate Limiter Engine
После того как нас заDDoSили ботами (200к запросов за 10 минут), написал нормальный rate limiter с тремя алгоритмами. Теперь каждый роут можно ограничить отдельно.
## Алгоритмы
- **Sliding Window** — плавное окно, нет burst-эффекта как у fixed window
- **Token Bucket** — можно накопить токены и сделать burst запросов
- **Fixed Window** — проще всего, сбрасывается каждую секунду/минуту
## Использование
```ts
import { RateLimiter } from './rate-limiter';
const limiter = new RateLimiter({
algorithm: 'sliding-window',
limits: [
{ window: 60000, max: 100, key: 'ip' }, // 100 req/min по IP
{ window: 60000, max: 30, key: 'route' }, // 30 req/min на роут
{ window: 3600000, max: 1000, key: 'user' }, // 1000 req/hour по юзеру
],
});
// middleware
app.use((req, res, next) => {
const result = limiter.check({
ip: req.ip,
route: req.path,
userId: req.user?.id,
});
if (!result.allowed) {
res.setHeader('Retry-After', result.retryAfterMs / 1000);
return res.status(429).json({ error: 'too many requests' });
}
next();
});
```
Обновлено 14 мая 2026 г.v1.1.1