Получить доступ

Сервис зависит от внешнего платёжного API. Стоит ли включать проверку его доступности в readiness-пробу?

MiddleSpring Boot и ActuatorSpring Boot
Ещё спрашивают так:
  • Включать ли внешний API в health-проверку?
Коротко

Нет: readiness отражает готовность самого пода. Если внешний API упал, все поды станут неготовыми, сервис пропадёт целиком — даже функции, не связанные с оплатой.

  • Внешнюю зависимость защищают таймаутом, circuit breaker и деградацией
  • В readiness — только то, без чего под не может обслужить ничего
  • Состояние зависимостей — в отдельной группе health для мониторинга

А ещё Тем более не в liveness — будут бесконечные перезапуски

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Логика такая: readiness управляет тем, идёт ли на под трафик. Если в неё включить внешнюю зависимость, то при её падении все поды одновременно объявят себя неготовыми — балансировщик уберёт их из ротации, и даже те запросы, которым платёжный API не нужен, перестанут обслуживаться. Полный отказ вместо частичной деградации. Правильный подход: в readiness — только то, без чего под не может работать вообще (например, инициализация и собственная база), а состояние внешних зависимостей выносят в отдельный health group для наблюдения и защищают circuit breaker с деградацией. Тем более нельзя ставить внешние проверки в liveness — там это приведёт к бесконечным перезапускам контейнера.

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

  • Ответ и каскадный эффект.
  • Что включать в readiness.
  • Как защищаться от внешней зависимости.

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

  • Включать все зависимости в readiness «для полноты картины».
  • Проверять внешние сервисы в liveness и получать циклические рестарты.

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

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

Показать варианты и ответ
  • ✓Обычно нет: недоступность чужого сервиса выведет ваши поды из ротации и превратит частичный сбой в полный отказ
  • ✗Да, обязательно: readiness должна отражать работоспособность всех зависимостей
  • ✗Да, но только если внешний API отвечает быстрее 100 мс
  • ✗Разницы нет — readiness и liveness проверяют одно и то же

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

  • Как настроить отдельную health group для наблюдения?
  • Что произойдёт при добавлении внешней проверки в liveness?

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем