English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

гість
1 / ?
назад до уроків

Що вирішує SRE [BLOCK_TYPE SECTION/STEP]

Ласкаво просимо до Site Reliability Engineering
[BLOCK_TYPE SECTION/STEP]

Site Reliability Engineering (SRE) зародилася в Google у 2003 році. Бен Трейнор Слосс очолив невелику операційну команду та перебудував її так, ніби виробництвом керують інженери, а не люди-пейджери. Результат став стандартною моделлю для запуску великих інтернет-сервісів. [BLOCK_TYPE SECTION/STEP]

Традиційні операційні команди підтримували роботу сервісів за допомогою ручної праці: перезапустити цей сервер, сповістити того інженера, написати runbook, сподіватися, що все спрацює. Така модель ламається при масштабуванні. Команда з п’ятдесяти операторів не може вручну перезапускати п’ять тисяч серверів. Після певного розміру ручні операції стають податком, який поглинає кожну продуктивну годину. [BLOCK_TYPE SECTION/STEP]

SRE перевертає модель. Замість того, щоб наймати більше операторів при зростанні систем, SRE наймає програмних інженерів і каже їм: напишіть код, який виконуватиме операційну роботу за вас. Ваша робота кваліфікується як програмна інженерія, застосована до операційних проблем. Ваш результат: автоматизація, моніторинг та інженерна надійність, а не ручні втручання.

Три основоположні ідеї лежать в основі практики SRE:

- Цілі рівня обслуговування (SLOs): числові цілі надійності, узгоджені заздалегідь

- Бюджети помилок: величина, обернена до SLO, яку витрачають на ризик

- Усунення toil: будь-яка операційна робота, що масштабується лінійно зі зростанням системи, має зникнути

Ці три ідеї пронизують усі практики SRE: постмортеми, чергування on-call, планування ємності, моніторинг і реліз-інженерію.

SRE: Software engineering applied to operations

Традиційні Ops проти SRE

Чому традиційні Ops не справляються на масштабі

Типова команда ops зростає лінійно разом із системами, якими вона керує. Подвоїти кількість серверів — подвоїти кількість операторів. Це має фінансовий сенс для невеликих розгортань і катастрофічний — у масштабі: неможливо найняти достатньо людей, щоб вирішити квадратичну проблему.

SRE обмежує операційну роботу п’ятдесятьма відсотками робочого часу інженера. Інша половина має йти на інженерію: створення інструментів, автоматизацію процесів, усунення toil, який і довів частку операційної роботи до п’ятдесяти відсотків. Якщо toil перевищує п’ятдесят відсотків надто довго, команда мусить повернути частину роботи команді розробки або найняти більше SRE. Правило п’ятдесяти відсотків запобігає перетворенню SRE-команди на традиційну ops-команду під постійним тиском.

Порівняємо сценарії збоїв:

- Традиційна ops: більше інцидентів → більше ручних відповідей → менше часу на профілактику → більше інцидентів. Петля загибелі.

- SRE: більше інцидентів → постмортеми → можливості для автоматизації → скорочення часу реагування на наступний інцидент. Доброчесна петля, коли все працює.

Невеликий стартап має двох ops-інженерів і сорок серверів. Розгортання виконують через SSH на кожен сервер, витягують останній код і перезапускають сервіси. Розгортання триває три години. Стартап готується прийняти клієнта, який потроїть кількість серверів. Чому SRE-лідер вважатиме поточний процес розгортання нестійким і що саме потрібно змінити до приходу клієнта?

SLI, SLO, SLA

Три літери, які керують продакшеном

Надійність без вимірювання — це театр. SRE перетворює надійність на число, узгоджене заздалегідь, яке кожен може перевірити.


Індикатор рівня обслуговування (SLI): вимірювання поведінки сервісу. Приклади: затримка запитів, частота помилок, пропускна здатність, глибина черги. SLI — це те, що можна відобразити на графіку.


Ціль рівня обслуговування (SLO): цільове значення або діапазон для SLI. Приклад: «99,9 % HTTP-запитів успішні за ковзний 28-денний період». SLO — це обіцянка, яку ви даєте собі та користувачам щодо прийнятної якості сервісу.


Угода про рівень обслуговування (SLA): договірне зобов’язання, зазвичай із фінансовими штрафами за порушення. Приклад: «Ми повертаємо 10 %, якщо місячна доступність падає нижче 99,9 %». SLA — це обіцянка, яку захищають юристи.


Критична відмінність: ваша SLA завжди має бути м’якшою за SLO. Якщо ви внутрішньо цільуєте 99,9 %, а зовні укладаєте договір на 99,9 %, у вас нульовий запас. SRE зазвичай встановлюють SLO на один дев’яток жорсткіше за SLA: ціль 99,95 %, договір 99,9 %. Цей зазор поглинає неминучий «поганий тиждень».

Ієрархія SLI, SLO, SLA

Бюджети помилок: Зворотне SLO

Від цілей надійності до інженерних рішень

SLO задає ціль надійності. Бюджет помилок — це те, що залишилось: кількість відмов, яку можна витратити, перш ніж не досягти цілі.

Якщо ваше SLO обіцяє 99.9% успішних запитів за 28 днів, ваш бюджет помилок становить 0.1% запитів, або приблизно 40 хвилин повного простою на місяць. Цей бюджет можна витрачати як завгодно: на планові релізи, експериментальні функції, chaos engineering або толерантність до нестабільної залежності.

Бюджети помилок змінюють конфлікт dev vs ops. Без бюджету кожна аварія призводить до суперечок про те, хто випустив погану зміну та як запобігти наступній. З бюджетом:

- Бюджет є: відправляйте швидше, ризикуйте більше, проводьте експерименти. Бюджет це оплачує.

- Бюджет вичерпано: припиніть запуск нових функцій, заморозьте ризиковані зміни, зосередьтеся на роботі з надійністю, доки бюджет не відновиться.

Це перетворює надійність з емоційної суперечки на вимірюваний ресурс. Інженери можуть свідомо витрачати бюджет, як будь-який інший виробничий ресурс.

Бюджет помилок з часом: цільовий, фактичний, вичерпання

Команда запускає API оформлення замовлень із SLO 99.95% за 28 днів. Продакт-менеджер хоче випустити нову функцію цього тижня, яку команда оцінює як таку, що внесе 0.05% помилок протягом двох тижнів, поки вона стабілізується. Розберіть, чи варто запускати функцію, використовуючи міркування щодо бюджету помилок. Що змінило б вашу відповідь, якби команда вже витратила 80% бюджету помилок цього місяця?

Визначення Toil

Що вважається Toil

Не кожне операційне завдання кваліфікується як toil. SRE визначає toil точно: робота, яка є ручною, повторюваною, автоматизованою, тактичною, позбавленою тривалої цінності та масштабується лінійно зі зростанням сервісу.

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

Приклади, які кваліфікуються як toil:

- Ручний перезапуск сервісу після крашу через витік пам’яті

- Вставлення фрагментів логів у чат-канал під час розбору інциденту

- Заповнення форми тікета для надання нової бази даних

- Ручне формування щоквартального звіту про потужності

- Поодиноке схвалення рутинних запитів на розгортання

Правило п’ятдесяти відсотків обмежує частку toil половиною робочого часу SRE. Якщо toil перевищує 50 %, команда має повернути відповідальність продуктовій команді або найняти додаткових інженерів, але мета залишається незмінною: звести toil до нуля, замінивши його інженерними системами, які виконують ту саму роботу без участі людини.

Автоматизація не просто економить час. Вона повністю усуває певний клас людських помилок. Скрипт, що розгортає базу даних, не пропустить кроків після довгої зміни.

Характеристики toil: чек-лист із 6 властивостей

Обґрунтування аудиту toil

Ваша команда відстежує, як витрачається її час. Минулого кварталу розподіл був таким: 30 % — розгортання, 25 % — реагування на інциденти, 20 % — робота з потужностями, 15 % — розробка функцій, 10 % — разові запити від продуктових команд.

Проведіть аудит кожної з п’яти категорій: які з них, імовірно, належать до toil і чому? Для найбільшої категорії toil запропонуйте конкретний інженерний проєкт, який міг би скоротити її вдвічі протягом кварталу.

Гігієна чергування

Інженери, а не пейджери

On-call несе реальну ціну. Сон порушується, вихідні перериваються, а стрес від невідомих проблем накопичується. SRE розглядає on-call як обмежений ресурс, який має залишатися стійким, а не як героїчний тягар для тих, кому найбільше не байдуже.

Здорові чергування on-call дотримуються кількох принципів:

- Компенсований час: години чергування конвертуються в відгули, доплату або іншу еквівалентну вигоду. Безкоштовний on-call призводить до вигорання команди.

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

- Бюджет на виклики: SRE-книга Google рекомендує максимум два виклики за дванадцятигодинну зміну. Якщо цей ліміт перевищено, команда має інвестувати інженерний час у зменшення кількості алертів, а не просто терпіти їх.

- Лише actionable-алерти: кожна сторінка має вимагати втручання людини. Якщо алерт ігнорують, автоматизують або він спрацьовує регулярно під час нормальної роботи — він не повинен існувати. Алертна втома є дефектом надійності.

- Follow-the-sun передача черг: глобально розподілені команди передають зміни на межах часових зон, щоб ніхто не отримував виклики о 3-й ночі, якщо система справді не може чекати до ранку.

Здорова ротація on-call: команда з 6 осіб, follow-the-sun структура

Blameless Postmortems

Як інциденти перетворюються на покращення

Кожен значний інцидент супроводжується постмортемом: письмовим аналізом того, що сталося, чому це сталося, що це виправило та які зміни запобігають повторенню. Постмортем — це SRE-еквівалент складного відсотка: кожен із них додає постійну надійність системі.

Без звинувачень означає, що документ приписує збої системам і процесам, а не окремим особам. Якщо інженер виконав неправильну команду, постмортем запитує: чому система дозволила цю команду? Чому жоден захист не виявив її? Яка зміна системи, документації чи інструментів запобігла б наступному інженеру зробити ту саму помилку?

Беззвинувачувальна культура існує з однієї причини: люди приховують помилки, коли бояться покарання. Приховані помилки стають наступним інцидентом. Вартість беззвинувачувальної культури є низькою порівняно з вартістю накопичення нерозкритих дефектів.

Постмортеми зазвичай охоплюють:

- Підсумок: одноабзацний опис інциденту та його впливу

- Хронологія: покрокова реконструкція з мітками часу

- Аналіз кореневих причин: технічні та процесні фактори, що дозволили виникнення збою

- Виявлення: як команда дізналася про інцидент і скільки часу це зайняло

- Усунення: дії, вжиті для відновлення сервісу

- Висновки: що спрацювало, а що — ні

- Пункти дій: конкретні, закріплені за відповідальними та обмежені в часі інженерні завдання

Пункти дій зберігаються в трекері. Вони пріоритезуються як будь-яка інша інженерна робота. Постмортеми без пунктів дій зводяться до розповіді. Робота нічого не змінює.

Структура постмортему: 7 стандартних розділів

Інженер запустив скрипт міграції бази даних у продакшені, який мав виконуватися в стейджингу. Міграція заблокувала таблиці на 45 хвилин, спричинивши часткову недоступність. Напишіть перші три пункти дій, які ви б включили в безвинний постмортем. Кожен має бути конкретним, закріпленим за відповідальним і спрямованим на усунення системної причини, а не помилки інженера.

Чотири золоті сигнали

Що має вимірювати кожен сервіс

Книга Google SRE пропонує чотири сигнали, які має експонувати кожна сервісна служба, що взаємодіє з користувачами: затримка, трафік, помилки та насиченість. Разом вони описують стан служби з точки зору користувача. Моніторинг з меншою кількістю сигналів залишає «сліпі зони»; моніторинг із сотнями метрик перевантажує команду «втомою від алертів».


Затримка: скільки часу займають запити. Відстежуйте розподіли, а не середні значення. p50 (медіана) описує типовий досвід. p99 описує найгірший 1 % користувачів. Середнє значення приховує довгі «хвости»: служба з медіаною 50 мс і p99 5 000 мс виглядає нормально за середнім показником, але псує досвід одному користувачеві зі ста.


Трафік: навантаження на службу. Для веб-сервісу це запити за секунду. Для потокового сервісу — одночасні з’єднання. Для пакетного завдання — оброблені елементи за хвилину. Трафік корелює з рішеннями щодо ємності та виявляє аномалії навантаження.


Помилки: частота невдалих запитів. До них належать явні помилки (HTTP 500), неявні помилки (HTTP 200 з пошкодженими даними) та порушення політики (відповідь занадто повільна для SLO). Важливо розрізняти ці типи: відповідь 200 з некоректним payload часто шкодить користувачам більше, ніж чесна 500.


Насиченість: наскільки завантажена система. Використання CPU, глибина черги, тиск пам’яті, заповненість пулу з’єднань. Насиченість передбачає майбутню затримку: система на 95% CPU має дуже мало запасу, перш ніж затримка для користувачів різко зросте.


Більшість сповіщень SRE базуються на цих чотирьох сигналах. Сповіщення за симптомами (сповіщення, коли користувачі помітять проблему) ефективніші за сповіщення за причинами (сповіщення, коли CPU перевищує 80%). Чотири золоті сигнали описують симптоми.

Чотири золоті сигнали: затримка, трафік, помилки, насиченість

Кар’єрні шляхи SRE

Де навички SRE оплачуються

Кар’єра SRE розгалужується залежно від того, яка частина дисципліни інженеру подобається найбільше:


SRE інфраструктури: будує платформи, на яких працюють інші команди. Kubernetes, service mesh, внутрішня хмара. Глибока системна інженерія, теорія розподілених систем і проєктування платформ. Дуже добре оплачується у великих компаніях, бо робота масштабується: один SRE інфраструктури підтримує сотні продуктових інженерів.


Embedded SRE: працює разом із продуктовою командою інженерів, щоб підвищити надійність конкретного сервісу. Наполовину інженер, наполовину коуч. Сильні комунікаційні навички та навички code review важливі так само, як і технічна глибина. Часто найкращий шлях для інженерів, які люблять викладати.


Інструменти надійності: будує стек observability: моніторинг, алерти, дашборди, інструменти для постмортемів, платформи управління інцидентами. Велика робота з фронтендом і data engineering. Результатами користуються всі інші команди.


Production engineering: термін Facebook/Meta для SRE, що фокусується на capacity, розгортанні та управлінні трафіком. Глибока робота з мережами та системами.


Технічні сертифікації, які варто мати: Google Cloud Professional Cloud Architect, AWS Solutions Architect Professional та сертифікації CNCF (Kubernetes Administrator, Kubernetes Application Developer) свідчать про знання cloud-native технологій. Сертифікації Linux Foundation демонструють глибину знань у системах. Жодна з цих сертифікацій не замінить портфоліо, але вони допомагають пройти первинний відбір рекрутерів.

Кар’єрні треки SRE: 4 шляхи

З концепцій SRE, які ви вивчили в цьому уроці (SLO, бюджети помилок, усунення toil, безвинні постмортеми, чотири золоті сигнали), виберіть одну, яку ви впровадили б першою в стартапі, де їх немає. Обґрунтуйте послідовність: чому саме цю концепцію перед іншими, і який конкретний перший крок ви зробите протягом першого місяця?

Підсумок

Що ви тепер знаєте

Інженерія надійності сайтів виникла як відповідь Google на проблему масштабування і перетворилася на дисципліну, яку тепер застосовують у всій галузі. Ви ознайомилися з:

- Переходом від ручних операцій до інженерної надійності

- SLI, SLO, SLA та концепцією error budget (оберненої до SLO)

- Визначенням toil, правилом 50 % і зменшенням toil через інженерні рішення

- Сталими чергуваннями on-call та практикою беззвинувачувальних постмортемів

- Чотирма золотими сигналами як відправною точкою для моніторингу сервісів

- Кар’єрними треками SRE та сертифікаціями, які відкривають двері


Дві ідеї найважливіші. Надійність — це число, узгоджене заздалегідь. І toil — це дефект, а не опис посади. Тримайте ці дві ідеї, і все інше в SRE випливає природно.


Рекомендоване читання: книга Google SRE (безкоштовно онлайн: sre.google/books/), SRE Workbook для практичних вправ і матеріали Charity Majors про observability. Урок «geometry-of» глибше розглядає візуальну структуру, що лежить в основі практики SRE: розподіли затримок, конуси error budget, графіки залежностей і макети дашбордів.