Импорт больших файлов с зависимостями в службу REST

#java #spring #performance #concurrency

#java #spring #Производительность #параллелизм

Вопрос:

Предположим, что существует служба REST, способная импортировать большие файлы, содержащие ресурсы.

Эти активы могут дублироваться друг с другом, также активы могут создавать другие объекты, поэтому существуют проверки для проверки дубликатов, и между импортами есть некоторые зависимости, так что их необходимо проверять во всех текущих импортах и уже существующих импортах.

Существует некоторая логика обработки ресурсов перед сохранением, импорт этих файлов занимает около 3-4 минут. Все ресурсы сохраняются сразу после завершения обработки.

Может кто-нибудь посоветовать, каков наилучший способ решения параллельных проблем с точки зрения обеспечения наилучшей производительности, возможной в такой системе?

Ответ №1:

Реактивное программирование в настоящее время является хорошим подходом для получения высокой производительности в веб-приложениях.
Взгляните на эту статью о реактивном программировании и о том, как оно решает проблему производительности:
https://blog.redelastic.com/what-is-reactive-programming-bc9fa7f4a7fc

Поскольку вы используете Java и Spring, Spring Webflux может стать вашим способом начать реактивное программирование. Взгляните на этот учебник:
https://www.baeldung.com/spring-webflux
В этом руководстве основное внимание уделяется взаимодействию между клиентом и сервером с помощью REST. Но реактивное программирование решает также обработку полученных данных на стороне сервера, например, путем взаимодействия с базой данных реактивным способом.

Ответ №2:

Spring Batch обладает возможностью параллельной обработки.

Фреймворк используется для обработки ETL

Задание может быть запущено контроллером асинхронно после получения ресурсов или может быть отложено — изначально или с использованием какого-либо другого планировщика, такого как Quartz.

Ответ №3:

Я бы рекомендовал использовать Apache Spark через Apache Livy, который предоставляет интерфейс REST API для Apache Spark. Возможности Apache Spark по обработке пакетных данных, выявлению дубликатов надежны, и он использует RDD / DataFrame для более быстрой обработки.

[https://dassum.medium.com/apache-livy-a-rest-interface-for-apache-spark-f435540e26a9 ][1]