Техническое задание: Оптимизация скорости обновления данных
Проблема
В текущей реализации приложения данные, поступающие с внешнего 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 секунда).
- Система устойчиво работает под пиковой нагрузкой без увеличения задержек или ошибок.
- Реализовано корректное кеширование и фоновое обновление данных.