moex-vibe/apps/docs/docs/adr/ADR-007-two-level-caching.md
Sergey Krylov 106467e5c4
All checks were successful
CI / lint (pull_request) Successful in 2m8s
CI / test (pull_request) Successful in 1m57s
CI / build (pull_request) Successful in 2m5s
CI / lint (push) Successful in 2m1s
CI / test (push) Successful in 1m51s
CI / build (push) Successful in 2m9s
docs: translate docs to russian
2026-06-16 05:13:34 +03:00

1.8 KiB

ADR-007: Двухуровневое кеширование (backend + frontend)

Статус: Accepted
Дата: 2026-06-13
Участники решения: Architect

Контекст

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

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

Решение

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

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

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

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

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

Последствия

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