28 lines
1.7 KiB
Markdown
28 lines
1.7 KiB
Markdown
# 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)
|