Відповіді:
Взагалі, мета схеми оббивки - уникнути помилок в одній частині системи, щоб зняти всю систему. Термін походить від кораблів, де корабель розділений на окремі водонепроникні відсіки, щоб уникнути одного порушення корпусу, що затопить весь корабель; це затопить лише одну перегородку.
Реалізація схеми перегородки може приймати різні форми залежно від того, від яких несправностей ви хочете захистити систему. У цій відповіді я лише обговорюватиму тип несправностей, що вирішуються Hystrix.
Я думаю, що об'ємний зразок був популяризований книжкою « Випустіть! Майкл Т. Нігард.
Реалізація основних даних у 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 секунд.
Ідея - не обтяжувати будь-яку систему навантаженням більше, ніж вони можуть споживати. Якщо навантаження, що надходить, перевищує споживання, тоді чекайте розумного часу або просто таймауту та йдіть на альтернативний шлях.