22 lines
1.6 KiB
Markdown
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)
|