2014-11-19 3 views
0

У меня есть 3 разных сервиса, которые используют GraphicsMagick как зависимость, и я только начинаю с Docker. Поэтому мне интересно, должен ли я сделать отдельный легкий API для GraphicsMagick (возможно, используя PHP) и поместить его в отдельный контейнер Docker? Поскольку GraphicsMagick является просто исполняемым.Должен ли я выполнять сервис для общих зависимостей Docker?

Или это будет медленно, и лучше всего установить GraphicsMagick в качестве зависимости для каждого контейнера службы?

Спасибо!

+0

Выполняется ли GraphicsMagick как отдельный процесс? Как эти 3 службы общаются с ним? –

+0

@UsmanIsmail Это просто исполняемый файл. Поскольку он установлен на той же машине, что и все эти 3 службы, я могу сделать что-то подобное в Java: Process p = Runtime.getRuntime(). Exec (command); Я думал о создании простого REST API, поэтому я мог бы назвать его сервисом. –

+2

Почему бы не установить его в том, а затем поделиться этим томом между 3-мя контейнерами? Или еще лучше создать базовый контейнер с библиотекой GraphicsMagick в нем в хорошо известном месте, а затем использовать '' 'с базой'' в своих 3 докерных файлах. –

ответ

1

Как уже упоминалось в комментариях и вашем исходном вопросе, здесь есть два подхода. Один из них - просто установить GraphicsMagick в базовое изображение или в отдельные служебные изображения. Другим было бы создание отдельной службы (своего рода рабочего или графического API-интерфейса для сортировки), характерного для GraphicsMagick. Я предполагаю, что ответ будет зависеть от того, какие плюсы и минусы для вас наиболее важны прямо сейчас.

GraphicsMagick в базовом изображении имеет то преимущество, что его будет легко реализовать. Вам не нужно строить что-то дополнительное. Бинарный файл GraphicsMagick не должен быть слишком сложным для установки и, вероятно, только добавляет пару MB размера к вашим конечным изображениям.

Создание отдельного образа обслуживания API с помощью GraphicsMagick имеет накладные расходы на разработку и сложность обслуживания. Возможно, вам также понадобится реализовать какое-то открытие службы с помощью этой модели, чтобы ваши другие служебные образы знали, как добраться до этого нового API. Хотя, по дороге это будет более масштабируемая модель. В зависимости от того, где ваша нагрузка, это может помочь масштабировать отдельно от других контейнеров обслуживания, а также запускаться на отдельных хостах, если это необходимо, особенно когда манипуляции с изображениями могут использовать процессор и голодать другие сервисы.

Так что я бы задать себе следующие вопросы:

  • Можете ли вы позволить себе дополнительное время разработки?
  • Требуется ли для этой отдельной масштабируемости масштабируемость?
  • Не существует проблемы с управлением дополнительным сервисом, которому также может потребоваться некоторое обнаружение службы?

Если вы можете ответить «да» на все эти вопросы, вы можете быть в строю, чтобы просто создать для этого отдельный сервис. Докер определенно хорошо подходит для сервис-ориентированных архитектур, и это, вероятно, более правильный способ создания приложения. Но многое можно сказать о чем-то, что «просто работает», и требует минимального времени для реализации, особенно если оно будет работать нормально в течение достаточного количества времени.

Смежные вопросы