Шеф-повар: Должен ли я развертывать многоузловое приложение, используя шаблон кулинарной книги среды?

Следуя шаблону поваренной книги среды (в частности, используя рецепт app.rb для развертывания), если у меня есть приложение, состоящее из внешнего клиента, внутреннего API , и некоторые службы (каждый отдельный проект Visual Studio и потенциально работающий на разных узлах) должен ли каждый компонент быть рецептом в общей кулинарной книге среды или у каждого есть своя кулинарная книга?

Я думаю, что каждый компонент сам по себе является другим приложением и поэтому должен иметь свою собственную кулинарную книгу среды.

В противном случае я не могу представить, как рецепт среды app.rb будет развертывать приложение, учитывая наличие нескольких узлов.

Я правильно обдумываю это? Как другие реализовали распределенные приложения с помощью Chef?

Правка: После нескольких дней раздумий я отступаю и останавливаюсь на шаблоне одна кулинарная книга среды:

Мыслительное упражнение — «MyApp»

«MyApp» состоит из двух программных компонентов, скомпилированных отдельно и находящихся на разных узлах:

  1. Веб-приложение
  2. ОТДЫХА API

Текущая настройка поваренной книги:

myapp environment cookbook
- recipes
  - webapp.rb
  - restapi.rb

Логично ли это или вместо этого каждый программный компонент должен быть отдельной кулинарной книгой?

В текущей системе артефакт релиза выглядит так (каждый рецепт знает, как развернуть свой артефакт):

myapp-vX.X.X artifact
- webapp.tar.gz
- restapi.tar.gz
- cookbooks.tar.gz
Current releases:
  • 1.0.0 — Начальная разработка
  • 1.0.1 - Исправление ошибки в веб-приложении
  • 1.1.0 - Добавлена ​​новая функция в API и исправлены ошибки в веб-приложении.
Current environment
Dev        Test        Prod
1.1.0      1.1.0       1.0.1

«Нам нужно перенести исправления веб-приложений из версии 1.1.0 в рабочую версию, но мы еще не закончили тестирование новой функции API». - Менеджер

Проблема: требования к производственной среде MyApp отличаются от требований к среде версии 1.1.0, находящихся в разработке и тестировании.

Possible Solutions
  1. Вырежьте выпуск 1.0.2 без функции API и продвигайте его через среды. Затем верните 1.1.0 обратно в dev и протестируйте; теперь мы вернулись к тому, с чего начали, но исправления ошибок находятся в разработке, как и хотелось.
  2. Re-architect cookbooks: make the webapp and API components be separate cookbooks.
    • Each have their own versions (API 1.0.0 could live with webapp 1.0.1 in prod)
    • Они создают свои собственные артефакты развертывания, как и раньше, но артефакты публикуются в репозиториях для конкретных приложений (например, myapp-webapp) вместо репозитория артефактов «MyApp».
    • Новая среда «myapp» будет просто определять версию каждой необходимой поваренной книги компонента приложения.
    • Результат: API версии 1.0.0 будет развернут вместе с веб-приложением версии 1.0.1 в рабочей среде.
    • Problems:
      • Even though these pieces of software are part of the same logical distributed application, their shared data are not logically grouped together. Ex: both might need to define the API endpoint in an attribute (default[:myapp][:api][:endpoint]).
      • Может быть сложно отслеживать кросс-совместимость. «Совместима ли версия 1.0.1 веб-приложения с версией 1.2.0 API?»

Кажется, есть много способов снять шкуру с этой кошки, но если вы не можете сказать, мне больше нравится вариант №1. Я хотел бы получить больше отзывов, прежде чем я приму решение об ответе. Имеет ли это смысл?


person JoelWilson    schedule 18.12.2014    source источник


Ответы (1)


Я думаю, вы правы. Поскольку каждый из них является самостоятельным проектом VS, он должен быть собственной кулинарной книгой приложений. Это позволяет вам управлять версиями каждой отдельной поваренной книги и изменять их отдельные развертывания. Это отделяет их друг от друга, позволяя вам вносить изменения в каждый код развертывания, не затрагивая случайно другой рабочий код.

Кулинарная книга среды — это кулинарная книга, которая содержит вещи, характерные для всех экземпляров env, например, каждый узел использует ruby ​​или python и требует их установки.

Кулинарная книга приложения является чем-то специфичным для каждого приложения, поэтому ваш мыслительный процесс верен, этого не должно быть в среде, это должно быть на уровне приложения. Также обратите внимание, что конфигурация приложения может быть выполнена на уровне среды и просачиваться вниз, но фактическое развертывание само по себе должно быть кулинарной книгой приложения.

person Stephen Carman    schedule 18.12.2014
comment
Спасибо за ответ. Я стучал головой об этом с тех пор, как опубликовал вопрос. Я думаю, что в этой ситуации можно применить книгу рецептов окружающей среды. Хотя вместо одного файла app.rb для развертывания приложения у меня будет рецепт для каждого программного компонента всего приложения, который может выполнять собственное развертывание. Я опубликую свое решение, как только разберусь с ним. - person JoelWilson; 19.12.2014
comment
@JoelWilson будьте осторожны с несколькими рецептами в одной и той же кулинарной книге, однажды вы достигнете предела параллельной разработки, когда вы хотите, чтобы рецепт B пошел в производство, но не рецепт C, но рецепт C был в QA до B, и у вас будет кошмар управление версией поваренной книги в prod. Любой независимый код должен иметь свою собственную кулинарную книгу для управления этим. - person Tensibai; 19.12.2014
comment
@JoelWilson - это идея слабой связи программных компонентов, поэтому у вас есть гибкость, позволяющая развертывать и использовать все, что вы хотите, не беспокоясь о вещах, которые не являются зависимостями. Включение всего этого в рецепт кулинарной книги делает каждый компонент зависимым от компонента, прежде чем он будет работать правильно или станет тем, что вы хотите в своей среде. - person Stephen Carman; 19.12.2014
comment
@Tensibai Я переопределил свой вопрос, добавив больше подробностей и пример. Что вы думаете? Я бы хотел, чтобы меня убедили в правильном направлении, каким бы оно ни было. - person JoelWilson; 20.12.2014
comment
@JoelWilson не так много, чтобы добавить к предыдущему комментарию. Ваш предпочтительный способ № 1 действителен, но я просто могу сказать, что он превращается в кошмар, когда дело доходит до того, чтобы сделать это в реальности. Chef не будет решать проблемы с зависимостями/совместимостью вместо вас. Вам не обязательно использовать тот же шаблон в кулинарных книгах, что и в сборке, поэтому код развертывания может быть на другой схеме, чем ваш код сборки. Управление версией ваших компонентов в любом случае должно быть выполнено в какой-то момент, наличие отдельных поваренных книг обычно помогает продвигать их в конвейере, но см. Случай с заправкой :) попробуйте и сохраните его или нет через некоторое время. - person Tensibai; 22.12.2014