Вот demo video showing how to create a Spring Boot microservice в Fabric8 Microservices Platform и, полный Continuous Deployment pipeline получить создан, чтобы сделать следующее:
- пакет код, создать Docker изображение и kubernetes манифеста
- провести испытания системы/интеграции
- развертывание в промежуточную среду со скользящими обновлениями
- wait (необязательно) утверждение человека
- развертывание в производственная среда с обновляющимися обновлениями
Любое изменение кода или конфигурации в репозитории git автоматически запускает автоматические обновления - это форма быстрого развертывания. например если вы используете 3 контейнера в производстве; новые контейнеры объединяются с новым кодом и/или конфигурацией, основанной на скользящей политике обновления. Обычно начинаются новые контейнеры; когда они готовы, старые снимаются, скажем 1 за раз (или вы можете сделать их все сразу, если хотите). Качественное обновление включено в любую балансировку нагрузки; поэтому новые контейнеры получаются только тогда, когда они готовы.
Учитывая ваше использование OSGi, вы можете захотеть, чтобы контейнеры продолжали работать и просто мутировали на лету. Во-первых, весь переход к неизменяемой инфраструктуре (например, изображения докеров) означает, что программное обеспечение становится проще и проще рассуждать. Вместо того, чтобы запускать новые пакеты/код/конфиг в/из на лету, вы просто создаете новое изображение и закручиваете его вверх.
Мутирование на лету приводит к многопоточному коду, который должен останавливаться и перезапускать службы «на лету», что может привести к сложным трудностям с воспроизведением ошибок и утечек ресурсов, поскольку у вас есть большие сложные диаграммы зависимостей объектов служб запуска/остановки на лету.В команде Fuse мы потратили много лет на то, чтобы исправлять ошибки в . Перезагрузите логику, и я уверен, что там все еще есть миллионы ошибок при перезапуске служб OSGi на лету.
Так что я предпочитаю использовать Continuous Deployment pipeline, чтобы выкатить все изменения; будь то код или конфигурация. Конечно, между временем внесения изменений и моментом, когда процесс обрабатывает новый запрос с новым кодом/config, добавляется некоторое латентность, но у вас есть больше качества и надежности, испеченных. Плюс его тривиальное откат. Вы также можете легко выполнить скользящие обновления изменений; поэтому вы получаете быструю обратную связь, если изменение ломает вещи для небольшого подмножества ваших пользователей/трафика, а не большого взрыва.
Это считается; если вы по-прежнему действительно хотите, чтобы JVM-файлы могли перезагружать код и/или конфигурировать «на лету», не тестируя его сначала в режиме большого взлома без легкого откат; есть еще некоторые доступные варианты. Они описаны в configuration microservices documentation.
По существу это сводится к использованию ConfigMap in Kubernetes или git repository volume; в обоих случаях конфигурация отображается как тома (файлы) - код Java может затем просматривать файлы и перезагружаться «на лету». Вы можете сделать это через OSGi Config Admin или через Spring Boot - какую бы инфраструктуру вы ни выбрали.
Просто помните компромисс преимуществ в латентности от горячей перезагрузки от снижения качества, увеличением ошибок и оперативные вопросов перемещения от неизменной инфраструктуры и непрерывной поставки
должен этот вопрос, скорее, на programmers.stackexchange.com ? – alexbt
Прочтите эту статью из источника: https://spring.io/blog/2015/07/14/microservices-with-spring с включенной батареей. –
@Alex, если этот вопрос о Весне, то нет. Если этот вопрос касается микросервисов, то, может быть. Но этот вопрос касается весны, поэтому нет. – MetaFight