Який шаблон обшивки використовується Hystrix?


104

Hystrix, API Netflix для затримки та відмовостійкості в складних розподілених системах використовує техніку Bulkhead Pattern для ізоляції ниток. Може хтось, будь ласка, детальніше розробив це.

Відповіді:


193

Загальні

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

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

Я думаю, що об'ємний зразок був популяризований книжкою « Випустіть! Майкл Т. Нігард.

Що вирішує Hystrix

Реалізація основних даних у 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 - це зовсім інша річ. Вони виявляють, коли служба перебуває у нездоровому стані, і переводить абонентів у стан "невдалого виходу з ладу", коли вони не викликають нездорову службу, але натомість повертають код помилки, поки послуга знову не буде нормальною. Це дозволяє уникнути перевантаження нездорового сервісу, щоб він міг відновитись, а також запобігає каскадним збоям, оскільки абоненти не уповільнені.
K Ерландссон

1

Ось хороший приклад з поясненням часу для виконання роботи в Resilience4j, який надихає Netflix Hystrix.

Нижче прикладу конфігурації можуть дати деяку чіткість використання.

Приклад конфігурації: Дозволити максимум 5 одночасних дзвінків у будь-який момент часу. Нехай інші дзвінки чекають, поки завершиться один із 5-ти поточних процедур або до 2 секунд.

Ідея - не обтяжувати будь-яку систему навантаженням більше, ніж вони можуть споживати. Якщо навантаження, що надходить, перевищує споживання, тоді чекайте розумного часу або просто таймауту та йдіть на альтернативний шлях.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.