@Andrey-2

Как реализовать обмен данными со сторонним веб приложением?

Есть 2 веб приложения, приложение 1 - обрабатывает файлы разными нейронками, приложение 2 - ЛК пользователя/функционал по загрузке файлов на обработку и тп.
Как примерно работает:
Пользователь в приложение 2 загружает файлы и производит с ними некоторые действия, затем выбранные файлы необходимо обработать одной или несколькими нейроками (в приложении 1) и сохранить результат.
Т.к. приложению 1 необходимо время на обработку файла я не могу сделать чтобы передача и обработка происходили в одной сессии, происходит таймаут и разрыв соединения + пользователь не может сидеть и ждать когда обработаются все файлы, но он может проверить результат позже.
Нужно учитывать пару моментов:
1. В приложении 1 не нужно сохранять исходные файлы т.е. скачал, обработал, удалил, вернул результат.
2. Это не микросервис, это 2 независимых приложения со своими задачами и пользователями.
3. Брокерами сообщений для обмена данными нельзя пользоваться.

Я рассматривал несколько вариантов, но мне кажется они либо слишком избыточные, либо их долго и сложно делать.
Пока пришел к таким вариантам:
Вариант_1
1) Приложение 2 отправляет на внешнее API список ИД файлов которые необходимо обработать в приложении 1.
2) Приложение 1 после приёма данных создаёт список задач (которые работают в фоне) на обработку и отправляет в приложение 2 сообщение что задачи созданы.
2.1) Приложение 2 периодически мониторит статусы обработки в приложении 1.
3) Приложение 1. После старта задачи происходят следующие действия:
* скачивается файл из приложения 2
* после скачивания файл обрабатывается нейронкой
* после обработки результат сохраняется в локальную БД и меняется статус что файл обработан.
4) Приложение 2 при следующем запросе скачивает себе эти результаты и сохраняет в локальную БД.

Вариант_2
1) Приложение 2 отправляет на внешнее API список ИД файлов которые необходимо обработать в приложении 1.
2) Приложение 1 после приёма данных создаёт список задач (которые работают в фоне) на обработку и отправляет в приложение 2 сообщение что задачи созданы.
2.1) Приложение 2 периодически мониторит статусы в локальной БД.
3) Приложение 1. После старта задачи происходят следующие действия:
* скачивается файл из приложения 2
* после скачивания файл обрабатывается нейронкой
* после обработки результат отправляется в приложение 2

Необходимы советы, примеры, лит-ра как правильно подобную задачу/задачи можно реализовать.
Я хочу сделать данную задачу без костылей и чтобы было надёжно.

З.ы. я знаю как её сделать, а вот как правильно подобные задачи делать не уверен.
З.ы.ы. пробовал гуглить, но в выдаче большинство вариантов для передачи данных от пользователя на сервер, в моей ситуации пользователь только инициирует обработку, а дальше всё должно происходить автоматически.
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 1
@heartdevil
плыву как воздушный шарик
Если у вас есть возможность работать с планировщиком задач (шедуллер), то все и будет просиходть ровным счетом как вы описали. Вы используете технику webhook. То есть, обычно внешний сервис (если мы говорим о микросервисах) дает потребителю свой адрес, на который он ожидает запросы и так же он требует обратный адрес потребителя. Куда слать ответы. В вашем случае у вас оба "сервиса" ваши. Так что просто предоставьте друг другу адрес для запроса и для ответа.
Примерный сценарий.
1) Единственное действие пользователя - отправить список айдишников. Сервис 1 вызывает вебхук-запроса.
2) Сервис 2, принимает запрос, и шлет сразу ответ на предоставленный ему адрес для ответов. Ок или не Ок.
3) Сервис 1 получает ответ и обрабатывает (ожидание или retry).
4) В какой-то момент Сервис 2 начианет слать ответы в сервис 1 по преодоставленному вебхук-ответу.
5) Сервис 1, так же через планировщик мониторит базу ну и делает оставшуюся работу.

Как-то так
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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