Sobes.tech
Back to questions
Senior
4

Есть локальный лимит под конкретный фильтр и глобальный лимит HH на 16000 — как это архитектурировать?

Companies where asked
OZONOZON

Answer from AI

sobes.tech AI

Для архитектуры с локальным лимитом под конкретный фильтр и глобальным лимитом на 16000 запросов (например, на HH) важно обеспечить корректное и эффективное распределение квот.

Основные подходы:

  1. Централизованный лимитер — сервис или компонент, который хранит глобальное состояние лимитов и распределяет их между локальными фильтрами.

  2. Иерархия лимитов:

    • Глобальный лимит (16000) — общий для всех фильтров.
    • Локальные лимиты — подмножества глобального, назначаемые каждому фильтру.
  3. Реализация:

    • При запросе с конкретным фильтром сначала проверяется локальный лимит.
    • Если локальный лимит не исчерпан, проверяется глобальный лимит.
    • Если оба лимита позволяют, запрос выполняется, и счетчики уменьшаются.
  4. Технические детали:

    • Использовать атомарные операции или распределённые блокировки для корректного обновления счетчиков.
    • Хранить счетчики в быстром хранилище (например, Redis с поддержкой Lua-скриптов для атомарности).
    • Обновлять счетчики с учётом временных окон (например, per minute/hour).
  5. Мониторинг и алерты:

    • Следить за состоянием лимитов.
    • Автоматически перераспределять локальные лимиты при необходимости.

Таким образом, архитектура должна обеспечивать согласованность и эффективность контроля лимитов, минимизируя задержки и риски превышения квот.