moex-vibe/docs/architecture/adr/ADR-003-rate-limiting-strategy.md

22 lines
1.6 KiB
Markdown

# ADR-003: Rate Limiting Strategy for MOEX Client
**Status:** Accepted
**Date:** 2026-06-13
**Deciders:** Architect, Tech Lead
## Context
MOEX ISS не документирует жёсткие лимиты на количество запросов, но массовые запросы могут привести к блокировке или ухудшению качества обслуживания. Backend является единственным клиентом MOEX и должен контролировать исходящий трафик.
## Decision
Внедрить два механизма в MoexClient:
1. **Request Queue (p-queue)**: конфигурируемый лимит запросов в секунду (default: 10 req/s). Запросы сверх лимита ставятся в очередь и выполняются по расписанию.
2. **Circuit Breaker (`@nestjs/axios` + interceptor)**: при 5+ последовательных ошибках (5xx, timeout, network error) клиент перестаёт отправлять запросы к MOEX на 30 секунд. После таймаута — пробный запрос для восстановления.
## Consequences
- Плавная нагрузка на MOEX, без пиков
- Автоматическое восстановление после сбоев MOEX
- Graceful degradation: при отключённом circuit breaker возвращаются кешированные данные
- Параметр конфигурации `MOEX_RATE_LIMIT` (int, req/s)