@x32net

Какие эффективные способы передачи данных (2 МБайта) от одного приложения к другому есть в linux?

Есть web-app, который в Post запросе принимает файл от пользователя:
1. Сохраняет файл (1 МБайт) в fs по уникальному пути: uniquePath := userID + time
2. Передает путь к файлу программе z-app: exec.Command(Z, uniquePath).Stdout = &stdout
3. Ждет завершения работы программы z-app (около 5-10 сек, web-api запросы)
4. Передает результат (2 MБайта) в Post: w.Write(stdout.Bytes())

Программа z-app:
1. Будет часто обновляться, без потерь для ожидающих завершения работы пользователей.

Как эффективнее реорганизовать взаимодействие web-app с z-app? Pipe, FIFO, что-то другое?
web-app и z-app написаны на Golang
  • Вопрос задан
  • 717 просмотров
Решения вопроса 1
@TargetSan
Если ваша z-app по сути является бэкендом для web-app, не вижу проблемы запускать z-app как субпроцесс, скармливая ей данные через stdin и забирая результат из её stdout, Поскольку z-app всё равно работает долго, накладные расходы на запуск дочернего процесса проблемой не будут. Python это делает своим модулем subprocess, как это делает golang - не знаю.
В любом случае вы уткнётесь в передачу данных или напрямую через поток, или сохранением потока на диск в файл и передачей имени файла. Если же у вас z-app часто обновляется, решение с субпроцессами даст ещё и отсутствие проблем с апдейтами - новый инстанс просто запустится из нового файла
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
В чем проблема выведения ошибки в консоль? Если ошибки выводить в STDERR, а обмен данными производить через STDOUT, никаких проблем не будет.
Общение удобнее организовать через юникс-сокеты или через tcp на localhost. Пускай z-app висит демоном и принимает задачи на обработку.
Ответ написан
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Если латентность 5-10сек вас устраивает можно обойтись fsnotify(например https://fsnotify.org/). web-app плодит файлы по уникальному пути. z-app отслеживает изменения в файловой системе и обрабатывает новые. Результат работы z-app заливает в тот же или новый файл по уникальному пути. web-app в свою очередь мониторит файловую систему и забирает новые результаты. Все асинхронно, прямой связи вообще нет. z-app может работать в несколько потоков.
Ответ написан
bitver
@bitver
Linux? Ну начните с этого
D-Bus
CORBA
Это ж очевидно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы