Hystrix, API Netflix для задержки и отказоустойчивости в сложных распределенных системах, использует технику Bulkhead Pattern для изоляции потоков. Может кто-нибудь, пожалуйста, подробнее об этом.
Ответы:
В общем, цель схемы переборок - избежать сбоев в одной части системы и вывести из строя всю систему. Термин происходит от судов, на которых судно разделено на отдельные водонепроницаемые отсеки, чтобы избежать единственного повреждения корпуса и затопления всего судна; он затопит только одну переборку.
Реализации шаблона переборки могут принимать разные формы в зависимости от того, от каких сбоев вы хотите защитить систему. В этом ответе я буду обсуждать только тип неисправностей, которые обрабатывает Hystrix.
Я думаю, что образец переборки был популяризирован книгой Release It! Майкла Т. Найгарда.
Реализация переборки в Hystrix ограничивает количество одновременных вызовов компонента . Таким образом, количество ресурсов (обычно потоков), ожидающих ответа от компонента, ограничено.
Предположим , у вас есть запрос на основе, мульти многопоточных приложений (например , типичный веб - приложений) , который использует три различных компонентов, A , B и C . Если запросы к компоненту C начинает зависать, в конце концов всех обработки запроса потоки будут висеть на ожидание ответа от C . Это сделало бы приложение полностью невосприимчивым. Если запросы к C обрабатываются медленно, у нас возникает аналогичная проблема, если нагрузка достаточно высока.
Реализация Hystrix шаблона переборки ограничивает количество одновременных вызовов компонента и в этом случае сохранила бы приложение. Предположим , что мы имеем 30 обработки запроса темы , и есть ограничение на 10 одновременных вызовов к C . Затем в большинстве 10 запросов обработки потоков могут зависать при вызове C , остальные 20 нитей все еще могут обрабатывать запросы и использовать компоненты A и B .
Hystrix предлагает два разных подхода к переборке: изоляция потоков и изоляция семафоров.
Стандартный подход заключается в передаче всех запросов к компоненту C в отдельный пул потоков с фиксированным числом потоков и без очереди запросов (или с небольшой).
Другой подход заключается , чтобы иметь все абоненты получают разрешение (с 0 тайм - аут) , прежде чем запросы к C . Если разрешение не может быть получено из семафора, вызовы C не проходят.
Преимущество подхода с использованием пула потоков состоит в том, что запросы, передаваемые на C, могут иметь тайм-аут, что невозможно при использовании семафоров.
Вот хороший пример с объяснением среды выполнения для переборки в Resilience4j, вдохновленной Netflix Hystrix.
Ниже приведены примеры конфигураций, которые могут дать некоторую ясность в использовании.
Примеры конфигураций: разрешить максимум 5 одновременных вызовов в любой момент времени. Удерживайте другие вызовы в ожидании, пока не завершится один из 5 одновременных вызовов в процессе или не более 2 секунд.
Идея состоит в том, чтобы не перегружать любую систему нагрузкой, превышающей ее возможности. Если входящая нагрузка превышает потребление, подождите разумное время или просто таймаут и перейдите по альтернативному пути.