Техническое задание: Оптимизация скорости обновления данных

Проблема

В текущей реализации приложения данные, поступающие с внешнего REST API, отображаются на фронтенде с критической задержкой от 7 до 14 секунд. Это неприемлемо для пользователей, которым необходима информация в реальном времени или с минимальной задержкой (например, обновляющиеся коэффициенты).

Цель

  • Сократить общую задержку «запрос-отображение» до стабильных 1-2 секунд.
  • Обеспечить стабильность работы системы без «проседаний» производительности при высокой нагрузке.

Текущий стек и архитектура

  • Бэкенд: Приложение на NestJS, развернутое в Docker-контейнерах.
  • База данных: PostgreSQL.
  • Источник данных: Внешнее REST API.
  • Проблемный паттерн: Каждый клиентский запрос приводит к прямому обращению к внешнему API, даже если данные не изменились.

Требуемые решения и задачи

1. Внедрение системы кеширования

  • Интегрировать сервис кеширования (Redis или Memcached) для хранения ответов от внешнего API.
  • Реализовать логику проверки заголовков Last-Modified или ETag от API-провайдера для избежания загрузки неизменившихся данных.
  • Настроить TTL (время жизни) записей в кеше в соответствии с частотой обновления данных (особенно для «live-данных»).

2. Фоновая синхронизация данных

  • Реализовать фоновый процесс (воркер, cron-задача, очередь), который будет периодически обновлять кеш, обращаясь к внешнему API.
  • Основной поток обработки пользовательских запросов должен отдавать данные из кеша, не дожидаясь ответа от внешнего сервиса.
  • Обеспечить механизм инвалидации кеша при получении обновленных данных.

3. Оптимизация инфраструктуры

  • Проанализировать и оптимизировать настройки Docker-контейнеров (сеть, выделение ресурсов CPU/RAM).
  • Проверить и при необходимости настроить параметры подключения к базе данных и кешу.

4. Критерии приемки

  • Задержка от момента запроса на фронтенде до отображения актуальных данных не превышает 2 секунд (целевой показатель - 1 секунда).
  • Система устойчиво работает под пиковой нагрузкой без увеличения задержек или ошибок.
  • Реализовано корректное кеширование и фоновое обновление данных.