Back to questions
OZON
Senior
4
Есть локальный лимит под конкретный фильтр и глобальный лимит HH на 16000 — как это архитектурировать?
Companies where asked
Answer from AI
sobes.tech AI
Для архитектуры с локальным лимитом под конкретный фильтр и глобальным лимитом на 16000 запросов (например, на HH) важно обеспечить корректное и эффективное распределение квот.
Основные подходы:
-
Централизованный лимитер — сервис или компонент, который хранит глобальное состояние лимитов и распределяет их между локальными фильтрами.
-
Иерархия лимитов:
- Глобальный лимит (16000) — общий для всех фильтров.
- Локальные лимиты — подмножества глобального, назначаемые каждому фильтру.
-
Реализация:
- При запросе с конкретным фильтром сначала проверяется локальный лимит.
- Если локальный лимит не исчерпан, проверяется глобальный лимит.
- Если оба лимита позволяют, запрос выполняется, и счетчики уменьшаются.
-
Технические детали:
- Использовать атомарные операции или распределённые блокировки для корректного обновления счетчиков.
- Хранить счетчики в быстром хранилище (например, Redis с поддержкой Lua-скриптов для атомарности).
- Обновлять счетчики с учётом временных окон (например, per minute/hour).
-
Мониторинг и алерты:
- Следить за состоянием лимитов.
- Автоматически перераспределять локальные лимиты при необходимости.
Таким образом, архитектура должна обеспечивать согласованность и эффективность контроля лимитов, минимизируя задержки и риски превышения квот.