Следуя шаблону поваренной книги среды (в частности, используя рецепт app.rb для развертывания), если у меня есть приложение, состоящее из внешнего клиента, внутреннего API , и некоторые службы (каждый отдельный проект Visual Studio и потенциально работающий на разных узлах) должен ли каждый компонент быть рецептом в общей кулинарной книге среды или у каждого есть своя кулинарная книга?
Я думаю, что каждый компонент сам по себе является другим приложением и поэтому должен иметь свою собственную кулинарную книгу среды.
В противном случае я не могу представить, как рецепт среды app.rb будет развертывать приложение, учитывая наличие нескольких узлов.
Я правильно обдумываю это? Как другие реализовали распределенные приложения с помощью Chef?
Правка: После нескольких дней раздумий я отступаю и останавливаюсь на шаблоне одна кулинарная книга среды:
Мыслительное упражнение — «MyApp»
«MyApp» состоит из двух программных компонентов, скомпилированных отдельно и находящихся на разных узлах:
- Веб-приложение
- ОТДЫХА 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 и исправлены ошибки в веб-приложении.
Dev Test Prod
1.1.0 1.1.0 1.0.1
«Нам нужно перенести исправления веб-приложений из версии 1.1.0 в рабочую версию, но мы еще не закончили тестирование новой функции API». - Менеджер
Проблема: требования к производственной среде MyApp отличаются от требований к среде версии 1.1.0, находящихся в разработке и тестировании.
Possible Solutions- Вырежьте выпуск 1.0.2 без функции API и продвигайте его через среды. Затем верните 1.1.0 обратно в dev и протестируйте; теперь мы вернулись к тому, с чего начали, но исправления ошибок находятся в разработке, как и хотелось.
- 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. Я хотел бы получить больше отзывов, прежде чем я приму решение об ответе. Имеет ли это смысл?