Co je testování škálovatelnosti? Učte se s příkladem

⚡ Chytré shrnutí

Testování škálovatelnosti měří, jak se aplikace chová při stoupání nebo poklesu uživatelské zátěže, objemu dat nebo rychlosti transakcí, a odhaluje přesný bod, ve kterém se výkon přestává škálovat, a identifikuje příčinné úzké hrdlo.

  • 🔘 Definice: Nefunkční test, který kontroluje, zda systém stále funguje přijatelně s rostoucí poptávkou.
  • ☑️ Dva směry: Vertikální škálování přidává výkon jednomu stroji; horizontální škálování přidává za balancer další stroje.
  • (Tj. Klíčové metriky: Doba odezvy, propustnost, využití CPU a paměti a využití sítě jsou tracpři každém kroku zatížení.
  • 🧪 Metoda: Zatížení se zvyšuje v plánovaných krocích, dokud metrika nepřekročí svou prahovou hodnotu, která označuje limit škálovatelnosti.
  • 🛠️ Nástroje: JMeter, k6, Gatling, Locust a LoadRunner generují distribuované zatížení a automaticky zaznamenávají výsledky.
  • 📈 Výsledek: Plánování kapacity se stává založeným na důkazech místo dohadů, takže verze přežijí špičky v provozu.

Co je testování škálovatelnosti

Co je testování škálovatelnosti?

Testování škálovatelnosti je nefunkční testovací metoda, která měří výkon systému nebo sítě při zvyšování nebo snižování počtu uživatelských požadavků. Účelem testování škálovatelnosti je zajistit, aby systém zvládl předpokládaný nárůst uživatelského provozu, objemu dat a frekvence transakcí. Testuje schopnost systému uspokojit rostoucí poptávku.

Testování škálovatelnosti je podtypem testování výkonu, takže se zaměřuje na chování aplikace při jejím nasazení na větší systém nebo při nadměrném zatížení. Softwarové inženýrstvíTestování škálovatelnosti měří bod, ve kterém aplikace přestává škálovat, a identifikuje důvod, proč k tomu dochází.

Proč provádět testování škálovatelnosti?

Problémy s kapacitou se během funkčního testování objevují jen zřídka. Objevují se v nejrušnější obchodní den roku, když spustí marketingovou kampaň nebo když datová sada, která dva roky tiše rostla, nakonec zpomalí každý dotaz. Testování škálovatelnosti tyto limity odhaluje nejprve v kontrolovaném prostředí. Konkrétně vám pomáhá:

  • Určete, jak se aplikace škáluje s rostoucí pracovní zátěží a kde se tato křivka zplošťuje.
  • Určete limit souběžných uživatelů webové aplikace dříve, než se doba odezvy stane nepřijatelně vysokou.
  • Určete degradaci na straně klienta a uživatelskou zkušenost při zátěži, například pomalé vykreslování obrazovky.
  • Určete robustnost a degradaci na straně serveru, včetně saturace CPU, úniků paměti a vyčerpání fondu připojení.

Nejsnadněji si tento vztah představíme jako křivku: propustnost roste spolu s přidanou zátěží, dokud se zdroj nenasytí, načež další uživatelé pouze prodlužují frontu.

Testování škálovatelnosti měří výkon systému s rostoucí pracovní zátěží

Typy testování škálovatelnosti

Škálovatelnost není jednorázová vlastnost, takže testovací plán obvykle pokrývá více než jednu dimenzi. Čtyři níže uvedené typy jsou ty, které měří většina týmů, a první dva určují tvar samotného testovacího prostředí.

Typ Co je škálováno Co test dokazuje
Vertikální škálovatelnost (zvětšit) CPU, paměť nebo úložiště přidané k jednomu serveru Kolik dodatečné zátěže absorbuje jeden vylepšený stroj a kde se nachází strop pro jeden uzl
Horizontální škálovatelnost (navýšení horizontálního horizontu) Další servery, kontejnery nebo uzly za load balancerem Zda se propustnost zvyšuje zhruba úměrně k přidaným uzlům, nebo zda ji omezují sdílené zdroje
Funkční škálovatelnost Nové funkce, moduly nebo služby Zda lze přidané funkce absorbovat bez zhoršení stávajících transakcí
Administrativní škálovatelnost Uživatelé, klienti, týmy nebo prostředí ke správě Zda je onboarding, oprávnění a monitorování funkční i s růstem organizace

Vertikální škálování je jednodušší, protože se architektura mění jen zřídka, ale jeden stroj má vždy určitý limit. Horizontální škálování tento limit odstraňuje a zlepšuje odolnost proti chybám, ale za cenu síťové latence, konzistence dat a koordinační režie – to vše musí test měřit, nikoli předpokládat.

Co testovat při testování škálovatelnosti

Škálovatelnost se posuzuje na základě měření, nikoli zobrazení. V každém kroku načítání zaznamenávejte následující atributy, aby byl viditelný trend, a nikoli pouze konečné číslo.

Atribut Co vám to říká
Doba odezvy Doba mezi požadavkem uživatele a odpovědí systému; měla by zůstat stejná s rostoucí souběžností
Přechod obrazovky Jak rychle se jedna stránka nebo zobrazení při načtení nahradí další
Propustnost Objem požadavků zpracovaných za jednotku času; plateau označuje limit škálovatelnosti
Měření času Čas relace, čas restartu, čas tisku, čas transakce a čas provedení úlohy
Výkon v porovnání s počtem uživatelů Jak se jednotlivé metriky mění s postupným přidáváním souběžných uživatelů
Vyžádat si sazby Požadavky za sekundu, transakce za sekundu a přístupy za sekundu
Využití sítě Spotřebovaná šířka pásma a latence paketů mezi vrstvami
Využití CPU a paměti Cena zdrojů na transakci; neustále rostoucí číslo často signalizuje únik
Čítače webových serverů Počet požadavků a odpovědí za sekundu, hloubka fronty a odmítnutá připojení
Výkon při zátěži Kombinované chování, jakmile jsou všechny metriky načteny společně ve vrcholu

Testovací strategie pro testování škálovatelnosti

Testovací strategie pro testování škálovatelnosti se liší v závislosti na typu testované aplikace. Pokud aplikace přistupuje k databáze, testovací parametry budou zahrnovat velikost databáze ve vztahu k počtu uživatelů atd.

Předpoklady pro testování škálovatelnosti

  • Schopnost rozložení zátěže — Zkontrolujte, zda nástroj pro zátěžové testování umožňuje generování zátěže z více strojů a její řízení z centrálního bodu.
  • Operasystém — Zkontrolujte, co operační systémy Agenti generování zátěže a hlavní server zátěžových testů běží pod tímto kódem.
  • Procesor — Zkontrolujte, jaký typ CPU je vyžadován pro virtuálního uživatelského agenta a hlavní server pro zátěžové testování.
  • Memory — Zkontrolujte, kolik paměti by stačilo pro virtuálního uživatelského agenta a master zátěžového testu.
  • Testovací prostředí — Zkontrolujte, zda testovací prostředí dostatečně přesně odráží produkci, aby se výsledky daly přenést.

Jak provést testování škálovatelnosti

  1. Definujte opakovatelný proces pro provádění testů škálovatelnosti v průběhu celého životního cyklu aplikace.
  2. Určete kritéria pro škálovatelnost
  3. Užší výběr softwarových nástrojů potřebných ke spuštění zátěžového testu
  4. Nastavte testovací prostředí a nakonfigurujte hardware potřebný k provádění testů škálovatelnosti
  5. Naplánujte testovací scénáře i testy škálovatelnosti
  6. Vytvořte a ověřte skript virtuálního uživatele
  7. Vytvořte a ověřte scénáře zátěžového testu
  8. Proveďte testy
  9. Vyhodnoťte výsledky
  10. Generování požadovaných reportů

Plán testování škálovatelnosti

Než začnete s vlastním vytvářením testů, vypracujte si podrobný plán testování. Je to důležitý krok k zajištění toho, aby test splňoval požadavky aplikace.

Následují atributy pro vytvoření dobře definovaného Testovací plán pro testování škálovatelnosti.

  • Kroky pro skriptyTestovací skript by měl obsahovat podrobné kroky, které určují přesné akce, které by uživatel provedl.
  • Data za běhuTestovací plán by měl určit veškerá data za běhu, která jsou potřebná pro interakci s aplikací.
  • Testy řízené datyPokud skripty za běhu potřebují různá data, musíte znát všechna pole, která tato data vyžadují.

Příklad testování škálovatelnosti

Představte si internetový obchod, který během sezónního výprodeje očekává 2 000 souběžných nakupujících. Tým se nejprve dohodne na kritériu pro úspěšné provedení nákupu: transakce při platbě musí být u 95 procent uživatelů dokončena za méně než tři sekundy s mírou chyb pod jedno procento.

Test poté spustí stejný skript pro prohlížení-hledání-košík-pokladnu pro 250, 500, 1 000, 1 500 a 2 000 virtuálních uživatelů. Doba odezvy se udržuje na úrovni dvou sekund do 1 000 uživatelů, u 1 500 uživatelů klesá na 2.8 sekundy a u 2 000 uživatelů dosahuje devíti sekund, přičemž využití CPU databáze je 98 procent. Limit škálovatelnosti je tedy zhruba 1 500 uživatelů a úzkým hrdlem je databázová vrstva – nikoli aplikační servery, které tým plánoval přidat.

Nástroje pro testování škálovatelnosti

Testování škálovatelnosti vyžaduje nástroj, který dokáže generovat zátěž z několika počítačů najednou a centrálně hlásit výsledky. Volba se obvykle řídí primárním jazykem týmu a testovanými protokoly.

Nástroj Skriptování Nejlépe se hodí
Apache JMeter Testovací plány GUI a XML, Java na základě Široké pokrytí protokolů včetně JDBC, JMS, LDAP a SOAP
Grafana k6 JavaSkript resp TypeScript Testy API a mikroslužeb zapojené do kanálu CI/CD
Gatling Java, Kotlin nebo Scala DSL Vysoký počet virtuálních uživatelů na injektor s podrobnými HTML reporty
kobylka Prostý Python Python týmy, které potřebují rozšířit klienta nad rámec HTTP
LoadRunner Skripty podobné jazyku C nahrané ve VuGenu Velké podnikové komplexy se staršími a balíčkovými aplikacemi

Cloudově hostované běžce, jako například BlazeMeter, LoadView a Gatling Enterprise stojí na vrcholu několika z těchto enginů a stojí za zvážení, pokud test vyžaduje desítky tisíc virtuálních uživatelů nebo provoz z více geografických oblastí. Širší přehled této kategorie je k dispozici v průvodci nástroje pro testování výkonu.

Výzvy a osvědčené postupy v testování škálovatelnosti

Nejvíce zklamáním jsou výsledky škálovatelnosti traczpět k testovacímu nastavení, nikoli k aplikaci. Toto jsou problémy, které se opakují, a návyky, které jim předcházejí.

Běžné výzvy

  • Poddimenzovaná prostředí — Testovací zařízení s poloviční pamětí v produkčním prostředí hlásí úzké hrdlo, které v produkčním prostředí neexistuje.
  • Nerealistické modely pracovní zátěže — Skripty bez doby na přemýšlení nebo variací dat narazí na mezipaměti, které by skuteční uživatelé přehlédli.
  • Hlučné výsledky — Automatické škálování, sběr odpadků a sdílený cloudový hardware rozcházejí dva identické běhy.
  • Tenká pozorovatelnost — Bez metrik na straně serveru pomalý výsledek ukazuje, že se něco pokazilo, ale ne co.
  • Stát — Generování velmi vysoké souběžnosti vyžaduje vlastní flotilu generátorů zátěže, což je snadné podhodnotit.

Nejlepší postupy

  • Před prvním spuštěním se dohodněte na kritériích pro úspěšné provedení, jako je percentil doby odezvy a strop chybovosti.
  • V plánovaných krocích zvyšujte zátěž a každý krok podržte dostatečně dlouho, aby se systém ustálil.
  • Měňte testovací data pro každého virtuálního uživatele, aby ukládání do mezipaměti nezkreslovalo výsledky.
  • Shromažďujte metriky aplikací, databází a infrastruktury spolu s čísly na straně klienta.
  • Uložte testovací skripty do správy verzí a spusťte krátkou kontrolu škálovatelnosti u každého sestavení a poté před vydáním kompletní kontrolu.
  • Porovnávejte trendy napříč sestaveními, spíše než posuzujte jednu zprávu izolovaně.

Testování škálovatelnosti vs. zátěžové testování

Tyto dva pojmy se často zaměňují, protože oba aplikují zátěž. Rozdíl spočívá v otázce, na kterou každý z nich odpovídá: Testování škálovatelnosti se ptá, jak daleko může systém růst, zatímco zátěžové testování ptá se, zda zvládne již očekávanou zátěž.

Základna Testování škálovatelnosti Testování zatížení
Soustředit Zaměřuje se na výkon vašich webových stránek, softwaru, hardwaru a aplikací, když se provedou změny velikosti nebo objemu systému s cílem uspokojit rostoucí potřeby. Zátěžové testování se zaměřuje na testování aplikace při vysoké zátěži, aby se zjistilo, v jakém bodě dochází k selhání doby odezvy systému.
Vzor zatížení Zátěž se zvyšuje po krocích a mezi kroky lze přidávat zdroje. Zatížení je udržováno na očekávané špičce po pevně stanovenou dobu
Odpověď na otázku Jak daleko se tento systém může rozrůstat a co ho omezuje? Splňuje tento systém dnes své dohodnuté cíle?
Typický výstup Limit škálovatelnosti, úzké hrdlo a kapacitní plán Úspěšné nebo neúspěšné porovnání s cílovou dobou odezvy a propustností

Oba sedí pod nefunkční testování deštník vedle stresové testování, testování hrotů, testování odolnosti a objemové testovánía propracovaná strategie výkonu obvykle spouští několik z nich proti stejným skriptům.

Nejčastější dotazy

Modely strojového učení čtou historická data o běhu, aby označily, která metrika se odchýlila jako první, oddělily skutečné regrese od cloudového šumu a předpověděly úroveň zatížení, při které dojde k saturaci zdroje. Několik komerčních platforem nyní nabízí tuto metodu jako automatizovanou analýzu po běhu.

Ano. Copilot a podobní agenti draftují k6 nebo scénáře Locust, generují parametrizovaná testovací data a rychle vytvářejí kroky CI pipeline. Výkonový inženýr musí stále nastavit realistické doby přemýšlení, kombinace pracovních zátěží a kritéria pro úspěšné provedení, protože ty vycházejí z chování v produkčním prostředí.

Škálovatelnost je schopnost růstu s přidáváním zdrojů, ať už to trvá minuty nebo měsíce. Elasticita je schopnost automaticky přidávat a uvolňovat tyto zdroje podle změny poptávky a následně se vrátit k menšímu využití.

Začněte hluboko pod očekávaným vrcholem, často deset až dvacet procent, abyste potvrdili práci skriptu a monitorování. Počet zvyšujte postupně směrem k cíli a za něj, protože zajímavé chování se objevuje mezi dvěma kroky, nikoli na jednom čísle.

Jeden kancelářský počítač nedokáže vygenerovat desítky tisíc relací a nedokáže reprodukovat latenci, kterou zažívá uživatel v jiném regionu. Testování v cloudu dodává generátory zátěže v několika regionech na vyžádání a uvolňuje je po dokončení běhu.

Proveďte krátkou kontrolu každé sestavy, aby se regrese objevily během jednoho dne, a kompletní krokovou kontrolu proveďte před každým vydáním, které mění architekturu, schéma databáze nebo očekávání provozu. Čekání do týdne před vydáním nenechává čas na opravu toho, co test zjistí.

Kromě ztráty transakcí během výpadkového okna pomalé stránky tlačí návštěvníky ke konkurenci a poškozují pozice ve vyhledávání. V maloobchodě a prodeji vstupenek k selhání obvykle dochází v den s nejvyššími příjmy v roce, což je přesně doba, kdy byla návštěvnost předvídatelná.

Skriptování v JavaSkript, Python or Java, pracovní znalost HTTP a chování databází, snadné čtení metrik serverů a kontejnerů a dostatek statistik k odlišení percentilu od průměru. Znalost cloudu a CI/CD se stala téměř nezbytnou.

Shrňte tento příspěvek takto: