2016-06-23 10 views
2

Я смущен тем, как я могу использовать несколько микросервисов, выполненных с весенним ботинком.Возможно ли иметь микросервисы с пружинным ботинком

Когда я читал о Karaf, они всегда используют Blueprint вместо Spring, и у меня не получается создать впечатление, что его можно использовать с Spring boot.

Затем я нашел Fabric8, но я не могу найти ни одного примера микросервисов, сделанных с использованием Spring Boot.

Все, что мне нужно, - это возможность быстрого развертывания и конфигурации во время выполнения, например, в Karaf, но с несколькими службами загрузки Spring.

Возможно ли это?

Может ли кто-нибудь предоставить мне документацию или образец проекта?

Спасибо

+0

должен этот вопрос, скорее, на programmers.stackexchange.com ? – alexbt

+1

Прочтите эту статью из источника: https://spring.io/blog/2015/07/14/microservices-with-spring с включенной батареей. –

+0

@Alex, если этот вопрос о Весне, то нет. Если этот вопрос касается микросервисов, то, может быть. Но этот вопрос касается весны, поэтому нет. – MetaFight

ответ

8

Вот 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 - какую бы инфраструктуру вы ни выбрали.

Просто помните компромисс преимуществ в латентности от горячей перезагрузки от снижения качества, увеличением ошибок и оперативные вопросов перемещения от неизменной инфраструктуры и непрерывной поставки

+0

Полностью согласовано, особенно в мире микросервисов, где время поворота должно быть быстрым из-за меньших отпечатков артефакта. Он должен быть доступен для перезапуска целого (микро) приложения, чтобы перейти к четко определенному, всегда воспроизводимому состоянию. И поскольку это отражает то, как приложения работают в производстве, это более реалистичный рабочий процесс. Но это работает очень хорошо, если время разработки в оба конца может быть сокращено, что является неотъемлемым требованием. –

+0

Я согласен с тем, что для быстрого развертывания нет необходимости в коротких циклах dev. Я лично работаю с OSGi так же, как Джеймс показал весенний ботинок. Я создаю полностью упакованные единицы развертывания в автоматическом конвейере. Основное отличие состоит в том, что я предлагаю не начинать с микросервисов, а модульное приложение в одном процессе. Это намного проще. Затем, если необходимо, вы выделяете модули с разными командами или dev-циклами в качестве отдельных микросервисов. –

3

Вы не можете получить горячее развертывание работы с пружинным ботинке. В настоящее время мы работаем над загрузкой karaf, целью которой является обеспечение весеннего ботинка, как опыт работы в OSGi.

Я также поговорил на конференции в Барселоне (JBCNCONF) на прошлой неделе, которая охватывает эту тему: Lean microservices in OSGi.

Итак, я считаю, что микросервисы в OSGi уже жизнеспособны, но мы еще не с тем же удобством, что и весенний ботинок.

+0

Я запутался в OSGI. Я думал, что это спецификация для создания пакета модулей (микросервисов) – Marc

+2

Это правда. OSGi позволяет создавать модульные приложения, и они обмениваются данными через службы OSGi (также называемые микросервисами). Весна не очень совместима с OSGi, хотя и не очень модульная. Таким образом, весенняя загрузка - это создание каждого микросервиса как своего собственного модуля развертывания и позволяет им общаться с использованием REST или аналогичного. Итак, оба модуля, но совершенно по-другому. –

+0

Как использовать/развертывать Spring-boot в karaf. – Sanjeev

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