
Iată o poveste care mi-a schimbat pentru totdeauna abordarea față de muncă în DevOps. Încă din vremurile pre-pandemie, cu mult înainte ca acestea să apară, când eu și colegii mei ne gândeam la afacerea noastră și lucram ca freelanceri la diverse proiecte, am primit o propunere prin Telegram.
Compania care a venit la noi se ocupa cu analiza datelor. Zilnic, procesau mii de solicitări. Ne-au contactat spunând: «Băieți, noi avem ClickHouse și vrem să automatizăm configurarea și instalarea lui. Vrem Ansible, Terraform, Docker și să păstrăm totul în Git. Vrem un cluster format din patru noduri, cu câte două replici în fiecare.»
O solicitare standard, printre zecile pe care le primeam, și aveam nevoie de o soluție standard la fel de bună. Am spus «ok» și, în două-trei săptămâni, totul a fost gata. Lucrările au fost acceptate și au început să se mute pe noul cluster ClickHouse cu ajutorul utilitarului nostru.
Nimeni din companie nu dorea și nu știa să se ocupe de ClickHouse. Atunci, credeam că aceasta era problema principală, așa că CTO-ul companiei mi-a dat undă verde echipei mele să automatizăm cât mai mult posibil, pentru a nu mai interveni acolo niciodată.
Am însoțit migrarea, au apărut alte sarcini — să configurăm backup-uri și monitorizarea. Exact în acel moment, CTO-ul acelei companii s-a mutat pe un alt proiect, lăsându-ne pe noi să conducem echipa sub comanda unuia dintre angajații lor — Leonid. Lioșa nu era un tip prea strălucit. Un programator obișnuit, care dintr-o dată a fost pus șef la ClickHouse. Se părea că aceasta a fost prima sa numire în care trebuia să conducă ceva, iar pe măsură ce a căpătat această distincție, a început să sufere de sindromul celebrității.
Împreună ne-am apucat de backup-uri. I-am sugerat să facem backup imediat pe datele originale. Pur și simplu să le luăm, să le comprimăm și să le încărcăm elegant într-un S3. Datele originale sunt aur. Era și o altă opțiune — să facem backup tabelor din ClickHouse, folosind freeze și copiere. Dar Lioșa a propus propria sa soluție.
El a anunțat că avem nevoie de un al doilea cluster ClickHouse. Și de acum înainte vom scrie datele pe două clustere — cel principal și cel de backup. I-am spus: «Lioșa, nu va fi un backup — ci o replică activă. Și dacă datele încep să lipsească din producție, pe backup-ul tău va fi același lucru.»
Dar Lioșa s-a agățat de volan și a refuzat să asculte argumentele mele. Ne-am certat mult în chat, dar nu aveam ce să facem — Lioșa conducea proiectul, iar noi eram doar niște băieți angajați de pe stradă.
Am monitorizat starea cluster-ului și am perceput plată doar pentru munca administratorilor. Administrare curată a ClickHouse-ului, fără a ne amesteca în date. Cluster-ul era disponibil, discurile erau în regulă, nodurile la fel.
Încă nu bănuiam că am primit această comandă dintr-o neînțelegere teribilă în cadrul echipei lor.
Managerul era nemulțumit că ClickHouse-ul funcționa lent și, uneori, se pierdeau date. Acesta i-a dat sarcina CTO-ului să se ocupe de problemă. Acesta a încercat să descopere cauza și a ajuns la concluzia că trebuie să automatizeze ClickHouse-ul — și gata. Dar, cum s-a dovedit curând, echipa de care aveau nevoie nu era deloc cea de DevOps.
Toate acestea s-au descoperit într-un mod foarte dureros. Și cel mai trist, s-a întâmplat în ziua mea de naștere.
Vineri seara. Rezervasem o masă la barul meu de vinuri preferat și i-am chemat pe prieteni.
Aproape înainte de a ieși, am primit o sarcină de a face o alternativă, am realizat-o, totul era în regulă. Alternativa a trecut, ClickHouse-ul a confirmat. Eram deja pe cale să plecăm la bar, când ne scriu că lipsesc date. Am calculat — părea că e totul în regulă. Și am plecat să sărbătorim.
La restaurant era zgomot ca de obicei vineri. Am comandat băutură, mâncare și ne-am întins pe canapea. În toată această vreme, Slack-ul meu era umplut cu mesaje. Se scria ceva despre lipsa de date. Am zis — dimineața e mai înțeleaptă decât seara. Mai ales astăzi.
Aproape de unsprezece au început să sune. Era managerul companiei… „Probabil a decis să mă felicite”, am gândit eu, destul de neîncrezător, și am răspuns la telefon.
Și am auzit ceva de genul: „Ați pierdut datele noastre! Vă plătesc, dar nimic nu funcționează! Ați fost responsabili pentru backup-uri și nu ați făcut nimic! Haideți să rezolvați!” — doar că a fost și mai vulgar.
— Știi ce, du-te naibii! Astăzi e ziua mea de naștere, iar acum o să beau, nu să mă ocup de prostiile voastre de începători din rahat și bețe!
Așa că nu am spus asta. În schimb, am scos laptopul și m-am apucat de treabă.
Nu, am fost extrem de furios! Am început să arunc în chat mesaje acide de tipul „v-am spus eu” — pentru că backup-ul, care nu era deloc un backup, nu a salvat nimic.
Am venit cu prietenii o metodă de a opri manual înregistrarea și de a verifica tot. Ne-am asigurat că o parte din date nu se scriau.
Am oprit înregistrarea, am numărat numărul de evenimente care sunt acolo într-o zi. Am încărcat și alte date, din care doar o treime nu s-au înregistrat. Trei sharde cu 2 replici. Introduci 100.000 de rânduri — 33.000 nu se înregistrează.
A fost o adevărată confuzie. Toți s-au trimis unul altuia la naiba pe rând: primul a fost Leonia, apoi am urmat eu și fondatorul companiei. Numai CTO-ul recent venit încerca să salveze apelurile noastre cu țipete și conversațiile în căutarea unei soluții pentru problemă.
Ce se întâmpla de fapt — nimeni nu înțelegea.
Eu și băieții am fost pur și simplu uimiți când am realizat că o treime din toate datele nu doar că nu se înregistrau — se pierdeau! S-a dovedit că ordinea în companie era așa: după inserare, datele erau șterse irevocabil, evenimentele dispăreau pe capete. M-am imaginat cum Serghei convertește toate acestea în ruble pierdute.
Ziua mea de naștere a fost de asemenea trimisă la gunoi. Stăteam la bar și generam idei, încercând să deslușim rebusul aruncat. Cauza prăbușirii ClickHouse-ului nu era evidentă. Poate că e rețeaua, poate că e problema setărilor de Linux. Orice ar fi, au fost suficiente ipoteze.
Nu am depus jurământ ca dezvoltator, dar a fost nepoliticos să-i părăsesc pe băieții de la capătul firului — chiar dacă ei ne dădeau vina pe noi. Eram 99% sigur că problema nu se afla în soluțiile noastre, nu de partea noastră. 1% șansă că totuși am greșit ne făcea să ne simțim îngrijorați. Dar, indiferent de partea în care se afla problema — trebuia să o rezolvăm. Să lași clienții, indiferent cât de erau, cu o astfel de pierdere de date — era prea brutal.
Până la trei dimineața am lucrat la o masă în restaurant. Adăugam evenimente, insert select — și am început să umplem golurile. Când ai pierdut date, așa se face — iei datele medii din zilele anterioare și le introduci în cele pierdute.
După trei dimineața, eu și prietenul meu am mers acasă, am comandat bere din magazinul de alcool. Stăteam cu laptopul și problemele ClickHouse-ului, prietenul îmi povestea ceva. În cele din urmă, după o oră s-a supărat că lucrez și nu beau bere cu el și a plecat. Clasic — am fost prietenul DevOps-ului.
Până la 6 dimineața am recreat din nou tabela, iar datele au început să fie încărcate. Totul a început să funcționeze fără pierderi.
Apoi a fost greu. Toți dădeau vina pe ceilalți pentru pierderea datelor. Dacă ar fi apărut un nou bug, sunt sigur că ar fi început o ceartă.
În aceste conflicte am început în sfârșit să înțelegem - în companie credeau că suntem acei băieți care lucrează cu date și se ocupă de structura tabelelor. Ne-au confundat pe noi, administratorii, cu cei care se ocupă de baze de date. Și au venit să ne întrebe de ce nu am gestionat bine treaba.
Principala lor nemulțumire era: ce dracu', ați fost responsabili pentru backup-uri și nu le-ați făcut corect, ați pierdut datele. Și totul era plin de blesteme.
Îmi doream justiție. Am săpat în corespondență și am atașat toate capturile de ecran, unde Leonid ne obliga să facem un backup așa cum ar fi trebuit. CTO-ul lor s-a aliat cu noi după apelul meu telefonic. A recunoscut și el că a greșit.
Pe de altă parte, șeful companiei nu voia să-și blameze oamenii. Capturile de ecran și cuvintele nu l-au impresionat. Considera că, fiind experți, ar fi trebuit să-i convingem pe toți și să insistăm asupra deciziei noastre. Se pare că datoria noastră era să-l învățăm pe Leonid și să ajungem la cel mai înalt nivel fără a-i implica pe el, care era liderul proiectului, și să-i exprimăm toate îndoielile noastre cu privire la conceptul de backup-uri.
Discuția era plină de ură, agresiune ascunsă și deschisă. Nu știam ce să fac. Totul ajunsese într-un impas. Atunci mi-a fost sugerat cel mai simplu mod - să-i scriu liderului în privat și să mă înțeleg cu el pentru o întâlnire. Vasya, oamenii nu sunt atât de îndrăzneți în viața reală cum sunt în chat. La mesajul meu șeful a răspuns: vin-o, nu e nicio problemă.
A fost cea mai ciudată întâlnire din cariera mea. Aliatul meu de la client - CTO - nu a putut găsi timp. Mergeam la întâlnire cu șeful și cu Leonid.
Repetam în minte dialogul nostru posibil. Am reușit să ajung foarte devreme, cu 30 de minute înainte. A început anxietatea, am fumat 10 țigări. Îmi dădeam seama, totul - eram complet singur. Nu voi reuși să-i conving. Și am pășit în lift.
În timp ce urcam, am zgâriat bricheta atât de tare, încât am stricat-o.
În final, Leonid nu a fost la întâlnire. Și noi am discutat excelent despre tot cu șeful! Sergei mi-a povestit despre durerea lui. El nu dorea să "automatizeze ClickHouse" - dorea ca "interogările să funcționeze".
Nu am văzut un prost, ci un tip bun, îngrijorat de afacerea lui, dedicat muncii 24/7. Chatul ne desenează adesea răufăcători, ticăloși și nepricepuți. Dar în viața reală sunt la fel ca și tine.
Lui Sergei nu îi trebuiau doar câțiva DevOps angajați. Problema pe care o aveau s-a dovedit a fi mult mai mare.
Am spus că pot rezolva problemele lui — doar că este o muncă complet diferită și am un prieten DBM pentru aceasta. Dacă am fi știut inițial că este vorba de o treabă pentru ei, am fi evitat multe. Prea târziu, dar am realizat că problema consta în o muncă proastă cu datele, nu în infrastructură.
Ne-am dat mâna, ne-a crescut plata de 2,5 ori, dar cu condiția — preiau absolut toate problemele lor cu datele și ClickHouse-ul. În lift, m-am conectat cu acel DBM Max și l-am implicat în muncă. Trebuia să revizuiesc întregul cluster.
În proiectul acceptat era o mulțime de probleme. Începând cu acel „backup” menționat. S-a dovedit că acest „backup”-cluster nu era izolat. Se testau toate câte ceva pe el, uneori chiar și în producție.
Dezvoltatorii din echipă au inventat un „insertor” de date personalizat. Funcționa astfel: făcea batch-uri de fișiere, lansa scriptul și importa datele în tabel. Dar principala problemă era că o cantitate imensă de date era acceptată pentru o simplă interogare. Interogarea se conecta la date pe secundă. Totul pentru un singur număr — suma pe zi.
Dezvoltatorii din echipă foloseau incorect un instrument pentru analitică. Se duceau în Grafana, scriau interogarea lor regală. Aceasta extrăgea date pe 2 săptămâni. Rezultatul era un grafic frumos. Dar în realitate, interogarea de date avea loc la fiecare 10 secunde. Totul se acumula în coadă, deoarece ClickHouse pur și simplu nu reușea să proceseze. Aici se ascundea cauza principală. În Grafana nimic nu funcționa, interogările stăteau în coadă, venind constant date vechi și nerelevante.
Am reconfigurat clusterul, am refăcut inserția. Dezvoltatorii din echipă și-au rescris „insertorul” și acum începea să sharduie datele corect.
Max a realizat un audit complet al infrastructurii. A redactat un plan de tranziție către un backend complet. Dar asta nu a mulțumit compania. Așteptau de la Max un secret magic care să le permită să lucreze ca înainte, dar într-un mod eficient. De proiect continua să răspundă Leonia, care nu învățase nimic. Din tot ce a fost propus, el a ales din nou alternativa sa. Ca întotdeauna, aceasta era cea mai aleasă… soluție îndrăzneață. Leonia credea că compania sa are un drum special. Curbat și plin de aisberguri.
Asta a fost, în esență, cum ne-am despărțit — am făcut tot ce am putut.
Cu capetele pline de umflături, învățați din această poveste, ne-am deschis afacerea și ne-am format câteva principii. Acum, niciodată nu începem o muncă ca atunci.
Dibieyshchik Max s-a alăturat nouă după acest proiect și încă lucrăm excelent împreună. Cazul cu Clickhouse ne-a învățat să facem un audit complet și temeinic al infrastructurii înainte de a începe munca. Ne aprofundăm în modul în care funcționează totul și abia apoi acceptăm sarcinile. Dacă înainte am fi început imediat să întreținem infrastructura, acum facem mai întâi un proiect unic, care ne ajută să înțelegem cum să o aducem în stare de funcționare.
Și da, evităm proiectele cu o infrastructură proastă. Chiar dacă pentru mulți bani, chiar dacă din prietenie. A gestiona proiecte bolnave nu este rentabil. Conștientizarea acestui lucru ne-a ajutat să creștem. Fie un proiect unic pentru a ajusta infrastructura și apoi un contract de întreținere, fie pur și simplu trecem pe lângă. Pe lângă un alt aisberg.
P.S. Așa că, dacă aveți întrebări despre infrastructura dvs., .
Avem 2 audite gratuite pe lună, poate că proiectul dvs. va fi printre ele.
Sursa: habr.com
