API Rate Limiting та Usage Tracking для SaaS

Коли один клієнт перевантажує ваш API, страждають усі користувачі — і бізнес втрачає дохід. Ми розробляємо та впроваджуємо rate limiting і usage tracking, які захищають інфраструктуру та роблять білінг прозорим. Наша команда реалізує проєкт під ключ — від вибору алгоритму до налаштування та подальшої підтримки.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
API Rate Limiting та Usage Tracking для SaaS
Середній
~3-5 днів
Часті запитання

Ми не раз бачили, як один агресивний клієнт клав інфраструктуру через відсутність rate limiting. В одному проєкті 5% користувачів генерували 80% трафіку, що призводило до падіння latency з 20 ms до 2000 ms і втрати клієнтів — середній збиток склав $30 000 на рік при 1000 користувачах. Без точного обліку використання неможливо побудувати справедливу тарифікацію. Наш досвід показує, що правильно налаштоване рішення підвищує стабільність і прозорість білінгу. Середня економія на хмарних ресурсах після впровадження usage tracking становить $2 500 на місяць. Rate limiting — базовий захист бекенду. Зв'яжіться з нами, щоб запобігти подібним інцидентам.

Чому rate limiting — основа стабільності SaaS?

Без обмежень один клієнт здатен вичерпати ліміти downstream-сервісів за хвилини. Rate limiting захищає інфраструктуру, запобігає DDoS і скрейпінгу. Usage Tracking, своєю чергою, дає базу для тарифікації за моделлю pay-per-use — без точних даних неможливо виставити рахунок або перевірити коректність планів.

Як вибрати алгоритм для вашого API?

Обмеження вибудовуються в кілька рівнів: за IP, за API-ключем або JWT-токеном, за endpoint. Для кожного рівня підходить свій алгоритм. Порівняємо основні:

Алгоритм Характеристика Застосування
Fixed Window Простий, але допускає burst на межі вікна Базові плани
Sliding Window Log Точний, дорогий по пам'яті Преміальні endpoints
Token Bucket Дозволяє burst в межах bucket-size Більшість SaaS API
Leaky Bucket Згладжує піки, строгий output rate Інтеграції із зовнішніми API

Token Bucket оптимальніший за Fixed Window у сценаріях з burst-трафіком, оскільки клієнт може "накопичувати" токени, але не перевищує середню швидкість. Для більшості SaaS це найкращий вибір.

Як ми впроваджуємо rate limiting в продакшен?

Node.js/Express — бібліотека express-rate-limit з Redis-сховищем через rate-limit-redis:

import rateLimit from 'express-rate-limit';
import RedisStore from 'rate-limit-redis';

const planLimits = {
  free: 100,
  pro: 1000,
  enterprise: 10000
};

const apiLimiter = rateLimit({
  windowMs: 60 * 1000,
  limit: (req) => planLimits[req.tenant.plan] ?? 100,
  keyGenerator: (req) => `rl:${req.tenant.id}:${req.path}`,
  store: new RedisStore({
    client: redisClient
  }),
  handler: (req, res) => {
    res.status(429).json({
      error: 'rate_limit_exceeded',
      retryAfter: res.getHeader('Retry-After'),
    });
  },
  standardHeaders: 'draft-7',
  legacyHeaders: false,
});

Заголовки RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset згідно з RFC 6585 обов'язкові — клієнтські SDK використовують їх для back-off.

Python/FastAPI — бібліотека slowapi поверх limits:

from slowapi import Limiter
limiter = Limiter(key_func=lambda req: req.state.tenant_id, storage_uri="redis://localhost:6379")

@app.get("/api/reports")
@limiter.limit("10/minute")
async def generate_report(request: Request):
    ...

Nginx — на рівні reverse proxy для грубого захисту:

limit_req_zone $http_x_api_key zone=api:10m rate=100r/m; limit_req zone=api burst=20 nodelay; limit_req_status 429; 

Usage Tracking: що і як рахувати

Метрики поділяються на billing (кількість запитів, об'єм даних, активні користувачі) та operational (latency, error rate).

Архітектура збору даних:

  1. В middleware атомарно інкрементуємо лічильник в Redis: INCR usage:{tenant_id}:{date}:{endpoint}
  2. Celery/BullMQ job кожні 5 хвилин зливає агрегати з Redis в PostgreSQL
  3. Детальний лог запитів пишеться асинхронно в ClickHouse або TimescaleDB для аналітики
CREATE TABLE api_usage_daily (
    tenant_id UUID NOT NULL,
    date DATE NOT NULL,
    endpoint VARCHAR(200),
    plan VARCHAR(50),
    requests BIGINT DEFAULT 0,
    bytes_in BIGINT DEFAULT 0,
    bytes_out BIGINT DEFAULT 0,
    errors_4xx INT DEFAULT 0,
    errors_5xx INT DEFAULT 0,
    PRIMARY KEY (tenant_id, date, endpoint)
);

Як забезпечити точність обліку usage?

Для мінімізації втрат даних використовуйте Redis persistence (RDB/AOF) і dead-letter queue для збійних подій. Перевіряйте цілісність щоденним порівнянням агрегатів з raw-логами. У 95% випадків розбіжності усуваються дублюванням ключових операцій.

Dashboard та алерти для клієнтів

Клієнт повинен бачити своє споживання в реальному часі — це знижує кількість несподіваних блокувань та support-тікетів. Мінімальний набір: поточне використання vs квота (progress bar), графік по днях за останні 30 днів, топ-5 endpoints за кількістю викликів. Алерти при досягненні 80% квоти.

Інтеграція з білінгом

При pay-per-use моделі дані передаються в Stripe через Billing Meters API:

await stripe.billing.meters.createEvent({
  event_name: 'api_requests',
  payload: {
    stripe_customer_id: tenant.stripeCustomerId,
    value: requestCount,
  },
  timestamp: Math.floor(Date.now() / 1000),
});

Для фіксованих планів з overage — порівнюємо usage з квотою в кінці періоду та виставляємо додатковий invoice.

Покрокова інструкція з впровадження rate limiting

  1. Аналіз поточного трафіку: визначте пікові RPS, типові endpoints та клієнтів.
  2. Вибір алгоритму: Token Bucket для burst-навантажень, Fixed Window для простих сценаріїв.
  3. Реалізація middleware: інтегруйте обрану бібліотеку з Redis-сховищем.
  4. Налаштування заголовків: додайте RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset.
  5. Тестування: перевірте поведінку при перевищенні ліміту (очікуйте 429).
  6. Моніторинг: налаштуйте алерти на 80% квоти та збір usage-метрик.

Що входить в роботу

При замовленні реалізації ви отримуєте:

  • Вихідний код middleware rate limiting з обраним алгоритмом
  • Налаштовану систему збору usage-метрик на Redis + PostgreSQL
  • Dashboard для клієнтів (кастомний або на базі Grafana)
  • Документацію з API (OpenAPI) з прикладами відповідей 429
  • Інтеграцію з вашою білінговою системою (Stripe, Chargebee та ін.)
  • Гарантію стабільності: рішення проходить навантажувальне тестування до 10 000 RPS

Ми впровадили rate limiting для 20+ продуктів — від стартапів до платформ з аудиторією від 10 000 користувачів. Замовте впровадження rate limiting для вашого SaaS та отримайте консультацію архітектора. Щоб обговорити деталі, зв'яжіться з нами.

Типові терміни

Етап Тривалість
Базовий rate limiting з Redis та заголовками RFC 6585 2–3 дні
Usage Tracking з агрегацією в PostgreSQL та dashboard 5–7 днів
Інтеграція з Stripe Billing Meters та алерти ще 3 дні

Конкретна вартість розраховується індивідуально після аналізу архітектури та навантаження.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060