Devs Hive
Повернутися до всіх запитань

Що таке Circuit Breaker?

SeniorMicroservicesSystem design
Зустрічали на інтервʼю:0 користувачів

Одне з тих запитань, за яким визначають, чи працювали ви з складними системами. Найперше, що треба розуміти - Circuit Breaker це патерн, який зупиняє спроби системи виконати операцію, яка, скоріше за все, завершиться невдачею. Це, в свою чергу, збереже ресурси і зупинить безкінечний потік однакових логів.

Приклад використання

В нас є сервіс А, який робить запит в сервіс B. Він, своєю чергою, викликає стороннє API і зберігає щось в базу даних. Circuit Breaker може виступити в якості проксі між сервісами А і B. Цей проксі буде працювати за принципом запобіжника і в разі виникнення критичної для сервісу помилки зможе перекрити трафік до B. Умови, за яких буде спрацьовувати запобіжник, можуть бути різні. Найбільш розповсюджений варіант - це поріг у кількості помилок певного типу (наприклад, 500/502 кодів) в конкретний момент часу (наприклад, 60 секунд).

Після цього він буде перевіряти, чи проблема була виправлена, і коли сервіс знову запрацює, відновить трафік до нього. Технічно, Circuit Breaker має декілька станів, де він визначає, що робити з запитами до сервісу.

Closed

Цей стан означає, що з сервісом все добре і запити потрапляють куди потрібно. У випадку появи критичних помилок він починає рахувати їх, і якщо їхня кількість перетинає заданий поріг, проксі переходить в стан Open. Окрім цього, запускається таймер очікування, який після закінчення переходить в стан Half-Open, де відбувається перевірка життєздатності сервісу.

Open

В цьому стані, Circuit Breaker не буде направляти запити до сервісу. Замість цього він буде повертати помилку або fallback. Тут все залежить від реалізації, але суть цього стану - це не пропустити трафік до сервісу.

Half-Open

В цьому стані ми пропускаємо обмежену кількість запитів до сервісу. Якщо всі вони завершуються успішно, ми переводимо Circuit Breaker в стан Closed і відновлюємо трафік до сервісу. Якщо хоча б один запит завершився з помилкою, ми переводимо стан в Open і перезапускаємо таймер.

Зустрічав на інтервʼю?

Коментарі (0)

Увійдіть, щоб залишити коментар

Поки що немає коментарів. Будьте першим!