Что такое шаблон перегородки, используемый Hystrix?

104

Hystrix, API Netflix для задержки и отказоустойчивости в сложных распределенных системах, использует технику Bulkhead Pattern для изоляции потоков. Может кто-нибудь, пожалуйста, подробнее об этом.

Сашанк
источник

Ответы:

193

Общее

В общем, цель схемы переборок - избежать сбоев в одной части системы и вывести из строя всю систему. Термин происходит от судов, на которых судно разделено на отдельные водонепроницаемые отсеки, чтобы избежать единственного повреждения корпуса и затопления всего судна; он затопит только одну переборку.

Реализации шаблона переборки могут принимать разные формы в зависимости от того, от каких сбоев вы хотите защитить систему. В этом ответе я буду обсуждать только тип неисправностей, которые обрабатывает Hystrix.

Я думаю, что образец переборки был популяризирован книгой Release It! Майкла Т. Найгарда.

Что решает Гистрикс

Реализация переборки в Hystrix ограничивает количество одновременных вызовов компонента . Таким образом, количество ресурсов (обычно потоков), ожидающих ответа от компонента, ограничено.

Предположим , у вас есть запрос на основе, мульти многопоточных приложений (например , типичный веб - приложений) , который использует три различных компонентов, A , B и C . Если запросы к компоненту C начинает зависать, в конце концов всех обработки запроса потоки будут висеть на ожидание ответа от C . Это сделало бы приложение полностью невосприимчивым. Если запросы к C обрабатываются медленно, у нас возникает аналогичная проблема, если нагрузка достаточно высока.

Реализация Hystrix шаблона переборки ограничивает количество одновременных вызовов компонента и в этом случае сохранила бы приложение. Предположим , что мы имеем 30 обработки запроса темы , и есть ограничение на 10 одновременных вызовов к C . Затем в большинстве 10 запросов обработки потоков могут зависать при вызове C , остальные 20 нитей все еще могут обрабатывать запросы и использовать компоненты A и B .

Подходы Hystrix

Hystrix предлагает два разных подхода к переборке: изоляция потоков и изоляция семафоров.

Изоляция резьбы

Стандартный подход заключается в передаче всех запросов к компоненту C в отдельный пул потоков с фиксированным числом потоков и без очереди запросов (или с небольшой).

Изоляция семафоров

Другой подход заключается , чтобы иметь все абоненты получают разрешение (с 0 тайм - аут) , прежде чем запросы к C . Если разрешение не может быть получено из семафора, вызовы C не проходят.

Отличия

Преимущество подхода с использованием пула потоков состоит в том, что запросы, передаваемые на C, могут иметь тайм-аут, что невозможно при использовании семафоров.

К. Эрландссон
источник
10
В качестве дополнения, в оригинальной вики Hystrix теперь есть подробное описание обоих подходов: github.com/Netflix/Hystrix/wiki/How-it-Works
Дмитрий
1
в чем разница между автоматическим выключателем и переборкой?
voipp
4
Автоматические выключатели @voipp - совсем другое дело. Они обнаруживают, когда служба находится в неработоспособном состоянии, и переводят вызывающих абонентов в состояние «быстрого сбоя», когда они не вызывают неисправную службу, а вместо этого возвращают код ошибки до тех пор, пока служба снова не станет исправной. Это позволяет избежать перегрузки неработоспособной службы, чтобы она могла восстановиться, и предотвращает каскадные сбои, поскольку вызывающие абоненты не замедляются.
К Эрландссон
1

Вот хороший пример с объяснением среды выполнения для переборки в Resilience4j, вдохновленной Netflix Hystrix.

Ниже приведены примеры конфигураций, которые могут дать некоторую ясность в использовании.

Примеры конфигураций: разрешить максимум 5 одновременных вызовов в любой момент времени. Удерживайте другие вызовы в ожидании, пока не завершится один из 5 одновременных вызовов в процессе или не более 2 секунд.

Идея состоит в том, чтобы не перегружать любую систему нагрузкой, превышающей ее возможности. Если входящая нагрузка превышает потребление, подождите разумное время или просто таймаут и перейдите по альтернативному пути.

Рави К
источник