Czym jest site reliability engineering SRE? Poradnik

Summary

Site reliability engineering to podejście, w którym niezawodność ma mierzalny cel, a jego naruszenie decyduje o tym, czy wypuszczasz nowe funkcje. Kluczowe pojęcia to SLI (co mierzysz), SLO (cel), SLA (umowa z klientem) i error budget (dozwolona awaria). Dla dewelopera solo wystarczy jeden SLI, jeden SLO, health check i alerty na burn rate, a cała konfiguracja zajmuje jeden wieczór i nie wymaga Kubernetesa.

Ciemne biurko w nocy z laptopem pokazującym wykresy monitoringu i telefonem obok kubka z kawą

Czym jest site reliability engineering SRE? To podejście, w którym operacje traktuje się jak problem programistyczny: ustawiasz mierzalny cel niezawodności, liczysz, jak często go nie trzymasz, i pozwalasz tej liczbie zdecydować, czy wypuszczasz nowe funkcje, czy naprawiasz to, co się sypie. Termin wymyślił Google, ale idea działa w każdej skali. Dla dewelopera solo z jedną aplikacją i garstką użytkowników oznacza to tyle, że z góry ustalasz, ile przestoju jesteś gotów zaakceptować.

Problem w praktyce jest taki, że większość side projektów nie ma żadnej takiej liczby. Są „w porządku” do momentu, aż ktoś napisze do ciebie maila. Ten przewodnik wyjaśnia SRE prostym językiem, a potem zmniejsza je do wersji, którą jedna osoba jest w stanie utrzymać w weekend.

Czym tak naprawdę jest site reliability engineering?

Najkrótsza wersja pochodzi z książki o SRE od Google'a: SRE to to, co dostajesz, gdy poprosisz inżyniera oprogramowania o zaprojektowanie zespołu operacyjnego. Zamiast ludzi, którzy ręcznie restartują serwery, piszesz kod, który to robi, i mierzysz wyniki.

Za większością tego stoją trzy idee. Niezawodność to funkcja z celem, a nie poczucie. Powtarzalna praca ręczna (książka nazywa to toil) to błąd, który trzeba zautomatyzować. Awarie są wliczone w koszt, więc planujesz, jak się z nich uczyć, zamiast szukać winnych.

DevOps i SRE mocno się pokrywają. Praktyczna różnica jest taka: DevOps to kultura wspólnego wdrażania i utrzymywania kodu, a SRE daje konkretne narzędzia, żeby się o to kłócić liczbami. Do korzystania z liczb nie trzeba wybierać obozu.

W dużej firmie SRE dzieli czas między dyżury, reagowanie na incydenty, planowanie pojemności i automatyzację. Książka Google'a mówi, żeby ograniczyć pracę operacyjną do mniej więcej połowy czasu inżyniera, tak by reszta szła na rozwój. Ten limit jest ograniczeniem projektowym, a nie miłym dodatkiem.

Flagi funkcji dobrze pokazują to podejście. Flaga pozwala wyłączyć zły release w kilka sekund, bez ponownego wdrożenia, a to chroni budżet. Czy potrzebujesz do tego hostowanego narzędzia, zależy od liczby flag: zmienna środowiskowa wystarczy na pierwsze trzy.

SLI, SLO, SLA: trzy skróty, jedna idea

SLI (service level indicator) to coś, co mierzysz. Dla aplikacji webowej zwykle jest to odsetek udanych żądań albo odsetek odpowiedzi szybszych niż 300 ms. Wybierz jeden albo dwa wskaźniki, nie dwanaście.

SLO (service level objective) to cel, który stawiasz na tym pomiarze, na przykład „99,9% żądań kończy się sukcesem w ciągu 30 dni”. To cel wewnętrzny, obietnica składana samemu sobie.

SLA (service level agreement) to umowa z klientem, zwykle z zwrotem pieniędzy, jeśli cel nie zostanie spełniony. Jeśli nikt nie płaci ci za uptime, to nie masz jeszcze SLA i nie powinieneś przypadkiem napisać go w tekście cennika.

Stoper obok notatnika ze szkicem prawie pełnego wykresu kołowego, ilustrujący mały error budget

Error budget: to, co zmienia sposób pracy

Error budget to po prostu 100% minus twój SLO. Cel 99,9% w ciągu 30 dni zostawia około 43 minut dozwolonej awarii. To budżet, który możesz wydać na ryzykowne wdrożenia, migracje i eksperymenty.

Najważniejsza jest reguła dołączona do budżetu. Dopóki budżet jest, wypuszczasz zmiany. Kiedy się skończy, przestajesz dowozić funkcje i naprawiasz niezawodność, aż budżet się odbuduje. Rozdział książki o ryzyku opisuje to jako sposób na rozstrzygnięcie sporu między „szybciej” a „nie psuj” wspólną liczbą zamiast negocjacjami.

Jest tu też mocna uwaga, którą warto powtórzyć: 100% prawie nigdy nie jest właściwym celem. Użytkownicy na kiepskich sieciach komórkowych nie odróżnią 99,99% od 99,9%, a każda kolejna dziewiątka kosztuje wyraźnie więcej niż poprzednia. To nie jest cel idealny. To cel, z którym da się pracować.

W praktyce budżet jest najbardziej użyteczny przy decyzjach, które i tak podejmujesz. Migracja bazy, zmiana dostawcy płatności albo przepisanie kolejki to momenty, w których pytasz, czy stać cię na ryzyko. Jeśli zostało ci 20 minut budżetu w tym miesiącu, odkładasz migrację na przyszły tydzień. Jeśli zostało 40, robisz ją dziś po południu, z oknem serwisowym i planem wycofania. Nie potrzebujesz spotkania, żeby to ustalić, bo liczba już podjęła decyzję.

Jeśli chcesz konkretny przebieg wyboru wskaźników i napisania pierwszego celu, workbook SRE o wdrażaniu SLO to najbardziej praktyczny rozdział, a do tego krótki.

Czy SRE ma sens, gdy budujesz sam?

Trzy powody, żeby to zrobić, i jeden, żeby tego nie robić.

Powody: twój projekt prędzej czy później cię obudzi; zapisany cel powstrzymuje przed przeinżynierowaniem; a „prowadzę produkcję z SLO” dobrze wygląda, gdy ktoś decyduje, czy cię zatrudnić albo ci zaufać. Powód przeciw: jeśli projekt nie ma jeszcze użytkowników, ćwiczysz rozwiązywanie problemu, którego nie masz. Najpierw zbuduj, mierz, gdy ktoś na tym polega.

Więc pomiń pełny aparat. Nie płać za usługę pagera do projektu hobbystycznego, nie stawiaj Kubernetesa, żeby wyglądać poważnie, i nie pisz dziesięciostronicowego szablonu incydentu. Warto zrobić to nawet przy dziesięciu prawdziwych użytkownikach: health check, jeden SLO i jedno miejsce, w którym zaglądasz, kiedy coś padnie.

Mała szafa serwerowa z zielonymi lampkami statusu i jedną bursztynową

Konfiguracja na jeden wieczór dla side projektu

Minimum, które zwykle wytrzymuje też przy 10 000 użytkowników, zajmuje jeden wieczór. Testowane. Nieoptymalne. Robimy to mimo to, bo jest nudne, a nudne przetrwa.

Po pierwsze wybierz jeden SLI: odsetek żądań HTTP, które zwróciły coś innego niż 5xx. Po drugie ustaw SLO na 99,5% w ciągu 30 dni, czyli około 3,6 godziny budżetu. Zacznij luźno, zaostrzysz później. Po trzecie dodaj zewnętrzny uptime check, który uderza w prawdziwy endpoint zdrowia.

Endpoint zdrowia wart uwagi sprawdza rzeczy, które faktycznie się psują, a nie tylko to, czy proces żyje:

// GET /healthz
app.get("/healthz", async (req, res) => {
  try {
    await db.query("select 1");          // baza danych odpowiada
    await cache.ping();                  // cache odpowiada
    res.status(200).json({ ok: true });
  } catch (err) {
    res.status(503).json({ ok: false });
  }
});

Kod nie musi być elegancki. Ważne, żeby endpoint zwracał 503, gdy baza nie odpowiada, bo to właśnie ten sygnał uruchamia alert. Sprawdź to raz ręcznie, odłączając bazę lokalnie, zanim uwierzysz, że działa. Test, który nigdy nie widział awarii, daje fałszywe poczucie bezpieczeństwa.

Po czwarte wyślij alerty tam, gdzie je zobaczysz, czyli na push w telefonie, a nie do skrzynki. Po piąte prowadź zwykły plik tekstowy postmortems.md i po każdej awarii dopisz cztery linijki: co się stało, dlaczego, jak długo trwała i co się zmienia. Ten plik to najbardziej niedoceniane narzędzie niezawodności, jakie będziesz mieć.

Gdzie AI pomaga, a gdzie nie

Asystenci są przyzwoici w części „toil”: napiszą health check, Terraform dla monitora uptime, pierwszy szkic runbooka albo skrypt, który liczy odsetek 5xx z logów. Są słabi w ustalaniu SLO, bo to decyzja produktowa o tym, co użytkownicy tolerują.

Podczas incydentu bądź ostrożny. Asystent może zaproponować wiarygodnie brzmiącą poprawkę, którą zastosujesz na produkcji o drugiej w nocy bez czytania. Używaj go, żeby wyjaśnił stack trace albo napisał szkic postmortemu już po wszystkim, a decyzję o rollbacku zostaw człowiekowi, który jest przytomny.

Jedna praktyczna rada: zanim poprosisz asystenta o cokolwiek w konfiguracji monitoringu, zapisz w jednym zdaniu, co dokładnie ma zostać sprawdzone i co oznacza wynik. Model zwykle wygeneruje ładny kod, ale nie wie, czego ty oczekujesz od swojego systemu. Różnica między kodem, który działa, a kodem, który mierzy to, co trzeba, jest dokładnie tym, czym zajmuje się SRE. Kod z asystenta przeglądasz tak samo jak każdy inny, a test piszesz tak, żeby dało się go celowo zepsuć.

Bramki jakości kodu też wchodzą w ten obraz. Wiele awarii wynika ze zmiany, która w review wyglądała niewinnie. Analiza statyczna w CI nie da ci niezawodności, ale usuwa klasę głupich błędów, zanim zdążą kosztować budżet.

Alerty na burn rate i postmortem, który ktoś przeczyta

Częsty błąd początkujących to alarmowanie za każdym razem, gdy pojedyncze żądanie się nie uda. Po tygodniu wyciszysz kanał. Lepszy sygnał to burn rate: jak szybko zużywasz error budget w porównaniu z tempem, które wyczerpałoby go dokładnie na końcu okna.

Dla side projektu trzymaj to prosto. Wyślij push, jeśli odsetek błędów w ostatnich 10 minutach przekracza 5%, i podsumowanie mailem, jeśli tygodniowy wynik zmierza do niespełnienia SLO. Masz dwa poziomy: obudź się teraz albo spójrz w poniedziałek. Coś bardziej wymyślnego może poczekać, aż użytkownicy poskarżą się na pierwszy poziom.

Zanim ustawisz pierwszy alert, zrób listę tego, co zrobisz, gdy zadzwoni. Jeśli odpowiedź brzmi „nic, zobaczę jutro”, alert nie ma sensu, bo nie zmieni twojego zachowania. Dobry alert kończy się konkretnym krokiem: restartem workera, rollbackiem ostatniego wdrożenia albo wyłączeniem flagi. Jeśli takiego kroku nie ma, zostaw sygnał w tygodniowym podsumowaniu i nie budź się o trzeciej w nocy bez powodu.

Postmortem zrób krótki i bez winnych. Bez winnych nie znaczy, że nikt nie odpowiada. Znaczy, że pytasz, co w systemie pozwoliło na błąd, a nie kto go popełnił. Gdy jesteś jedyną osobą w zespole, ma to większe znaczenie, niż się wydaje, bo kusi, żeby tylko poczuć się źle i pominąć spisanie.

Wystarczą cztery nagłówki: co się stało, dlaczego, jak długo użytkownicy byli dotknięci i co się zmienia. Ostatni punkt powinien wskazywać działanie, które naprawdę wykonasz, z datą. „Uważać bardziej” to nie jest działanie. „Dodać sprawdzenie migracji na stagingu przed następnym release’em” już jest.

Po roku ten plik staje się mapą twoich słabych punktów. Reguła, którą z tego wyciągnąłem po trzech awariach z powodu tego samego wygasłego certyfikatu: jeśli ta sama przyczyna pojawia się dwa razy, automatyzujesz ją. Dodanie monitoringu odnowień zajęło jeden wieczór i od tamtej pory problem się nie powtórzył.

Czy SRE to dobra ścieżka dla dewelopera, który lubi budować?

Zależy, co lubisz. Role SRE pasują ludziom, którzy bardziej cenią systemy, tryby awarii i automatyzację niż wysyłanie interfejsów. Jeśli satysfakcję daje ci cichszy pager, to ci się spodoba. Jeśli chcesz patrzeć, jak użytkownicy klikają twoją nową funkcję, prawdopodobnie nie.

Wejście zwykle idzie przez pracę backendową albo infrastrukturalną: najpierw przejmujesz deploye i alerty jednej usługi, potem bierzesz na siebie więcej jej niezawodności. Umiejętności, które się przenoszą: podstawy Linuksa, sieci, jeden dostawca chmury, stos monitoringu i nawyk spisywania rzeczy. Side projekty są dobrym miejscem, żeby to wszystko ćwiczyć, bo jesteś całym zespołem.

Developer na kanapie w nocy z laptopem i świecącym telefonem, na dyżurze

Wybierz jedną rzecz, którą już uruchamiasz, nawet darmową aplikację na free tierze. Zapisz jej SLI, SLO i dokładne działanie, które podejmiesz, gdy budżet się skończy. Jeśli nie potrafisz powiedzieć, z czego byś zrezygnował, ta liczba jest tylko dekoracją. Który z twoich projektów zauważyłbyś jako niedostępny, zanim powiedziałby ci o tym użytkownik?

Frequently asked questions

Czym jest SRE w prostych słowach?
To podejście, w którym operacje traktuje się jak problem programistyczny: ustawiasz mierzalny cel niezawodności i mierzysz, jak często go nie trzymasz.
Czym różni się SLI od SLO?
SLI to wskaźnik, który mierzysz, na przykład odsetek udanych żądań. SLO to cel ustawiony na tym wskaźniku, na przykład 99,9% sukcesów w ciągu 30 dni.
Ile wynosi error budget przy SLO 99,9%?
W oknie 30 dni cel 99,9% zostawia około 43 minut dozwolonej awarii. Ten czas możesz wydać na ryzykowne wdrożenia i eksperymenty.
Czy side projekt potrzebuje SRE?
Nie od pierwszego dnia. Gdy ktoś zaczyna na nim polegać, warto mieć health check, jeden SLO i miejsce, w którym zapisujesz awarie.
Co to jest toil w SRE?
Powtarzalna praca ręczna, która nie wnosi wartości trwałej i skaluje się wraz z ruchem. Zasada SRE mówi, żeby ją automatyzować.
Jaki alert ustawić dla małego projektu?
Dwa poziomy: push w telefonie, gdy odsetek błędów w ostatnich 10 minutach przekracza 5%, oraz tygodniowe podsumowanie, czy SLO jest zagrożone.