Как деплоить и управлять версиями микросервисов в продакшене
Что проверяют
Выкатывали ли вы сервис так, чтобы он не падал, а старая версия какое-то время жила рядом с новой. Следом почти всегда спрашивают, как откатить релиз, который уже изменил схему базы, и как не сломать соседей, которые ходят в ваш API.
Как отвечать
Разделите ответ на слои: артефакт, выкатка, совместимость, наблюдаемость.
- артефакт: один неизменяемый образ на коммит, собранный в CI (Jib,
spring-boot:build-imageили Dockerfile). Тег по git SHA или версии,latestв проде не используется, образ едет по стендам без пересборки; - выкатка: в Kubernetes по умолчанию
RollingUpdateсmaxSurgeиmaxUnavailable. Для рискованных релизов canary через Argo Rollouts или Flagger, blue-green там, где нужен мгновенный откат переключением трафика. С GitOps (Argo CD, Flux) откат это revert коммита в репозитории манифестов; - здоровье: Spring Boot Actuator отдаёт
/actuator/health/livenessи/actuator/health/readinessпод пробы Kubernetes. Graceful shutdown в свежих версиях Spring Boot включён по умолчанию, в старых задаётсяserver.shutdown=graceful; - контракты: SemVer для API, ломающие изменения только новой версией (
/v2или новое поле рядом со старым), контрактные тесты через Spring Cloud Contract или Pact. Схемы событий Kafka в Schema Registry с проверкой совместимости; - база: Flyway или Liquibase по схеме expand/contract. Добавили колонку, выкатили код, который пишет в обе, и только через релиз удалили старую.
Закончите метриками: Micrometer в Prometheus, алерты по ошибкам и латентности, по ним решают, продолжать canary или откатывать. Крупные фичи прячут за feature flags, чтобы деплой и релиз стали разными событиями.
Где спотыкаются
Говорят «откатимся на прошлый образ» и забывают, что миграция уже изменила схему. Без обратной совместимости схемы откат кода ломает сервис.
Путают версию сервиса и версию API. Сервис может выходить десять раз в день, а контракт при этом не меняется, и потребителям ничего знать не нужно.
Не упоминают readiness-пробу и корректную остановку. Тогда каждая выкатка даёт всплеск 502, сколько бы стратегий вы ни перечислили.