Săriți la conținut

Blog ·

Spațiul din rack nu înseamnă capacitate

Cât de plin este acel rack? Există cinci răspunsuri, în cinci forme diferite, iar adunarea lor dă un număr greșit pe care nimeni nu îl poate audita.

De Provibr

„Cât de plin este rackul acela” sună a întrebare cu un număr drept răspuns. Nu este. Sunt cinci întrebări îmbrăcate într-o singură haină, iar orice tablou de bord care răspunde cu o singură cifră a ales deja în tăcere pe care dintre cele cinci a avut-o în minte și le-a aruncat pe celelalte patru.

Cele cinci sunt lucruri cu adevărat diferite. Câte unități de rack sunt ocupate. Câte dintre mașinile de acolo sunt efectiv în serviciu, și nu în pregătire sau în carantină. Câte dintre ele ar putea fi vândute mâine unui client. Câtă putere sunt bugetate să tragă mașinile de acolo față de bugetul rackului. Și câtă putere trag ele în realitate.

Puteți fi la nouăzeci la sută pe prima și să nu aveți nimic de vândut, pentru că tot ce se află în rack este deja legat de un client. Puteți fi la patruzeci la sută pe prima și să nu puteți adăuga o mașină, pentru că bugetul de putere este consumat. Acestea nu sunt cazuri marginale. Sunt starea normală a unui centru de date care funcționează de o vreme.

Iată cum am construit răspunsul ca cinci citiri separate și, mai important, cum am făcut să fie greu pentru o versiune viitoare a noastră să le facă media.

Cinci axe, cinci răspunsuri diferite

AxăForma răspunsuluiDe unde vine
Unități de rackocupate, blocate și disponibile pe fiecare față, plus cel mai lung interval liber continuurevendicările active plus geometria rackului
Starea echipamentelorcâte un număr pentru fiecare stare logisticămașinile amplasate în rack
Dedicate vandabilemașini vandabile, excluse, luate în calculverdictul de pregătire al fiecărei mașini conform politicii organizației
Putere configuratăwați rezervați față de wații bugetațirezervările de pe mașini și bugetul rackului
Putere observatănimic, iar motivul este că nu există senzorde nicăieri

Citiți tabelul acela ca pe o listă de tipuri de retur, nu ca pe o listă de funcționalități. Prima axă întoarce o formă pentru fiecare față. A doua întoarce o corespondență de la stare la număr. A treia întoarce trei numărători de mașini. A patra întoarce două cifre în wați. A cincea nu întoarce absolut nimic. Niciuna dintre cele cinci nu este un număr simplu, iar asta nu este un accident al proiectării: este primul dintre cele patru lucruri care împiedică existența unui scor combinat.

Dacă fiecare axă ar întoarce un procent, o medie ar fi o linie de cod. Nimeni nu ar analiza-o ca pe o decizie, pentru că nu ar arăta a decizie. Ar arăta a comoditate. Faptul că formele de retur sunt structural incomparabile înseamnă că oricine vrea o cifră combinată trebuie mai întâi să scrie conversia care le aplatizează, iar o conversie se vede într-un diff cum o împărțire nu se vede.

Necunoscutul este pe fiecare axă și poartă un motiv

A doua închidere este ce se întâmplă când o axă nu știe.

Astăzi există trei motive, iar ele sunt chei, nu propoziții, pentru că panoul le redă în nouă limbi. Rackul nu are înregistrat un buget de putere. Una sau mai multe dintre mașinile din el nu își cunosc propriul consum rezervat. Nu există senzor.

Diferența contează pentru că sunt trei discuții diferite. Prima este o lipsă de date în fișa rackului. A doua este o lipsă de date la o mașină și spune ceva anume: suma pe care sunteți pe cale să o citiți are o gaură în ea. A treia nu este deloc o lipsă, este absența unui hardware pentru care nu am construit suport.

Axa puterii este locul unde asta doare. Dacă rackul nu are buget, nu există față de ce să măsurați, iar axa este necunoscută din acest motiv. Dacă rackul are un buget, dar o mașină amplasată nu are o cifră rezervată, axa este necunoscută dintr-un alt motiv, iar acesta este cazul pe care o implementare naivă îl greșește. Este foarte tentant să tratați un consum lipsă drept zero și să continuați adunarea. Asta produce un rack care pare încăpător și este plin, ceea ce este cel mai scump răspuns greșit pe care îl poate da acest sistem: cineva programează o livrare pe baza lui.

Regula este că necunoscutul de o parte face necunoscută întreaga axă. O sumă cu o gaură în ea nu este o sumă mai mică.

Axa care este mereu necunoscută

A cincea axă, puterea observată, întoarce de fiecare dată necunoscut. În acest produs nu există unitate de distribuție a energiei, nicio alimentare, nicio priză și niciun senzor de temperatură. Nu parțial, nu în spatele unui indicator: deloc.

Lucrul evident de făcut este să o lăsați deoparte până când există. Am pus-o pe ecran oricum, spunând că nu există senzor, iar motivul este ce ar face absența ei cititorului. Cu patru axe pe ecran, dintre care una etichetată putere, un om rezonabil conchide că cifra de putere este o măsurătoare. Nu este. Este un buget: ce a tastat cineva într-un formular drept consum așteptat al unei mașini, adunat.

Afișarea celei de-a cincea axe drept explicit necunoscută este ceea ce o ține cinstită pe a patra. O afirmație despre capacitate asamblată din date incomplete este exact modul de eșec împotriva căruia este scrisă întreaga această secțiune a proiectării, iar cea mai ieftină apărare împotriva lui este să numiți lucrul pe care nu l-ați măsurat.

Scorul făcut imposibil, nu interzis

Nimic din cele de mai sus nu supraviețuiește contactului cu un trimestru aglomerat dacă nu îl impune ceva. „Am convenit să nu le combinăm” este un comentariu, iar un comentariu nu poate eșua.

Așa că există un test care citește fișierul-sursă cu compilatorul TypeScript și afirmă trei lucruri despre el.

Nicio funcție exportată din acel fișier nu întoarce un number simplu. Prin urmare, nu există nimic în modul de mediat, nici măcar din greșeală.

Funcția care asamblează cele cinci citiri nu conține niciun operator aritmetic, niciun reduce și niciun Math. Ea parcurge registrul de axe și apelează fiecare cititor. Atât are voie să facă, iar orice cifră combinată s-ar naște neapărat acolo, pentru că acela este singurul loc în care toate cele cinci citiri sunt vizibile în același timp. Aceasta este a treia închidere.

Iar cuvintele în sine sunt interzise: o scanare respinge healthScore, rackHealth, overallScore, combinedScore și capacityScore, indiferent de scriere. Ultimul este grosier și l-am păstrat oricum, pentru că eșecul împotriva căruia păzește este cineva care vrea să fie de ajutor la patru și jumătate într-o vineri.

Rostul scrierii în acest fel nu este că o regulă nu poate fi încălcată. Este că încălcarea ei cere ștergerea unui test, iar ștergerea unui test este o linie într-un pull request despre care cineva va întreba. Adăugarea unei împărțiri între două numere care erau deja acolo, nu.

Am dovedit garda roșie înainte să ne bazăm pe ea, în două moduri separate: o expresie aritmetică în interiorul funcției care asamblează și o funcție exportată care întoarce un număr. Amândouă au fost apoi eliminate. O gardă care nu a eșuat niciodată este o gardă căreia nu i-ați verificat selectoarele.

Adăugarea unei axe trebuie să fie o eroare de compilare

Cele cinci axe stau într-un singur registru. Producătorii stau într-o înregistrare cu chei din acel registru, așa că o a șasea axă fără cititor este o eroare de tip, nu un rând lipsă în tăcere. Aceasta este a patra.

Asta acoperă codul. Nu acoperă ecranul, iar ecranul este locul în care o axă lipsă este cea mai periculoasă: pur și simplu nu apare, iar tabelul pare complet. Așa că o a doua gardă derivă lista de axe din registru și cere, pentru fiecare, o etichetă și un indiciu în toate cele nouă cataloage, o ramură proprie de randare în componentă și o ramură de necunoscut cu o propoziție tradusă pentru fiecare motiv din registrul de motive.

Garda aceea s-a meritat imediat. A găsit pe loc că axa puterii observate nu era numită nicăieri în componenta de randare, ceea ce este exact starea în care o axă produce o celulă goală în loc de o explicație, iar o celulă goală se citește ca zero. Scrierea de teste pentru fiecare axă nu ar fi putut găsi asta, din același motiv pentru care un test pentru fiecare caz nu poate găsi un caz lipsă: ar fi trebuit să știți deja că axa există.

Același raționament se aplică traducerii. Un cod de motiv fără o propoziție în spate este un spațiu gol într-o limbă pe care nu o citește nimeni din echipă, iar nouă cataloage sunt multe locuri în care se poate ascunde un spațiu gol.

Ce am nota

  1. Stabiliți în ce se măsoară fiecare răspuns înainte să stabiliți cum arată. Unitățile care nu pot fi adunate sunt cea mai ieftină apărare pe care o veți construi vreodată.
  2. Dați necunoscutului un motiv propriu pe fiecare axă și nu lăsați niciodată o intrare lipsă să devină un zero în drum spre o sumă.
  3. Țineți pe ecran axa pe care nu o puteți măsura, etichetată drept nemăsurată, ca axa de lângă ea să nu fie luată drept măsurătoare.
  4. Puneți interdicția într-un test care citește sursa, nu într-un comentariu, și dovediți testul roșu o dată înainte să vă bazați pe el.
  5. Derivați garda din registru, astfel încât adăugarea unei a șasea axe să fie zgomotoasă în cod și pe ecran, în loc să fie tăcută în amândouă.

Ca să fie limpede unde stă lucrul acesta: munca de logistică pentru centrul de date se află în spatele unui indicator de lansare care este oprit implicit și, peste el, în spatele unei setări pentru fiecare organizație, așa că nimic din toate acestea nu este ceva ce puteți cumpăra astăzi. Este forma pe care am construi-o din nou, iar cele cinci axe sunt partea de care suntem cel mai siguri. Întrebarea înrudită, cine are voie în general să scrie într-un rack și ce oprește de fapt două persoane să revendice același slot, se află în singura limită reală a ocupării unui rack.

Din munca la centrul de date de la Provibr.

Începeți cu o gazdă și un agent

Creați un cont, instalați agentul cu o singură comandă și conectați primul dumneavoastră host Proxmox. Perioada de probă durează 14 zile și nu cere date de plată.