Паттерн булкхед берёт своё название от водонепроницаемых отсеков в корпусе корабля — если один отсек затопится, остальные останутся в целости и сохранности. Применительно к распределённым системам он изолирует компоненты, так чтобы отказ одного компонента не привёл к каскадному отказу всей системы.
Когда нижестоящий сервис становится медленным или не отвечает, он обычно потребляет общие ресурсы — треды или соединения. Без булкхедов исчерпание ресурсов распространяется на всё приложение. Разделяя ресурсы по зависимостям, ты держишь отказы в границах отведённого для них пространства.
Service A → Thread Pool A (10 threads) → Dependency A
Service B → Thread Pool B (10 threads) → Dependency B
Если Dependency A зависнет и исчерпает свои 10 тредов, Dependency B останется совершенно не затронута.
Паттерн булкхед меняет некоторую эффективность использования ресурсов на значительно улучшенную изоляцию отказов. Ключевое решение — насколько детально разбивать ресурсы на части — слишком грубое разбиение, и отказы всё ещё распространяются; слишком тонкое, и эффективность использования ресурсов падает. Правильный баланс зависит от критичности и характера отказов каждой зависимости.
Паттерн bulkhead предотвращает каскадные отказы, разделяя ресурсы для каждой зависимости, что гарантирует, что исчерпание ресурсов в одном сервисе не может распространиться на другие сервисы, использующие один и тот же пул ресурсов.
Новый — ещё не проверен сообществом
Вы