Вы здесь:

Модульный karaf в микросервисе. Мозг в трубочку. А почему бы не кубер в bundle карафа? А может сразу windows в bundle? (были опыты запуска урезанного windows в bundle). Речь идет о модульной java. Модульная java? А это она! Karaf это реализация OSGi. OSGi - шина с плагинами (java-модулями, в терминах OSGi называется bundle), ктр. взаимодействуют между собой. Один bundle отправляет сообщение в шину через интерфейс, предоставленный шиной, а другой/другие bundle, ктр. заявляют, что могут реализовать интерфейс, обрабатывают сообщение. При этом источник даже не знает кому и сколько читателей. И еще одна фишка Karaf (может быть основная) замена функциональности без остановки всего сервиса.

А почему я, вообще, поднял эту тему? А потому-что второй раз попался проект с Karaf в Kubernetes. Проект Eclipse RCP это реализация идеи OSGi. Eclipse RCP это десктопное плагинное приложение. Работает отлично!
Karaf это реализация идей OSGi, но без десктопа, только шина и инструменты работы с ней. Идея использовать OSGi в микросервисе kubernetes выглядит как-то неоднозначно. Как должно делаться обновление plugin/bundle OSGi:

  • Нужно подключиться к работающему приложению.
  • Установить из внешнего источника новый bundle.
  • Остановить старый bundle.
  • Запустить новый bundle.
  • Удалить старый bundle

В случае kubernetes эти операции нужно сделать в каждом микросервисе. А зачем? Kubernetes и сам справляется с этими задачами. Возникают специфические требования к devops службе. Зайти в каждый микросервис, где работает karaf, инсталировать и активировать новый bundle, остановить и удалить старый (или "забить" на него, их там много потом накапливается). Посмотреть логи. Причем bundle может и поднимется, а вот будет ли работать не факт, узнаем на проде. Для тестировщиков совсем закрытая тема. Использование "чистых" микросервисов (без karaf) гораздо жестче, надежнее и проще решает задачу ухода от монолита. На двух проектах пришлось позаниматься "убийством" karaf в kubernetes. Несложно оказалось. В Kubernetes мы завязаны только на json через REST сервис (http), а не на interface java. И java в отношении json гораздо покладистее. Понятно, что есть и другие способы взаимодействия микросервисов.
Почему же все таки karaf жив? А, действительно, удобно для небольшой компании.
Пример: Один программист (ну или два). Kubernetes нет. Торговая система. Стартует новая торговая акция. Инсталируем и стартуем новый bundle с логикой новой торговой акции в karaf на сервере. И все работает, была остановлена только часть системы, связанная с торговой акцией.
Еще пример: Десктоп приложение на Eclipse RCP. Не karaf, но OSGi. В Eclipse RCP другая реализация OSGi - Equinox. Устанавкой плагинов, расширяем возможности приложения. С Eclipse plugin-ами многие знакомы.

Кстати, есть еще интересная штука DOSGi - cвязывание двух или более bundle через сеть. Плагин(bundle) из одного karaf вызывает плагин, находящийся где-то в сети в другом karaf ( пример ).

Избегать тупых ошибок помогал мультимодульный проект. Работу в команде при этом, как-то плохо представляю. Точнее, у нас (3 backend разработчика) плохо получалось (см. выше про интерфейсы).

allure_result_test

Ссылки: