Как уже упоминалось в комментариях и вашем исходном вопросе, здесь есть два подхода. Один из них - просто установить GraphicsMagick в базовое изображение или в отдельные служебные изображения. Другим было бы создание отдельной службы (своего рода рабочего или графического API-интерфейса для сортировки), характерного для GraphicsMagick. Я предполагаю, что ответ будет зависеть от того, какие плюсы и минусы для вас наиболее важны прямо сейчас.
GraphicsMagick в базовом изображении имеет то преимущество, что его будет легко реализовать. Вам не нужно строить что-то дополнительное. Бинарный файл GraphicsMagick не должен быть слишком сложным для установки и, вероятно, только добавляет пару MB размера к вашим конечным изображениям.
Создание отдельного образа обслуживания API с помощью GraphicsMagick имеет накладные расходы на разработку и сложность обслуживания. Возможно, вам также понадобится реализовать какое-то открытие службы с помощью этой модели, чтобы ваши другие служебные образы знали, как добраться до этого нового API. Хотя, по дороге это будет более масштабируемая модель. В зависимости от того, где ваша нагрузка, это может помочь масштабировать отдельно от других контейнеров обслуживания, а также запускаться на отдельных хостах, если это необходимо, особенно когда манипуляции с изображениями могут использовать процессор и голодать другие сервисы.
Так что я бы задать себе следующие вопросы:
- Можете ли вы позволить себе дополнительное время разработки?
- Требуется ли для этой отдельной масштабируемости масштабируемость?
- Не существует проблемы с управлением дополнительным сервисом, которому также может потребоваться некоторое обнаружение службы?
Если вы можете ответить «да» на все эти вопросы, вы можете быть в строю, чтобы просто создать для этого отдельный сервис. Докер определенно хорошо подходит для сервис-ориентированных архитектур, и это, вероятно, более правильный способ создания приложения. Но многое можно сказать о чем-то, что «просто работает», и требует минимального времени для реализации, особенно если оно будет работать нормально в течение достаточного количества времени.
Выполняется ли GraphicsMagick как отдельный процесс? Как эти 3 службы общаются с ним? –
@UsmanIsmail Это просто исполняемый файл. Поскольку он установлен на той же машине, что и все эти 3 службы, я могу сделать что-то подобное в Java: Process p = Runtime.getRuntime(). Exec (command); Я думал о создании простого REST API, поэтому я мог бы назвать его сервисом. –
Почему бы не установить его в том, а затем поделиться этим томом между 3-мя контейнерами? Или еще лучше создать базовый контейнер с библиотекой GraphicsMagick в нем в хорошо известном месте, а затем использовать '' 'с базой'' в своих 3 докерных файлах. –