#docker #docker-compose #server-communication
Вопрос:
У меня есть три контейнера docker, которые подключены через docker-compose.
Первый (A) — это прокси-сервер nginx, который перехватывает все сетевые запросы и передает их второму контейнеру (B). Контейнер B-это веб-сервер nodejs.
Контейнер B получает некоторые данные от пользователей, и после этого мне нужно начать некоторые сложные вычисления. Программное обеспечение, которое выполняет эти вычисления, находится в контейнере C. Я могу обмениваться всеми данными между B и C, используя тома docker, это не проблема. Но я не знаю, как запустить вычисления из контейнера B и как узнать, когда контейнер C завершится.
Что такое контейнер С? Это контейнер с некоторым программным обеспечением, который можно запустить с помощью команды из терминала. Например, supersoft start ./path/to/data
. Во время работы supersoft он выводит некоторую информацию на консоль (что может быть очень полезно для пользователя в контейнере B). После расчета суперсофт просто заканчивает, и все.
Вопрос в том, как создать нормальную архитектуру и каков нормальный способ для этого?
Комментарии:
1. Я бы использовал здесь систему очередей на работу, такую как RabbitMQ. Сделайте «контейнер C» долговременным контейнером, который прослушивает очередь, выполняет работу и сообщает о результатах через очередь.