#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]