vitya_brodov
@vitya_brodov
Java dev

Как снизить нагрузку на API?

Здравствуйте!
Есть API на Spring и клиент на React.
Клиент отправляет файл в апи и на стороне создаётся задача, далее клиенту передается идентификатор задачи по которому он будет время от времени спрашивает прогресс обработки.
Проблема: Из за слишком большого количества обращений апи подает слишком часто.
Вопрос: как можно снизить нагрузку?
  • Вопрос задан
  • 213 просмотров
Пригласить эксперта
Ответы на вопрос 5
BasiC2k
@BasiC2k
Решаю проблемы за деньги. Дорого.
Включите логгирование. Выясните - какие запросы чаще всего поступают, какие запросы дольше всего выполняются. Оптимизируйте.
Следующий этап - создание очереди запросов (возможно потребуется пересмотр имеющейся архитектуры) приложения.
Ответ написан
Комментировать
@12rbah
Проблема: Из за слишком большого количества обращений апи подает слишком часто.
Что это означает? Что он подаёт или это падает?
Вопрос: как можно снизить нагрузку?
В вашем случае видимо реже обращаться к апи.
А вообще не совсем понятно какая нагрузка на сервер, для большинства задач вполне хватит обновлять прогресс раз в 2-3 секунды, если нужно быстрое обновление, то в целом обновлять раз в 250 мс более чем достаточно, делать выше частоту обновления просто нет смысла
Ответ написан
Комментировать
@mayton2019
Bigdata Engineer
ТЗ надо переделать. Зачем клиент все время чего-то переспрашивает? Пускай сервер сам уведомляет о прогрессе. 0% 25% и т.д.
Ответ написан
Комментировать
azerphoenix
@azerphoenix Куратор тега Spring
Java Software Engineer
Клиент отправляет файл в апи и на стороне создаётся задача, далее клиенту передается идентификатор задачи по которому он будет время от времени спрашивает прогресс обработки.

Посмотрите в сторону:
- Spring Quartz
- Spring Batch
- Spring Webflux
- DeferredResult

Дальше профилирование, возможно вертикальное расширение.
Ответ написан
Комментировать
Maksclub
@Maksclub
maksfedorov.ru
Вы можете использовать TUS протокол для загрузки файла чанками

Сервер фиксирует текущее состояние загрузки файла и всегда известно ему сколько уже загрузилось

С каждым чанком возвращается инфа о размере загруженном и не надо отдельно делать какой-то запрос… то есть вы просто грузите ваш файл, а прогресс всегда известен

Кроме того вы получаете возможность возобновить загрузку с того места, где остановились… это мощное и гибкое решение

Сделал такое на go, для Java тоже есть решения и для сервера и для клиента…
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы