Importanța scalabilității în proiectarea de software
Scalabilitatea este o componentă esențială a software-ului de întreprindere. Prioritizarea acesteia de la început duce la costuri de întreținere mai mici, la o experiență mai bună pentru utilizatori și la o agilitate mai mare.
Proiectarea de software este un act de echilibru în care dezvoltatorii lucrează pentru a crea cel mai bun produs în limitele de timp și de buget ale clientului.
Nu se poate evita necesitatea unui compromis. Trebuie făcute compromisuri pentru a îndeplini cerințele unui proiect, indiferent dacă acestea sunt tehnice sau financiare.
Din păcate, prea des, companiile prioritizează costul în detrimentul scalabilității sau chiar resping complet importanța acesteia. Acest lucru este, din păcate, comun în inițiativele de big data, unde problemele de scalabilitate pot scufunda un proiect promițător.
Scalabilitatea nu este o „caracteristică bonus”. Este calitatea care determină valoarea pe durata de viață a software-ului, iar construirea cu scalabilitatea în minte economisește atât timp cât și bani pe termen lung.
Ce este scalabilitatea?
Un sistem este considerat scalabil atunci când nu trebuie reproiectat pentru a menține o performanță eficientă în timpul sau după o creștere abruptă a sarcinii de lucru.
„Sarcina de lucru” se poate referi la utilizatori simultani, la capacitatea de stocare, la numărul maxim de tranzacții gestionate sau la orice altceva care împinge sistemul dincolo de capacitatea sa inițială.
Scalabilitatea nu este o cerință de bază a unui program, în sensul că un software nescalabil poate funcționa bine cu o capacitate limitată.
Cu toate acestea, ea reflectă capacitatea software-ului de a crește sau de a se schimba în funcție de cerințele utilizatorului.
Care software care se poate extinde dincolo de funcțiile sale de bază – mai ales dacă modelul de afaceri depinde de creșterea sa – ar trebui să fie configurat pentru scalabilitate.
Beneficiile unui software scalabil
Scalabilitatea are atât beneficii pe termen lung, cât și pe termen scurt.
La început îi permite unei companii să achiziționeze doar ceea ce are nevoie imediat, nu fiecare funcție care ar putea fi utilă pe parcurs.
De exemplu, o companie care lansează un program pilot de inteligență a datelor ar putea alege un pachet masiv de analiză de întreprindere, sau ar putea începe cu o soluție care se ocupă doar de funcțiile de care are nevoie la început.
O alegere populară este un tablou de bord care extrage rezultatele din sursele lor de date primare și din software-ul de întreprindere existent.
Când devin suficient de mari pentru a utiliza mai multe programe de analiză, acele fluxuri de date pot fi adăugate în tabloul de bord în loc să forțeze compania să jongleze cu mai multe programe de vizualizare sau să construiască un sistem complet nou.
Construirea în acest mod pregătește pentru creșterea viitoare, creând în același timp un produs mai suplu care se potrivește nevoilor actuale fără o complexitate suplimentară.
De asemenea, necesită un efort financiar inițial mai mic, ceea ce reprezintă un considerent important pentru directorii îngrijorați de mărimea investițiilor în big data.
Scalabilitatea lasă, de asemenea, loc pentru schimbarea priorităților. Acel pachet de analiză de serie ar putea să-și piardă relevanța pe măsură ce o companie se schimbă pentru a răspunde cerințelor unei piețe în evoluție.
Alegerea unor soluții scalabile protejează investiția inițială în tehnologie. Întreprinderile pot continua să folosească același software pentru mai mult timp, deoarece acesta a fost conceput pentru a crește odată cu ele.
Când vine momentul schimbării, construirea pe un software solid și scalabil este considerabil mai puțin costisitoare decât încercarea de a adapta programe mai puțin agile.
Există, de asemenea, un timp mai scurt de „rampă” pentru a aduce noi caracteristici online decât pentru a implementa un software complet nou.
Ca un beneficiu secundar, personalul nu va avea nevoie de prea multă instruire sau persuasiune pentru a adopta acel sistem actualizat. Aceștia sunt deja familiarizați cu interfața, astfel încât lucrul cu funcțiile suplimentare este privit mai degrabă ca un bonus decât ca o corvoadă.
Rezultatul eșecurilor de scalare
Atunci, ce se întâmplă atunci când software-ul nu este scalabil?
La început, punctul slab este greu de observat. Volumul de lucru este ușor în primele etape ale unei aplicații. Cu relativ puțini utilizatori simultani, nu există o cerere prea mare asupra arhitecturii.
Când volumul de muncă crește, apar problemele. Cu cât software-ul colectează mai multe date stocate sau utilizatori simultani, cu atât mai multă presiune este pusă pe arhitectura software-ului.
Limitațiile care nu păreau importante la început devin o barieră în calea productivității. Patch-urile pot atenua unele dintre problemele de la început, dar patch-urile adaugă complexitate.
Complexitatea face ca diagnosticarea problemelor în permanență să fie mai anevoioasă (traducere: mai scumpă și mai puțin eficientă).
Ca urmare a creșterii volumului de lucru peste capacitatea de scalare a software-ului, performanța scade.
Utilizatorii se confruntă cu timpi de încărcare lenți deoarece serverul are nevoie de prea mult timp pentru a răspunde la solicitări. Alte probleme potențiale includ scăderea disponibilității sau chiar pierderea datelor.
Toate acestea descurajează utilizarea viitoare. Angajații vor găsi soluții de rezolvare pentru un software nesigur pentru a-și face propriile lucrări.
Aceasta pune compania în pericol de o încălcare a securității datelor sau mai rău.
Când software-ul este orientat către clienți, lipsa de fiabilitate crește potențialul de dezabonare.
Google a descoperit că 61% dintre utilizatori nu vor mai da o a doua șansă unei aplicații dacă au avut o primă experiență proastă. În schimb, 40% merg direct la un produs al unui concurent.
Problemele de scalabilitate nu sunt doar o greșeală de începător făcută de companiile mici. Chiar și Disney a avut probleme cu lansarea inițială a aplicației Applause, care trebuia să ofere telespectatorilor o modalitate suplimentară de a interacționa cu emisiunile Disney preferate. Aplicația nu a putut face față avalanșei de utilizatori simultani de streaming video.
Fanii frustrați au lăsat recenzii negative până când aplicația a ajuns să aibă o singură stea în magazinul Google Play. Oficialii Disney au fost nevoiți să retragă aplicația pentru a repara pagubele, iar publicitatea negativă a fost atât de intensă încât aceasta nu a mai revenit niciodată online.
Stabilirea priorităților
Câteva afaceri nu reușesc să prioritizeze scalabilitatea deoarece nu văd utilitatea imediată a acesteia.
Scalabilitatea este dată la o parte în favoarea vitezei, a ciclurilor de dezvoltare mai scurte sau a costurilor mai mici.
Există de fapt unele cazuri în care scalabilitatea nu este o prioritate principală.
Software-ul care este menit să fie un prototip sau o dovadă de concept de volum redus nu va deveni suficient de mare pentru a cauza probleme.
La fel, software-ul intern pentru companiile mici cu o limită fixă mică de utilizatori potențiali poate stabili alte priorități.
În cele din urmă, atunci când conformitatea ACID este absolut obligatorie, scalabilitatea trece în plan secundar față de fiabilitate.
De regulă, totuși, scalabilitatea este mai ușoară și mai puțin consumatoare de resurse atunci când este luată în considerare de la început.
Pentru început, alegerea bazei de date are un impact uriaș asupra scalabilității. Migrarea la o nouă bază de date este costisitoare și consumatoare de timp. Nu este ceva ce se poate face cu ușurință mai târziu.
Principii de scalabilitate
Câțiva factori afectează scalabilitatea generală a software-ului:
Utilizare
Utilizarea măsoară numărul de utilizatori sau conexiuni simultane posibile. Nu ar trebui să existe limite artificiale în ceea ce privește utilizarea.
Creșterea acesteia ar trebui să fie la fel de simplă ca și punerea la dispoziție a mai multor resurse pentru software.
Date maxime stocate
Acest lucru este deosebit de relevant pentru site-urile care prezintă o mulțime de date nestructurate: conținut încărcat de utilizatori, rapoarte ale site-ului și unele tipuri de date de marketing.
Proiectele de știință a datelor intră, de asemenea, în această categorie. Cantitatea de date stocate de aceste tipuri de conținut ar putea crește în mod dramatic și neașteptat.
Dacă volumul maxim de date stocate poate crește rapid depinde foarte mult de stilul bazei de date (servere SQL vs. NoSQL), dar este, de asemenea, esențial să se acorde atenție indexării adecvate.
Codul
Dezvoltatorii neexperimentați tind să treacă cu vederea considerațiile legate de cod atunci când planifică scalabilitatea.
Codul ar trebui să fie scris astfel încât să poată fi adăugat sau modificat fără a refactoriza codul vechi. Dezvoltatorii buni urmăresc să evite duplicarea efortului, reducând dimensiunea și complexitatea generală a bazei de cod.
Aplicațiile cresc în dimensiune pe măsură ce evoluează, dar menținerea unui cod curat va minimiza efectul și va preveni formarea de „cod spaghete”.
Scalarea în afară vs. scalarea în sus
Scalarea în sus (sau „scalarea pe verticală”) implică creșterea prin utilizarea unui hardware mai avansat sau mai puternic. Spațiul pe disc sau o unitate centrală de procesare (CPU) mai rapidă este utilizată pentru a face față sarcinii de lucru crescute.
Scaling up oferă performanțe mai bune decât scaling out. Totul este conținut într-un singur loc, permițând randamente mai rapide și mai puțină vulnerabilitate.
Problema cu scalarea în sus este că nu există prea mult spațiu pentru a crește. Hardware-ul devine mai scump pe măsură ce devine mai avansat. La un moment dat, întreprinderile se lovesc de legea randamentelor descrescătoare în ceea ce privește achiziționarea de sisteme avansate.
De asemenea, este nevoie de timp pentru a implementa noul hardware.
Din cauza acestor limitări, scalarea pe verticală nu este cea mai bună soluție pentru software-ul care trebuie să crească rapid și cu puțin timp înainte.
Scalarea în afara (sau „scalarea pe orizontală”) este mult mai larg utilizată în scopuri de întreprindere.
Când se extinde, software-ul crește folosind mai mult hardware – nu mai avansat – și distribuind sarcina de lucru crescută pe noua infrastructură.
Costurile sunt mai mici, deoarece serverele sau procesoarele suplimentare pot fi de același tip utilizat în prezent (sau de orice tip compatibil).
Este posibil ca extinderea să aibă loc mai repede, de asemenea, deoarece nimic nu trebuie să fie importat sau reconstruit.
Există, totuși, un ușor compromis în ceea ce privește viteza. Software-ul scalat orizontal este limitat de viteza cu care serverele pot comunica.
Din păcate, diferența nu este suficient de mare pentru a fi observată de majoritatea utilizatorilor și există instrumente care îi ajută pe dezvoltatori să minimizeze acest efect. Ca urmare, extinderea este considerată o soluție mai bună atunci când se construiesc aplicații scalabile.
Ghiduri pentru construirea de sisteme foarte scalabile
Este atât mai ieftin, cât și mai ușor să se ia în considerare scalabilitatea în timpul fazei de planificare. Iată câteva dintre cele mai bune practici pentru încorporarea scalabilității încă de la început:
Utilizați software de echilibrare a sarcinii
Software de echilibrare a sarcinii este esențial pentru sistemele cu infrastructură distribuită (cum ar fi aplicațiile cu scalare orizontală).
Acest software utilizează un algoritm pentru a distribui sarcina de lucru pe servere pentru a se asigura că niciun server nu este copleșit. Este o necesitate absolută pentru a evita problemele de performanță.
Localizarea contează
Un software scalabil face cât mai mult posibil în apropierea clientului (în stratul aplicației). Reducerea numărului de ori în care aplicațiile trebuie să navigheze traficul mai intens în apropierea resurselor de bază duce la viteze mai mari și la mai puțin stres asupra serverelor.
Edge computing este un alt aspect care trebuie luat în considerare. Având în vedere că tot mai multe aplicații necesită aplicații cu utilizare intensivă a resurselor, păstrarea a cât mai multă muncă posibilă pe dispozitiv reduce impactul zonelor cu semnal slab și al întârzierilor de rețea.
Cachetați acolo unde este posibil
Să fiți conștienți de problemele de securitate, dar cache-ul este o modalitate bună de a nu fi nevoiți să executați aceeași sarcină la nesfârșit.
Conduceți cu API
Utilizatorii se conectează printr-o varietate de clienți, astfel încât conducerea cu API care nu presupun un anumit tip de client poate servi tuturor acestora.
Procesare asincronă
Se referă la procesele care sunt separate în pași discreți care nu trebuie să aștepte ca cel anterior să fie finalizat înainte de procesare.
De exemplu, unui utilizator i se poate afișa un mesaj „trimis!” în timp ce e-mailul este încă în procesare din punct de vedere tehnic.
Procesarea asincronă elimină unele dintre blocajele care afectează performanța pentru software-ul la scară largă.
Limitați accesul concurent la resurse limitate
Nu dublați eforturile. Dacă mai multe cereri solicită același calcul de la aceeași resursă, lăsați-o pe prima să termine și folosiți doar acel rezultat. Acest lucru adaugă viteză, reducând în același timp presiunea asupra sistemului.
Utilizați o bază de date scalabilă
Bazele de date NoSQL tind să fie mai scalabile decât SQL. SQL scalează destul de bine operațiile de citire, dar când vine vorba de operațiile de scriere intră în conflict cu restricțiile menite să impună principiile ACID.
Scalarea NoSQL necesită o aderență mai puțin strictă la aceste principii, așa că, dacă respectarea ACID nu este o preocupare, o bază de date NoSQL poate fi alegerea potrivită.
Considerați soluțiile PaaS
Platform-as-a-service ușurează o mulțime de probleme de scalabilitate, deoarece furnizorul PaaS gestionează scalarea. Scalarea poate fi la fel de simplă ca și actualizarea nivelului de abonament.
Consultați FaaS
Function-as-a-service a evoluat din PaaS și este foarte strâns legată. Calculul fără server oferă o modalitate de a utiliza doar funcțiile care sunt necesare la un moment dat, reducând solicitările inutile asupra infrastructurii back-end.
FaaS este încă în curs de maturizare, dar ar putea merita să fie analizat ca o modalitate de a reduce costurile operaționale, îmbunătățind în același timp scalabilitatea.
Nu uitați de întreținere
Pregătiți software-ul pentru testarea și întreținerea automată, astfel încât, atunci când crește, munca de întreținere să nu vă scape de sub control.
Construiți cu un ochi spre viitor
Prioritizarea scalabilității vă pregătește afacerea pentru succes. Luați-o în considerare din timp și veți culege beneficiile în agilitate atunci când este cel mai necesar.
Cercetați un software care poate crește odată cu compania dumneavoastră? Stabiliți o întâlnire gratuită cu unul dintre dezvoltatorii noștri pentru a discuta despre unde trebuie să ajungeți și cum vă putem duce acolo!
.