Što je testiranje skalabilnosti? Učite s primjerom

⚡ Pametni sažetak

Testiranje skalabilnosti mjeri kako se aplikacija ponaša kada se opterećenje korisnika, količina podataka ili brzina transakcija povećaju ili smanje, otkrivajući točnu točku u kojoj performanse prestaju skalirati i identificirajući odgovorno usko grlo.

  • 🔘 Definicija: Nefunkcionalni test koji provjerava radi li sustav i dalje prihvatljivo kako potražnja raste.
  • ☑️ Dva smjera: Vertikalno skaliranje dodaje snagu jednom stroju; horizontalno skaliranje dodaje više strojeva iza balansera.
  • ✅ Ključni mjerni podaci: Vrijeme odziva, propusnost, korištenje CPU-a i memorije te korištenje mreže su tracked pri svakom koraku opterećenja.
  • 🧪 Metoda: Opterećenje raste u planiranim koracima sve dok metrika ne prijeđe svoj prag, koji označava granicu skalabilnosti.
  • 🛠️ alat: JMeter, k6, Gatling, Locust i LoadRunner generiraju distribuirano opterećenje i automatski bilježe rezultate.
  • 📈 Ishod: Planiranje kapaciteta postaje temeljeno na dokazima umjesto nagađanja, tako da izdanja preživljavaju skokove prometa.

Što je testiranje skalabilnosti

Što je testiranje skalabilnosti?

Testiranje skalabilnosti je metoda nefunkcionalnog testiranja koja mjeri performanse sustava ili mreže kada se broj korisničkih zahtjeva poveća ili smanji. Svrha testiranja skalabilnosti je osigurati da sustav može podnijeti predviđeno povećanje korisničkog prometa, količine podataka i učestalosti transakcija. Testira sposobnost sustava da zadovolji rastuću potražnju.

Testiranje skalabilnosti je podvrsta ispitivanje performansi, pa se koncentrira na ponašanje aplikacije kada se implementira na veći sustav ili se koristi pod prekomjernim opterećenjem. U Programsko inženjerstvo, Testiranje skalabilnosti mjeri točku u kojoj aplikacija prestaje skalirati i identificira razlog za to.

Zašto provoditi testiranje skalabilnosti?

Problemi s kapacitetom rijetko se pojavljuju tijekom funkcionalnog testiranja. Pojavljuju se na najprometniji trgovački dan u godini, kada započne marketinška kampanja ili kada skup podataka koji je tiho rastao dvije godine konačno uspori svaki upit. Testiranje skalabilnosti prvo otkriva ta ograničenja u kontroliranom okruženju. Konkretno, pomaže vam:

  • Odredite kako se aplikacija skalira s povećanjem radnog opterećenja i gdje se ta krivulja izravnava.
  • Odredite ograničenje broja istovremenih korisnika za web aplikaciju prije nego što vrijeme odziva postane neprihvatljivo.
  • Utvrdite degradaciju na strani klijenta i korisničko iskustvo pod opterećenjem, kao što je sporo renderiranje zaslona.
  • Odredite robusnost i degradaciju na strani poslužitelja, uključujući zasićenost CPU-a, curenje memorije i iscrpljenost skupa veza.

Odnos je najlakše prikazati kao krivulju: propusnost raste uz dodano opterećenje sve dok se resurs ne zasiti, nakon čega dodatni korisnici samo produžuju red čekanja.

Testiranje skalabilnosti mjeri performanse sustava kako se opterećenje povećava

Vrste testiranja skalabilnosti

Skalabilnost nije jedno svojstvo, pa plan testiranja obično pokriva više od jedne dimenzije. Četiri vrste u nastavku su one koje mjeri većina timova, a prve dvije određuju oblik samog testnog okruženja.

Tip Što je skalirano Što test dokazuje
Vertikalna skalabilnost (povećanje skale) CPU, memorija ili pohrana dodani jednom poslužitelju Koliko dodatnog opterećenja apsorbira jedan nadograđeni stroj i gdje se nalazi strop s jednim čvorom
Horizontalna skalabilnost (skaliranje) Dodatni poslužitelji, kontejneri ili čvorovi iza uravnoteživača opterećenja Raste li propusnost otprilike proporcionalno dodanim čvorovima ili je ograničavaju dijeljeni resursi
Funkcionalna skalabilnost Nove značajke, moduli ili usluge Može li se dodana funkcionalnost apsorbirati bez narušavanja postojećih transakcija
Administrativna skalabilnost Korisnici, zakupci, timovi ili okruženja za upravljanje Ostaju li uvođenje u posao, dozvole i praćenje funkcionalnima kako organizacija raste

Vertikalno skaliranje je jednostavnije jer se arhitektura rijetko mijenja, ali jedno računalo uvijek ima ograničenje. Horizontalno skaliranje uklanja to ograničenje i poboljšava toleranciju grešaka, nauštrb latencije mreže, konzistentnosti podataka i opterećenja koordinacije - sve to test mora mjeriti, a ne pretpostavljati.

Što testirati u testiranju skalabilnosti

Skalabilnost se procjenjuje na temelju mjerenja, a ne prikaza. Zabilježite sljedeće atribute pri svakom koraku učitavanja kako bi bio vidljiv trend, a ne samo konačni broj.

Atribut Što vam govori
Vrijeme odziva Vrijeme između korisničkog zahtjeva i odgovora sustava; trebalo bi ostati nepromijenjeno kako se konkurentnost povećava
Prijelaz zaslona Koliko brzo jedna stranica ili prikaz ustupa mjesto sljedećem pod opterećenjem
propusnost Količina obrađenih zahtjeva po jedinici vremena; plato označava granicu skalabilnosti
Mjerenja vremena Vrijeme sesije, vrijeme ponovnog pokretanja, vrijeme ispisa, vrijeme transakcije i vrijeme izvršavanja zadatka
Performanse u odnosu na broj korisnika Kako se svaka metrika pomiče kako se istovremeni korisnici dodaju u koracima
Zatražite cijene Zahtjevi u sekundi, transakcije u sekundi i pogoci u sekundi
Korištenje mreže Potrošena propusnost i latencija paketa između slojeva
Korištenje CPU-a i memorije Trošak resursa po transakciji; stalno rastuća brojka često signalizira curenje
Brojači web poslužitelja Zahtjevi i odgovori u sekundi, dubina reda čekanja i odbijene veze
Performanse pod opterećenjem Kombinirano ponašanje nakon što se svaka metrika pročita zajedno na vrhuncu

Strategija testiranja za testiranje skalabilnosti

Strategija testiranja skalabilnosti razlikuje se ovisno o vrsti aplikacije koja se testira. Ako aplikacija pristupi baza podataka, parametri testiranja uključivat će veličinu baze podataka u odnosu na broj korisnika i tako dalje.

Preduvjeti za testiranje skalabilnosti

  • Sposobnost raspodjele opterećenja — Provjerite omogućuje li alat za ispitivanje opterećenja generiranje opterećenja iz više strojeva i upravljanje s centralne točke.
  • Operating sustav — Provjerite što Operativnih sustava Agenti za generiranje opterećenja i glavni program za testiranje opterećenja rade pod njima.
  • Procesor — Provjerite koja je vrsta CPU-a potrebna za virtualnog korisničkog agenta i glavni procesor za testiranje opterećenja.
  • memorija — Provjerite koliko memorije bi bilo dovoljno za virtualnog korisničkog agenta i glavnog servera za testiranje opterećenja.
  • Ispitna okolina — Provjerite da okruženje ispitivanja dovoljno dobro odražava proizvodnju da se rezultati mogu prenijeti.

Kako napraviti testiranje skalabilnosti

  1. Definirajte ponovljivi proces za izvršavanje testova skalabilnosti tijekom životnog ciklusa aplikacije
  2. Odredite kriterije za skalabilnost
  3. Uži izbor softverskih alata potrebnih za izvođenje testa opterećenja
  4. Postavite okolinu testiranja i konfigurirajte hardver potreban za izvođenje testova skalabilnosti
  5. Planirajte testne scenarije kao i testove skalabilnosti
  6. Izradite i provjerite skriptu virtualnog korisnika
  7. Stvorite i provjerite scenarije testiranja opterećenja
  8. Izvršite testove
  9. Ocijenite rezultate
  10. Generirajte potrebna izvješća

Plan testiranja skalabilnosti

Prije nego što zapravo stvorite testove, razvijte detaljan plan testiranja. Važan je korak osigurati da test odgovara zahtjevima aplikacije.

Slijede atributi za stvaranje dobro definiranog Plan testiranja za testiranje skalabilnosti.

  • Koraci za skripteTestni skript trebao bi imati detaljne korake koji određuju točne radnje koje bi korisnik izvršio.
  • Podaci o vremenu izvođenjaPlan testiranja trebao bi odrediti sve podatke tijekom izvođenja koji su potrebni za interakciju s aplikacijom.
  • Testovi vođeni podacimaAko skripte trebaju različite podatke tijekom izvođenja, potrebno je razumjeti sva polja koja zahtijevaju te podatke.

Primjer testiranja skalabilnosti

Razmotrimo online trgovinu koja očekuje 2,000 istovremenih kupaca tijekom sezonske rasprodaje. Tim se prvo dogovori o kriteriju prolaza: transakcija plaćanja mora se završiti za manje od tri sekunde za 95 posto korisnika, sa stopom pogreške ispod jedan posto.

Test zatim pokreće isti skript za pregledavanje-pretraživanje-košarica-naplatu na 250, 500, 1,000, 1,500 i 2,000 virtualnih korisnika. Vrijeme odziva drži se oko dvije sekunde do 1,000 korisnika, smanjuje se na 2.8 sekundi na 1,500 i doseže devet sekundi na 2,000, dok je CPU baze podataka na 98 posto. Granica skalabilnosti je stoga otprilike 1,500 korisnika, a usko grlo je sloj baze podataka - a ne aplikacijski poslužitelji koje je tim planirao dodati.

Alati za testiranje skalabilnosti

Testiranje skalabilnosti zahtijeva alat koji može generirati opterećenje s nekoliko strojeva odjednom i centralno izvještavati o rezultatima. Izbor obično slijedi primarni jezik tima i protokole koji se testiraju.

Oruđe Scripting Najprikladniji za
Apache JMeter GUI plus XML planovi testiranja, Java temelji se Široka pokrivenost protokola, uključujući JDBC, JMS, LDAP i SOAP
Grafana k6 JavaSkripta ili TypeScript API i mikroservisni testovi povezani u CI/CD cjevovod
Gatling Java, Kotlin ili Scala DSL Visok broj virtualnih korisnika po injektoru s detaljnim HTML izvješćima
Skakavac Običan Python Python timovi koji trebaju proširiti klijenta izvan HTTP-a
LoadRunner C-slične skripte snimljene u VuGenu Velika poduzeća sa starim i paketnim aplikacijama

Trkači hostirani u oblaku kao što su BlazeMeter, LoadView i Gatling Enterprise nalaze se na vrhu nekoliko ovih tražilica i vrijedi ih razmotriti kada testu trebaju deseci tisuća virtualnih korisnika ili promet iz više geografskih regija. Širi pregled kategorije dostupan je u vodiču za alati za testiranje performansi.

Izazovi i najbolje prakse u testiranju skalabilnosti

Najrazočaravajući rezultati skalabilnosti tracnatrag na postavke testa, a ne na aplikaciju. To su problemi koji se ponavljaju i navike koje ih sprječavaju.

Uobičajeni izazovi

  • Premala okruženja — Ispitni sustav s upola manje produkcijske memorije prijavljuje usko grlo koje ne postoji u produkciji.
  • Nerealni modeli radnog opterećenja — Skripte bez vremena razmišljanja ili varijacije podataka pogađaju predmemorije koje bi stvarni korisnici propustili.
  • Bučni rezultati — Automatsko skaliranje, sakupljanje smeća i dijeljeni hardver u oblaku čine dva identična pokretanja neskladnima.
  • Tanka uočljivost — Bez metrike na strani poslužitelja, spor rezultat pokazuje da je nešto pokvareno, ali ne i što.
  • Trošak — Generiranje vrlo visoke konkurentnosti zahtijeva vlastitu flotu generatora opterećenja, što je lako podcijeniti.

Najbolje prakse

  • Prije prvog pokretanja dogovorite kriterije prolaza, kao što su percentil vremena odziva i gornja granica stope pogrešaka.
  • Povećajte opterećenje u planiranim koracima i zadržite svaki korak dovoljno dugo da se sustav smiri.
  • Razlikujte testne podatke po virtualnom korisniku kako keširanje ne bi laskalo rezultatima.
  • Prikupljajte metrike aplikacija, baza podataka i infrastrukture uz brojke na strani klijenta.
  • Pohranite testne skripte u kontrolu verzija i pokrenite kratku provjeru skalabilnosti na svakoj izradi, a zatim potpunu provjeru prije objavljivanja.
  • Usporedite trendove među verzijama umjesto da procjenjujete jedno izvješće zasebno.

Testiranje skalabilnosti u odnosu na testiranje opterećenja

To dvoje se često miješa jer oba primjenjuju opterećenje. Razlika leži u pitanju na koje svako odgovara: Testiranje skalabilnosti pita koliko sustav može rasti, dok ispitivanje opterećenja pita može li se nositi s već očekivanim opterećenjem.

Temelj Testiranje skalabilnosti Testiranje opterećenja
Fokus Fokusira se na performanse vaših web stranica, softvera, hardvera i aplikacija kada se mijenja veličina ili volumen sustava kako bi se zadovoljile rastuće potrebe. Testiranje opterećenja fokusira se na testiranje aplikacije pod velikim opterećenjima kako bi se utvrdilo u kojem trenutku dolazi do prekida vremena odziva sustava.
Uzorak opterećenja Teret se povećava u koracima, a resursi se mogu dodavati između koraka Opterećenje se održava na očekivanom vrhuncu tijekom fiksnog trajanja
Odgovoreno na pitanje Koliko daleko se ovaj sustav može razviti i što ga ograničava? Ispunjava li ovaj sustav danas svoje dogovorene ciljeve?
Tipični izlaz Ograničenje skalabilnosti, usko grlo i plan kapaciteta Prolaz ili pad u odnosu na ciljeve vremena odziva i propusnosti

Oboje sjede ispod nefunkcionalno testiranje kišobran uz testiranje otpornosti na stres, testiranje šiljaka, ispitivanje izdržljivosti i ispitivanje volumena, a zrela strategija performansi obično ih pokreće nekoliko uz iste skripte.

Pitanja i odgovori

Modeli strojnog učenja čitaju povijesne podatke o pokretanju kako bi označili koja je metrika prva odstupila, odvojili stvarne regresije od šuma u oblaku i predvidjeli razinu opterećenja pri kojoj će se resurs zasititi. Nekoliko komercijalnih platformi sada to nudi kao automatiziranu analizu nakon pokretanja.

Da. Copilot i slični agenti naručuju k6 ili Locust scenarije, generiraju parametrizirane testne podatke i brzo određuju korake CI cjevovoda. Inženjer performansi i dalje mora postaviti realna vremena razmišljanja, kombinacije opterećenja i kriterije prolaza, jer oni proizlaze iz ponašanja u produkciji.

Skalabilnost je sposobnost rasta kada se resursi dodaju, bilo da to traje nekoliko minuta ili mjeseci. Elastičnost je sposobnost automatskog dodavanja i otpuštanja tih resursa kako se potražnja mijenja, a zatim povratka na manji otisak nakon toga.

Počnite znatno ispod očekivanog vrha, često deset do dvadeset posto, kako biste potvrdili rad scenarija i praćenja. Povećajte broj u ravnomjernim koracima prema cilju i izvan njega, budući da se zanimljivo ponašanje pojavljuje između dva koraka, a ne na jednom broju.

Jedno uredsko računalo ne može generirati desetke tisuća sesija i ne može reproducirati latenciju koju doživljava korisnik u drugoj regiji. Testiranje u oblaku na zahtjev isporučuje generatore opterećenja u nekoliko regija i oslobađa ih kada se izvođenje završi.

Pokrenite kratku provjeru svake verzije kako bi se regresije pojavile unutar jednog dana, a potpuno postepenu provjeru prije bilo kojeg izdanja koje mijenja arhitekturu, shemu baze podataka ili očekivanja prometa. Čekanje do tjedna prije izdanja ne ostavlja vremena za ispravljanje onoga što test pronađe.

Osim gubitka transakcija tijekom razdoblja prekida, spore stranice guraju posjetitelje konkurentima i štete rangiranju u pretraživanju. Za maloprodaju i prodaju ulaznica, kvar se obično događa na dan s najvećim prihodom u godini, što je upravo kada je promet bio predvidljiv.

Skriptiranje u Javaskripta, Python or Java, praktično poznavanje HTTP-a i ponašanja baze podataka, praktično čitanje metrika poslužitelja i kontejnera te dovoljno statističkih podataka za razlikovanje percentila od prosjeka. Poznavanje oblaka i CI/CD-a postalo je gotovo neophodno.

Sažmite ovu objavu uz: