Вопрос с собеседования · Spring

Чем liveness probe отличается от readiness probe?

MiddleSpring Boot и ActuatorSpring BootSpring Boot >=2.3
Ещё спрашивают так:
  • Как настроить пробы Kubernetes в Spring Boot?
Коротко

Liveness — жив ли процесс; не прошла — Kubernetes перезапускает контейнер. Readiness — готов ли принимать трафик; не прошла — под убирают из балансировки, но не перезапускают.

  • Spring Boot: /actuator/health/liveness и /actuator/health/readiness
  • Liveness не проверяет базу и внешние сервисы — иначе их сбой перезапустит все поды
  • Readiness = false при старте и при корректном завершении

А ещё AvailabilityChangeEvent — переключить состояние из кода

Подробно

Liveness: «не завис ли процесс». Если проба падает несколько раз подряд, kubelet убивает контейнер и запускает заново. Проверять только сам процесс. Если включить базу, при её недоступности Kubernetes перезапустит все экземпляры — и они дополнительно ударят по базе при старте.

Readiness: «можно ли сейчас слать трафик». Под с неготовой пробой исключается из Service, пока не поправится. Сюда можно включать прогрев кэшей и критичные зависимости.

Startup (отдельная проба Kubernetes) — даёт время медленному старту.

Spring Boot 2.3+: ApplicationAvailability хранит LivenessState (CORRECT/BROKEN) и ReadinessState (ACCEPTING_TRAFFIC/REFUSING_TRAFFIC). Группы /actuator/health/liveness и /actuator/health/readiness включаются автоматически в Kubernetes (или management.endpoint.health.probes.enabled=true). В readiness можно добавить индикаторы: management.endpoint.health.group.readiness.include=readinessState,db.

При остановке Spring Boot переводит readiness в REFUSING_TRAFFIC и ждёт завершения запросов (server.shutdown=graceful).

Что хотят услышать

  • Разница последствий: перезапуск против исключения из балансировки.
  • Почему liveness не проверяет зависимости.
  • Эндпоинты Spring Boot и группы.

Частые ошибки

  • Включать базу в liveness.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Liveness — жив ли процесс (иначе рестарт); readiness — готов ли к трафику
  • ✗Liveness решает, пускать ли трафик, а readiness — перезапускать ли под
  • ✗Это одно и то же
  • ✗Readiness перезапускает контейнер при провале

Что спросят дальше

  • Что даёт Spring Boot Actuator?
  • Какие метрики важны для readiness?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования