ПРИНЦИПИ ХАОС-ІНЖИНІРИНГУ
Останнє оновлення: травень 2018 року
Хаос-інжиніринг - це дисципліна з експериментування на розподіленій системі, щоб підвищити довіру до можливостей системи витримати бурхливі умови реальної експлуатації.
Швидке розповсюдження та прогрес у великих, розподілених програмних системах змінює правила гри у сфері розробки програмного забезпечення. Як індустрія, ми охоче приймаємо практики, що підвищують гнучкість розробки та швидкість розгортання. Проте не дивлячись на всі переваги сучасних підходів до розробки програмного забезпечення, виникає одне питання - наскільки ми впевнені в складних системах, які ми вводимо в експлуатацію?
Навіть коли всі окремі сервіси у розподіленій системі функціонують належним чином, взаємодія між цими сервісами може призвести до непередбачуваних результатів. Ці непередбачувані результати у поєднанні з рідкісними, але руйнівними реальними подіями в експлуатаційному середовищі, роблять ці розподілені системи за своєю суттю хаотичними.
Потрібно ідентифікувати слабкі сторони, перш ніж вони проявлять себе в некоректній загальносистемній поведінці. Системні слабкі сторони можуть приймати форму: неправильних налаштувань резервування в разі недоступності сервісу; навали повторних запитів через неправильно налаштовані тайм-аути; відмови в обслуговуванні, коли залежний сервіс “нижче за течією” (downstream dependency) отримує забагато трафіку; каскадні відмови в результаті збою в єдиній точці відмови (single point of failure); тощо. Ми повинні заздалегідь адресувати найбільш істотні слабкі сторони, перш ніж вони вплинуть на користувачів наших систем. Нам потрібний спосіб керувати хаосом, що властивий цим системам. Ми маємо скористатися перевагами гнучкості та швидкості розробки, та довіряти системам в умовах реальної експлуатації, незважаючи на складність, яку вони представляють.
Емпіричний, системний підхід розглядає хаос у розподілених системах у масштабі та підвищує впевненість в здатності цих систем витримувати реалістичні умови. Ми дізнаємося про поведінку розподіленої системи, спостерігаючи за нею під час контрольованого експерименту. Ми називаємо це Хаос-інжиніринг.
ХАОС НА ПРАКТИЦІ
Для того щоб адресувати саме невизначеність розподілених систем в масштабі, Хаос-інжиніринг призначений для полегшення експериментів з метою виявлення системних недоліків. Ці експерименти складаються з чотирьох етапів:
- Почніть з визначення “стабільного стану” як певного вимірюваного вихідного стану системи, що вказує на нормальну її поведінку.
- Висуніть гіпотезу, що “стабільний стан” має виконуватись як для контрольної, так і для експериментальної групи.
- Введіть змінні, що відображають реальні події, такі як сервери, що виходять з ладу; несправні жорсткі диски; розриви з’єднання з мережею, тощо
- Спробуйте спростувати гіпотезу, шукаючи різницю в “стабільному стані” між контрольною та експериментальною групами.
Чим важче порушити стабільний стан, тим більша впевненість у поведінці системи. Якщо слабкість розкрито, ми маємо ціль для поліпшення, перш ніж ця поведінка проявляється в системі в цілому.
РОЗШИРЕНІ ПРИНЦИПИ
Наступні принципи описують ідеальне застосування Хаос-інжинірингу, в межах описаних вище експериментальних процесів. Ступінь, до якої ці принципи дотримуються, чітко співвідноситься з впевненістю, яку ми повинні мати у масштабній розподіленій системі.
Побудуйте гіпотезу щодо поведінки у стабільному стані
Сфокусуйтеся на вимірюваному виводі системи, а не на внутрішніх атрибутах системи. Вимірювання виводу, за короткий проміжок час, являє собою індикацію стабільного стану системи. Загальна пропускна спроможність системи, коефіцієнти помилок, проценти затримки та тощо, можуть бути показниками, що говорять про стабільну поведінку. Фокусуючись на шаблонах поведінки системи під час експериментів, Хаос перевіряє, чи система працює, а не як вона працює.
Варіюйте реальні події
Змінні Хаосу відображають реальні події. Виставіть пріоритет подіям за потенційним впливом або за очікуваною частотою. Розгляньте події, які відповідають апаратним збоям, таким як вихід з ладу серверів; програмним збоям, таким як некоректні відповіді, а також подіям, що не є збоями, як-от збільшення трафіку або масштабування системи. Будь-яка подія, здатна порушити стабільний стан, є потенційною змінною в експерименті з Хаосу.
Робіть експерименти в реальному середовищі
Системи поводяться по-різному в залежності від середовища та трафіку. Оскільки рівень утилізації системи може змінюватись в будь-який час, використання реального трафіку єдиний шлях надійно простежити шлях проходження запиту. Щоб гарантувати достовірність того як система піддається експерименту, а також відповідність поточній системі в експлуатації, Хаос чітко віддає перевагу експериментам з реальним трафіком.
Автоматизуйте безперервне виконання експериментів
Проведення експериментів вручну є трудомістким та у кінцевому підсумку нестійким. Автоматизуйте експерименти та виконуйте їх безперервно. Хаос-інжиніринг вбудовує автоматизацію в саму систему для керування як оркеструванням, так і аналізом.
Мінімізуйте зону ураження
Експериментування в реальному середовищі може спричинити непотрібні негативні наслідки та проблеми для клієнтів. Незважаючи на те, що має бути дозвіл на короткострокові негативні наслідки, це є відповідальність та зобов’язання Хаос-інженера упевнитись в тому, що збої від експериментів зведені до мінімуму та контрольовані.
Хаос-інжиніринг - це потужна практика, яка вже змінює дизайн та підхід до розробки програмного забезпечення на деяких найбільших у світі підприємствах. Там, де інші методи розглядають швидкість та гнучкість, Хаос займається конкретно невизначеністю у розподілених системах. Принципи Хаосу забезпечують впевненість у швидкому впровадженні нововведень у величезних масштабах та надають клієнтам високоякісний досвід, який вони заслуговують.
Приєднуйтесь до дискусії про принципи Хаосу та їх застосування в Google-групі Chaos Community.