Razvan Burz

de Razvan Burz

Dar eu unde votez? Exemplu pentru utilizarea cloud-ului.

Anul trecut am achiziționat un apartament în Cluj-Napoca. Am învățat cu această ocazie o mulțime de chestii referitoare la ce înseamnă să achiziționezi așa ceva în Cluj-Napoca, unde oricum prețurile nu reflectă cu nimic mai mult decât lăcomia comercianților locali și ai celor implicați în tot lanțul acesta. Având în vedere că am modificat adresa în Municipiu, nu știm exact unde votăm în 26 mai 2019.

În 2019, aflu de pe net

Am înțeles că s-au operat modificări în ceea ce privește arondările la secțiile de vot. Nu că am fi știut înainte exact unde suntem arondați. M-am bazat că, fiind în anul 2019, în Muncicipiul Cluj-Napoca (al doilea oraș pe care îl prefer, în lume, după Chambéry, France), pot găsi datele necesare apelând la nou-realizatul website al Primăriei Municipiului Cluj-Napoca.

Vot

Ei bine, m-am înșelat!

Norișori pufoși

Știi deja că printre avantajele cloud-ului se numără și scalabilitatea plus elasticitatea. Principiul este simplu: cresc request-urile, crești resursele, le multiplici, pui un load-balancer în față și gata. Scad requesturile, procedez exact invers. Primești factura pentru cât folosești. Simplu! Ca la apă, gaz, curent, combustibil sau alte servicii.

Partea faină este că aceste modificări le poți face:

  • din portalul de administrare
  • din CLI/PowerShell
  • prin apeluri direct către API
  • din scripturi sau worker-e

În trecut mă lăudam că aveam trecute aceste capabilități în CV. Acum se fac aproape instantaneu și nu trebuie să știi prea multe în acest sens. Folosești sliderele și în back-end se întâmplă magia.

Înapoi la oile noastre

Deci, se făcea că eram în data de 26 mai 2019, zi de alegi în două părți: Europarlamentare și referendum pentru justiție, într-unul dintre cele mai mari și aglomerate cartiere din Cluj-Napoca și atât eu cât și soția mea doream să aflăm unde mergem să ne exercităm dreptul ogligativitatea de a vota.

Eroare la conectarea la baza de date

Locuind în Cluj-Napoca de 34 de ani, am rămas oarecum închis în această bulă și mă gândeam că, în 2019 fiind, voi putea avea acces la locația secției de votare la care suntem arondați prin intermediul super-autostrăzii informației (cum spuneau pe vremuri americanii). Ei bine, încerc să intru pe website-ul Primăriei Municipiului Cluj-Napoca pentru detalii, in jurul orei 10:10 AM și... eroare la stabilirea unei conexiuni cu baza de date, iar la următorul request loading... și așa rămâne până la timeout.

Presupun o problemă pe telefon și mă mut la iMac. Aceeași problemă în Safari. Mă uit în logurile de pe router, poate e vreo problemă, dar aud pe fiică-mea ca se uită liniștită la Paw Patrol pe HBO Go, iar în router intră 2 conexiuni de fibră (1000 mbps rezidențial și 300 mbps business). Netul merge cu viteză, load balancer-ul de pe router zburdă și conexiunea este stabilă și rapidă.

Aha, deci problema e pe site-ul Primăriei Municipiului Cluj-Napoca!

Problema lor

La fel cum pățește pe cam orice website al unei instituții a statului (apropo, statul în fund este cel mai vechi stat din lume), când sunt prea multe request-uri și nu mai răspunde în timp util, rezultă un timeout.

Practic cererile crează un DoS pe aceste website-uri, ducând la o gâtuire și încetinire a serverului pentru resursele alocate website-ului respectiv sau chiar a web serverului care servește respectivul website.

Soluția propusă de mine

Deși nimeni din cadrul Primariei Cluj-Napoca sau din cadrul entității juridice care a realizat arhitectura și UX-ul website-ului Primăriei nu m-a întrebat pe mine ce aș face și cum aș proceda să realizez un astfel se site, ofer clienților servicii de acest gen de 10 ani și deci cred că am un cuvânt se spus în acest sens.

Website-ul Primăriei Cluj-Napoca este, în prezent hostat pe servere ale Hurricane Electric. Nu știu dacă sunt servere dedicate (având în vedere că HE oferă servicii de colocare sunt mari șanse) sau sunt doar VM-uri (mașini virtuale care partajează resurse cu altele pe același server fizic).

Problema serverelor dedicate sau VM-urilor este ca nu sunt concepute pentru scalabilitate și elasticitate, alocarea/dealocarea de resurse fiind ceva mai dificil de realizat în intervale scurte, pe bază de triggeri sau prin intermediul unui script rapid peste un API.

Având în vedere că la Cluj-Napoca, un oraș universitar, care anual găzduiește peste 90 000 de studenți, foarte mulți dintre acești studenți sunt din afara localității și aceștia trebuie să găsească repede modalitatea și secția de votare. Prin faptul că un website se încarcă lent sau face drop la request-uri pentru a evita un DoS duce exact la renunțarea din partea acestora de a mai participa la vot. Știi și tu cât de nerăbdatori sunt milenialii și generațiile care îi urmează, obișnuiți să primească totul din 2-3 clic-uri și în maxim 30 de secunde...

Pe de altă parte, lipsa la vot este și dorința celor cu trandafir de la Moldova, care mizează pe acest lucru și nu face bine ca din cauza unor limitări tehnice să le dăm apă la moară chiar lor!

Astfel, având în vedere datele de mai sus, propunerea mea pentru traficul crescut, ocazional, era urcarea unor secțiuni/pagini ale website-ului Primariei Cluj-Napoca, în special cele care menționează sau faciliteaza accesul la secțiile de votare și arondări, printr-un subdomeniu diferit, în cloud.

Aș fi făcut un subdomeniu similar cu votez.e-primariaclujnapoca.ro (neapărat disponibil doar prin HTTPS), pe care l-aș fi hostat la un furnizor de servicii de cloud, precum Microsoft Azure sau Amazon AWS (primul este preferatul nostru).

Luând exemplul cu Microsoft Azure, instanțiam temporar un Web App (cu tot cu baza de date), pentru un credit gratuit de până la 200 USD iar endpoint-ul era chiar URL-ul de mai sus. Cu puțin cod .NET pot vedea și scala dinamic instanțele de Web App, adăuga resurse sau reduce numărul de resurse în funcție de load după principiul: resursele sunt la 75%-80% timp de 5 minute, adaugă instanțe; resursele sunt la sub 30% timp de 10 minute, redu numărul instanțelor. Load balancer-ul este instanțiat și setat complet automat ca parte a serviciului.

Bineînțeles că, eu fiind eu, aș fi optat ca DNS providerul să fie CloudFlare și nu Hurricane Electric, chiar și pe un plan free. CloudFlare ofera, de asemenea, un nivel adițional de caching care permite ca unele request-uri să treacă prin serverele lor pentru a le servi utilizatorilor și astfel doar un nivel scăzut de trafic ar ajunge la serverele Primăriei, hostate la HE.

Ce se întâmplă în background?

În background, când un request vine către URL-ul propus mai sus, acest request este preluat de CloudFlare. Acesta verifică dacă poate servi din cache-ul CF acel response. Dacă există conținut care nu s-a modificat, returnează pagina. În cazul în care conținutul s-a modificat, request-ul este trimis către serverul care hostează serviciul (în cazul prezentat, Microsoft Azure), care, la rândul său verifică dacă instanțele de Web App pot servi response-ul. În cazul în care load-ul pe resurse este sub valoarea stabilită mai sus, response-ul este trimis către vizitator, în caz contrar, se suplimentează resursele și load balancer-ul din fața acestor instanțe va deservi următorul load.

Nu spun că dacă s-ar fi utilizat cloud-ul toate request-urile ar fi fost servite corect și complet, doar că rata de failure ar fi fost mult mai mică. Totuși cu puțină experiență și experimentare se poate scala corect, rapid și foarte elastic. La urma-urmei cloud-ul chiar pentru astfel de situații a fost realizat (situații de scalare dinamică, rapidă, având consum minim necesar de resurse).

Rezultatul

La final, am reușit să mergem la vot (fiica mea fiind cea mai entuziasmată, pare-se, secția fiind în cadrul unei grădinițe din cartier). Am găsit secția la care eram arondați, în jurul orei 11:50 AM, deoarece lumea era fie în trafic (era o aglomerație de mașini în trafic cum rar am mai văzut în acea zonă a Cluj-Napoca într-o zi de duminică, la acea oră) fie pe la slujba de duminică sau se pregăteau de masa de prânz sau, așa cum e moda, la mall, după vot.

Numărul de request-uri a scăzut astfel pe serverul care găzduia website-ul care ne interesa și am reușit să aflăm răspunsul la întrebarea "Eu unde votez?!".

Cum am scris acest articol din 26 mai și până în 27 mai 2019 și deși această opinie este doar tangențială scopului prezentului articol, mă bucur mult că am fost la vot și mă bucură rezultatele de până acum.

Acestea fiind spuse, sper ca cei care realizează arhitecturile aplicațiilor web cu necesități sezoniere crescute să ia în considerare opțiunile la dispoziție din 2007 încoace (cloud-ul public) pentru evitarea situațiilor penibile de acest gen.

Spor la succes, Răzvan Burz

Ultimele două articole
Razvan Burz

Despre Razvan Burz

Răzvan este antreprenor, senior software developer, cu o vechime de peste 13 ani în software și web development, tată, soț, consultant pentru companii din România și din afara țării, public speaker, podcaster (de peste 10 ani) și blogger (de peste 11 ani). Răzvan conduce și gestionează echipele business-urilor sale care cuprind Burz Group (holding company), Burzcast, Burz Media și Burzware.

Categorii
Ultimele episoade din podcast
Etichete prezente

Poți obține conținut audio, video și text adițional exclusiv prin Burzcast™ VIP

Fă parte din comunitatea VIP, împreună cu alte sute de români minunați!

Abonează-te la newsletter!