moex-vibe/docs/architecture/adr/ADR-007-two-level-caching.md

1.7 KiB

ADR-007: Two-Level Caching (Backend + Frontend)

Status: Accepted
Date: 2026-06-13
Deciders: Architect

Context

Данные MOEX имеют задержку 15 минут. Кеширование на одном уровне (только бэкенд или только фронтенд) неоптимально:

  • Только бэкенд: каждый пользователь создаёт запрос к серверу
  • Только фронтенд: нет централизованного кеша, не защищает MOEX от повторных запросов

Decision

Внедрить два уровня кеширования:

  1. Backend (in-memory cache-manager): централизованное кеширование ответов от MOEX. Предотвращает повторные запросы к MOEX от разных пользователей.

  2. Frontend (TanStack Query staleTime): предотвращает повторные запросы к бэкенду при навигации или монтировании компонентов.

TTL согласованы (см. Caching Strategy).

Cache-Control заголовки в HTTP-ответах для промежуточных proxy/CDN (опционально).

Consequences

  • Избыточность intentional: resilience при отказе одного уровня
  • TanStack Query staleTime = backend TTL (нет лишних запросов)
  • При рестарте бэкенда фронт всё ещё имеет данные в memory cache
  • Небольшое увеличение memory на фронте (приемлемо для SPA)