moex-vibe/apps/docs/docs/adr/ADR-003-rate-limiting-strategy.md
Sergey Krylov aac5b2f873
All checks were successful
CI / lint (pull_request) Successful in 1m32s
CI / test (pull_request) Successful in 1m23s
CI / build (pull_request) Successful in 1m27s
CI / lint (push) Successful in 1m16s
CI / test (push) Successful in 1m23s
CI / build (push) Successful in 1m32s
docs: add Docusaurus documentation site as npm workspace
- Create apps/docs/ with Docusaurus 3.7.0
- Add documentation: architecture, backend, frontend, infrastructure, development, ADR
- Include 5 Mermaid diagrams (system architecture, request flow, modules, caching, deployment)
- Configure as npm workspace with dev:docs/build:docs scripts
- Copy existing ADR documents from docs/architecture/adr/
2026-06-13 21:37:10 +03:00

1.6 KiB

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)