Использование общих библиотек в микросервисах - плохая практика. Но каждый микросервис зависит от фреймворков и библиотек: Spring Boot, Kafka Java Client et c.
Если система состоит из 30 микросервисов на основе Spring Boot и использует Gradle или Maven в качестве сборки инструмент и распространяется в виде Docker изображений, есть ли простой способ обновить версию Spring Boot во всех микросервисах? Обновление всех микросервисов по одному занимает много усилий. И чем больше микросервисов в системе, тем больше усилий требуется.
И причиной обновления может быть уязвимость безопасности в некоторых зависимостях. Например, Spring Boot 2.2.0.RELEASE зависит от Tomcat 9.0.27, который имеет уязвимость CVE-2020-1938 (просто в качестве примера). Уязвимость была исправлена в Tomcat 9.0.31, поэтому обновление до Spring Boot 2.2.4.RELEASE решит проблему.
Обходной путь - объявить версию Spring Boot в build.gradle
как 2.2.+
. Но кто-то все еще должен перестроить все микросервисы (например, на Jenkins).
Кроме того, при таком подходе вы теряете контроль над управлением версиями и делегируете его Gradle (всегда используйте последнюю возможную версию). Чтобы все еще иметь контроль над зависимостями, версии могут быть объявлены в gradle.properties
и каким-то образом смонтированы Дженкинсом в рабочую область:
spring.version=2.2.4.RELEASE
Если уязвимость является критической, нет времени ждать новой версии Spring Boot с исправлением и Tomcat должен быть явно обновлен в build.gradle
. Или даже заменить на Undertow, что также требует изменений в build.gradle
.
Использование автономного Tomcat вместо встроенного также не очень помогает, поскольку микросервисы распространяются как образы Docker, а не как файлы WAR, развернутые в контейнер сервлетов.
В Java Обновления безопасности EE в теории было супер просто. Вы обновляете сервер приложений (например, WildFly) или устанавливаете исправление безопасности, и если приложение использует только Java EE API, никаких дальнейших действий не требуется. Существует ли аналогичная концепция простых обновлений зависимостей для микросервисов (по крайней мере, в теории)?