SRE - Site Reliability Engineering

Tutorijal-praktikum za pouzdanost sistema, SLO, SLA, SLI, error budget, monitoring, observability, incidente, automatizaciju, DevOps kulturu i operativni rad
SRE - Site Reliability Engineering – uvod u pouzdanost sistema, SLO, SLA, monitoring, incidente, observability i automatizaciju
Uvod

SRE - Site Reliability Engineering predstavlja važan most između sistemske administracije, softverskog inženjerstva, DevOps kulture i operativnog rada nad modernim digitalnim servisima. Njegova osnovna ideja je da se pouzdanost sistema ne prepušta slučaju, pojedinačnoj improvizaciji ili stalnom gašenju požara, već da se projektuje, meri, automatizuje i unapređuje kao ozbiljna inženjerska disciplina.

U tradicionalnom IT okruženju često postoji jasna podela između razvojnih timova i operativnih timova. Razvojni tim pravi aplikaciju, operativni tim je održava, a korisnici očekuju da sve radi stabilno, brzo i dostupno. U praksi, međutim, problemi najčešće nastaju upravo između tih svetova: aplikacija se brzo menja, infrastruktura ima svoja ograničenja, monitoring nije dovoljno jasan, incidenti se ponavljaju, a odgovornost se prebacuje sa jednog tima na drugi.

SRE uvodi drugačiji pogled. Umesto pitanja „ko je kriv“, postavlja se pitanje „kako sistem možemo učiniti pouzdanijim“. Umesto beskonačnog ručnog rada, uvodi se automatizacija. Umesto nejasnih obećanja da će sistem „uvek raditi“, uvode se merljivi ciljevi: SLI, SLO, SLA i error budget. Umesto da se incident zaboravi čim se servis oporavi, radi se postmortem analiza i iz nje se uči.

Da bismo razumeli SRE, prvo moramo razumeti pojam pouzdanosti. Pouzdan sistem nije nužno sistem koji nikada ne greši. U realnom svetu svaki sistem može da otkaže: server može pasti, mreža može zakazati, baza može usporiti, aplikacija može imati grešku, sertifikat može isteći, a korisnički saobraćaj može naglo porasti. Pouzdan sistem je onaj koji je projektovan tako da greške podnese, ograniči njihov uticaj, brzo se oporavi i pruži korisniku prihvatljiv nivo usluge.

Dostupnost je jedan od najpoznatijih pojmova pouzdanosti. Kada kažemo da je servis dostupan, mislimo da korisnik može da mu pristupi i da dobije očekivani odgovor. Ali dostupnost nije jedina mera. Važni su i latencija, stopa grešaka, propusnost, vreme oporavka, kvalitet korisničkog iskustva i stabilnost sistema tokom promena.

SRE nas uči da se pouzdanost mora meriti. Ako ne merimo kako servis radi, ne znamo da li je zaista dobar ili samo imamo takav utisak. Zato se uvodi SLI, odnosno Service Level Indicator. SLI je konkretan pokazatelj ponašanja servisa, na primer procenat uspešnih zahteva, vreme odziva, broj grešaka ili dostupnost neke funkcije.

SLO, odnosno Service Level Objective, predstavlja cilj koji želimo da postignemo. Na primer, možemo reći da 99,9% zahteva treba da bude uspešno u toku meseca ili da 95% zahteva treba da bude obrađeno za manje od 300 milisekundi. SLO je veoma važan zato što daje realan, merljiv i tehnički razumljiv cilj.

SLA, odnosno Service Level Agreement, najčešće je formalni dogovor sa korisnicima, klijentima ili poslovnim stranama. On može imati pravne, ugovorne ili finansijske posledice. SLO se često koristi interno kao tehnički cilj, dok SLA može biti spoljašnje obećanje. Zato je važno da SLO bude pažljivo postavljen i da se ne obećava više nego što sistem stvarno može da izdrži.

Error budget je jedan od najlepših SRE pojmova, jer uvodi ravnotežu između brzine razvoja i stabilnosti sistema. Ako je cilj da servis bude dostupan 99,9% vremena, to znači da postoji mali dozvoljeni prostor za greške. Taj prostor je error budget. Dok ga tim ne potroši, može brže da uvodi promene. Ako se error budget troši prebrzo, prioritet se pomera ka stabilizaciji, popravljanju problema i smanjenju rizika.

SRE se ne bavi samo merenjem. Veliki deo SRE pristupa odnosi se na smanjenje toil-a. Toil je ručni, ponovljivi, zamorni i često reaktivan rad koji ne donosi trajno poboljšanje sistema. Na primer, ako administrator svakog dana ručno restartuje isti servis, to je toil. Ako se problem automatizuje, dokumentuje ili trajno reši, toil se smanjuje.

U zdravom SRE okruženju, ručni rad se ne slavi kao dokaz požrtvovanosti, već se posmatra kao signal da sistem treba poboljšati. Naravno, postoje situacije kada je ručna intervencija neophodna, naročito tokom incidenta. Ali cilj nije da ljudi zauvek rade iste repetitivne zadatke, već da svoje znanje pretvore u alate, procedure, skripte, automatizaciju i bolji dizajn sistema.

SRE je blizak DevOps kulturi, ali nije isto što i DevOps. DevOps naglašava saradnju razvoja i operacija, brzu isporuku, automatizaciju i zajedničku odgovornost. SRE te principe pretvara u konkretnije operativne obrasce: SLO, error budget, incident management, postmortem, on-call, monitoring, alerting i pouzdanost kao merljiv cilj.

U praksi, SRE timovi često rade na granici između aplikacija i infrastrukture. Oni razumeju Linux, mreže, baze, Kubernetes, cloud, monitoring, skriptovanje, CI/CD, sigurnost i ponašanje aplikacija. Ali jednako važno, razumeju i korisnički uticaj. Nije svaki alarm podjednako važan. Nije svaka greška incident. Nije svaka nestabilnost odmah katastrofa. SRE uvodi sposobnost razlikovanja važnog od nevažnog.

Monitoring je osnovni sloj SRE rada. On omogućava da vidimo šta se dešava sa sistemom. Pratimo servere, servise, aplikacije, baze, mrežu, diskove, CPU, memoriju, broj zahteva, greške, latenciju i dostupnost. Međutim, monitoring nije samo gomila grafika. Dobar monitoring mora odgovoriti na pitanje: da li korisnik zaista ima problem?

Observability ide korak dalje od klasičnog monitoringa. Ona podrazumeva da sistem iznutra daje dovoljno tragova da možemo razumeti njegovo ponašanje, čak i kada se pojavi problem koji nismo unapred predvideli. Tri osnovna stuba observability-ja su metrike, logovi i tracing. Zajedno nam pomažu da povežemo simptome, uzroke i uticaj.

Metrike su brojevi koji se prate kroz vreme. One pokazuju da li sistem usporava, da li raste broj grešaka, da li se povećava opterećenje ili da li resursi dolaze do granice. Metrike su posebno korisne za trendove, alarme i kapacitete.

Logovi su tekstualni tragovi događaja. Oni mogu pokazati greške, upozorenja, pristupe, promene stanja, neuspele konekcije, izuzetke u aplikaciji ili sistemske poruke. Kada se dogodi incident, logovi su često prvi izvor detalja koji objašnjava šta se zaista dogodilo.

Tracing je posebno važan u distribuiranim sistemima, mikroservisima i cloud native okruženjima. Jedan korisnički zahtev može proći kroz više servisa, baza, API-ja i mrežnih slojeva. Tracing omogućava da se taj put prati i da se vidi gde zahtev usporava ili puca.

Alerting je osetljiv deo SRE prakse. Ako nema alarma, tim ne zna kada korisnici imaju problem. Ako alarma ima previše, ljudi počinju da ih ignorišu. Dobar alarm treba da bude vezan za stvarni uticaj na korisnika i da traži konkretnu reakciju. Loš alarm samo pravi buku.

Incident management je organizovan odgovor na ozbiljan problem. Incident nije samo tehnička greška, već događaj koji utiče na korisnike, servis, poslovni proces ili bezbednost. Tokom incidenta važno je znati ko vodi komunikaciju, ko analizira tehnički problem, ko donosi odluke i kako se obaveštavaju zainteresovane strane.

On-call je dežurstvo za produkcione sisteme. To je odgovorna i ponekad teška praksa, jer čovek mora biti spreman da reaguje i van redovnog radnog vremena. Zato SRE insistira na zdravom on-call modelu: jasnim pravilima, dobrim alarmima, runbook dokumentaciji, rotaciji, podršci tima i smanjenju nepotrebnih buđenja.

Runbook je dokumentovana procedura za poznate probleme i operativne zadatke. Kada alarm dođe u tri sata ujutru, nije vreme za nagađanje. Dobar runbook vodi osobu kroz proveru, komande, očekivane rezultate, moguće uzroke i korake za oporavak. Runbook ne zamenjuje znanje, ali pomaže da se znanje koristi mirno i dosledno.

Postmortem je analiza incidenta posle oporavka sistema. Njegov cilj nije pronalaženje krivca, već razumevanje uzroka, posledica, propusta u procesu, nedostajućih alarma, slabosti arhitekture i mogućnosti za poboljšanje. Dobar postmortem pretvara bolan događaj u znanje koje sistem čini otpornijim.

Komunikacija tokom incidenta često je jednako važna kao tehničko rešavanje. Korisnici i menadžment ne moraju znati sve detalje o bazi, mreži ili Kubernetes podovima, ali moraju znati da je problem prepoznat, da se radi na njemu, kakav je uticaj i kada se očekuje sledeće obaveštenje. Tišina tokom incidenta često stvara veći stres od same greške.

Automatizacija je srce SRE pristupa. Ako se nešto često ponavlja, treba razmisliti da li može da se automatizuje. Ako se nešto često kvari, treba razmisliti da li može da se projektuje drugačije. Ako se isti incident stalno vraća, nije dovoljno samo gasiti požar; potrebno je otkriti zašto se požar stalno pali.

Infrastructure as Code uvodi red u upravljanje infrastrukturom. Umesto ručnih promena na serverima, resursi se opisuju kroz kod, verzionišu, pregledaju, testiraju i primenjuju na ponovljiv način. To smanjuje greške, olakšava audit i omogućava da se infrastruktura oporavi ili ponovo izgradi kada je potrebno.

CI/CD je važan za SRE zato što promene često izazivaju incidente. Ako se aplikacije isporučuju ručno, bez testova, bez kontrole verzija i bez rollback plana, rizik raste. Dobar CI/CD proces omogućava da se promene uvode postupno, provereno i uz mogućnost brzog povratka.

Release strategije kao što su rolling deployment, blue-green deployment i canary release omogućavaju da se nove verzije aplikacija uvedu kontrolisano. Umesto da se cela produkcija promeni odjednom, promena se može pustiti malom delu korisnika, pratiti ponašanje, pa tek onda proširiti.

Konfiguracioni drift nastaje kada se stvarno stanje sistema vremenom udalji od željenog stanja. Jedan server je ručno izmenjen, drugi nije. Jedno okruženje ima jednu verziju paketa, drugo drugu. Jedna aplikacija ima drugačiju konfiguraciju nego što piše u dokumentaciji. SRE pristup pokušava da takve razlike smanji kroz automatizaciju, deklarativne opise i proveru stanja.

Kubernetes i cloud native okruženja posebno su važna za savremeni SRE. Aplikacije više ne rade samo na jednom serveru, već u podovima, deployment-ima, servisima, namespace-ovima i klasterima. Pouzdanost se zato mora posmatrati kroz više slojeva: aplikacija, kontejner, node, mreža, storage, ingress, DNS, sertifikati, resursi i sam klaster.

Health checks su osnovni mehanizam kojim Kubernetes i slične platforme proveravaju da li je aplikacija spremna, živa i pravilno pokrenuta. Readiness probe govori da li aplikacija može da prima saobraćaj, liveness probe da li treba restartovati kontejner, a startup probe pomaže sporijim aplikacijama da se pravilno pokrenu.

Resursi i limiti su važni za stabilnost aplikacija. Ako aplikacija nema definisane zahteve za CPU i memoriju, scheduler teže donosi dobre odluke. Ako nema limite, može potrošiti previše resursa i ugroziti druge aplikacije. Ako su limiti postavljeni prenisko, aplikacija može pucati i restartovati se bez jasnog razloga.

Autoscaling omogućava sistemu da se prilagodi promenljivom opterećenju. Kada broj korisnika poraste, aplikacija može dobiti više replika. Kada opterećenje padne, resursi se mogu smanjiti. Ali autoscaling nije magija. Potrebne su dobre metrike, pravilno podešeni limiti, stabilna aplikacija i razumevanje realnog opterećenja.

Service mesh uvodi dodatni sloj kontrole komunikacije između servisa. On može pomoći u observability-ju, sigurnosti, rutiranju saobraćaja, retry pravilima, circuit breaker pristupu i praćenju mikroservisa. Ipak, service mesh donosi i složenost, pa ga treba uvoditi onda kada postoji stvarna potreba.

Performanse su deo pouzdanosti. Sistem koji je tehnički dostupan, ali toliko spor da korisnik ne može normalno da radi, nije zaista pouzdan. Zato SRE prati latenciju, throughput, vreme odziva, uska grla, zagušenja, baze, keširanje, mrežu i opterećenje aplikacija.

Capacity planning znači planiranje resursa pre nego što sistem dođe do granice. Ako disk raste 10% mesečno, ne treba čekati da se napuni. Ako baza sve sporije odgovara, ne treba čekati potpuni zastoj. SRE razmišlja unapred, kroz trendove, metrike i projekcije.

Sigurnost i pouzdanost su povezane. Sistem koji je kompromitovan nije pouzdan. Sistem bez kontrole pristupa, bez zakrpa, bez pregleda logova i bez zaštite tajni ne može dugoročno biti stabilan. Zato SRE sarađuje sa security timovima i uvodi sigurnost kao deo svakodnevnog operativnog rada.

SRE je važan i za velike organizacije koje imaju stare i nove sisteme istovremeno. Jedan deo infrastrukture može biti tradicionalan, drugi virtuelizovan, treći u Kubernetes-u, četvrti u cloud-u. SRE pomaže da se preko svih tih slojeva postave zajednička pitanja: šta je kritično, šta merimo, kako reagujemo, kako učimo i kako smanjujemo rizik.

Za sistem administratore, SRE je prirodan nastavak znanja o Linux-u, mrežama, servisima, logovima i skriptovanju. Za DevOps inženjere, SRE donosi zreliji pogled na produkciju, incidente i pouzdanost. Za developere, SRE pomaže da razumeju kako kod živi u stvarnom sistemu, pod stvarnim opterećenjem i pred stvarnim korisnicima.

U ovom praktikumu nećemo posmatrati SRE samo kao moderan naziv. Posmatraćemo ga kao skup praktičnih navika: meriti ono što je važno, smanjivati ručni rad, pisati runbook-e, praviti dobre alarme, učiti iz incidenata, projektovati otpornost, automatizovati gde ima smisla i čuvati zdravlje ljudi koji održavaju sisteme.

Kroz lekcije ćemo graditi sliku postepeno. Prvo ćemo razumeti šta je SRE i zašto je važan, zatim ćemo uvesti SLI, SLO, SLA, error budget i toil. Posle toga ćemo preći na arhitekturu pouzdanih sistema, monitoring, observability, incidente, automatizaciju, Kubernetes, performanse, kapacitete, sigurnost i mini projekte.

U završnim lekcijama radićemo mini projekte. Jedan će biti mali SRE monitoring lab za učenje i vežbu, a drugi incident response scenario koji pokazuje kako se problem prepoznaje, analizira, komunicira, rešava i dokumentuje. Cilj je da SRE ne ostane apstraktna teorija, već praktičan način razmišljanja.

Cilj ovog tutorijala nije da odmah pokrije svaku moguću SRE praksu, svaki alat i svaku arhitekturu. Cilj je da izgradi stabilnu osnovu: da znamo šta je pouzdanost, kako se meri, zašto su incidenti važni, kako se smanjuje toil, kako se koristi monitoring i kako se gradi operativna zrelost.

SRE zato možemo posmatrati kao disciplinu poverenja. Korisnici veruju da će servis raditi. Timovi veruju da mogu bezbedno da uvode promene. Organizacija veruje da sistemi imaju merljive ciljeve i jasne procedure. A inženjeri veruju da se problemi ne guraju pod tepih, već pretvaraju u učenje, automatizaciju i bolji dizajn.

Povratak na sadržaj Sledeća lekcija →