Bulkhead pattern
2019-08-27 14:51:12 +0600 +0600
Bulkhead pattern
Шаблон Bulkhead
Шаблон Bulkhead - это тип разработки приложения, терпимого к сбоям. В архитектуре элементы приложения изолированы в пулы, поэтому в случае сбоя одного из них другие будут продолжать функционировать. Он назван Bulkhead – в честь секционных перегородок корпуса корабля. Если корпус судна находится под угрозой, только поврежденная секция наполняется водой, что препятствует затоплению корабля.
Проблема
Облачное приложение может включать в себя несколько сервисов, причем каждый сервис имеет одного или нескольких потребителей. Чрезмерная нагрузка или сбой в обслуживании будут влиять на всех потребителей услуги. Кроме того, потребитель может отправлять запросы нескольким службам одновременно, используя ресурсы для каждого запроса. Когда потребитель отправляет запрос в службу, которая неправильно настроена или не отвечает, то ресурсы, используемые запросом клиента, могут быть не освобождены своевременно.
Решение
Разделите экземпляры службы на разные группы (можно, например, по зонам раскидать инстансы сервиса), основываясь на потребности потребителей и доступности. Такая конструкция помогает изолировать сбои и позволяет поддерживать функциональность сервиса для некоторых потребителей даже во время сбоя. Потребитель, также, может разделять ресурсы, чтобы те из них, которые используются для вызова одной службы, не влияли на ресурсы, используемые для вызова другой службы. Например, потребителю, который вызывает несколько служб, может быть назначен пул соединений для каждой службы. Пусть у нас есть сервис, который работает с тремя разными дата-провайдерами. Каждому провайдеру назначаем свою базу и свой пул соединений. В случае, если один дата-провайдер поломается, другие не будут затронуты.
когда использовать
- Изолируйте ресурсы, используемые для внутренних служб, особенно, если приложение может обеспечить некоторый уровень функциональности, даже, если одна из служб не отвечает.
- Изолировать критически важных потребителей от обычных потребителей.
- Если надо защитить систему от каскадных падений.
когда не использовать
- Когда ресурсов свободных мало или нет
https://docs.microsoft.com/en-us/azure/architecture/patterns/bulkhead https://aws.amazon.com/ru/blogs/architecture/category/uncategorized/fault-isolation/