Cos'è il test di scalabilità? Impara con l'esempio

⚡ Riepilogo intelligente

I test di scalabilità misurano il comportamento di un'applicazione quando il carico degli utenti, il volume dei dati o la frequenza delle transazioni aumentano o diminuiscono, rivelando il punto esatto in cui le prestazioni smettono di scalare e identificando il collo di bottiglia responsabile.

  • 🔘 Definizione: Un test non funzionale che verifica se un sistema continua a funzionare in modo accettabile all'aumentare della domanda.
  • ☑️ Due direzioni: L'espansione verticale aggiunge potenza a una macchina; l'espansione orizzontale aggiunge più macchine a valle di un bilanciatore.
  • Chiave metrica: tempo di risposta, throughput, utilizzo di CPU e memoria e utilizzo della rete sono traceccitato ad ogni fase di carico.
  • 🧪 Metodo: Il carico aumenta gradualmente secondo piani fino a quando un parametro non supera la sua soglia, che segna il limite di scalabilità.
  • Tooling: JMeterk6, Gatling, Locust e LoadRunner generano carichi distribuiti e registrano automaticamente i risultati.
  • 📈 Risultato: La pianificazione della capacità si basa su dati concreti anziché su supposizioni, consentendo così alle release di resistere ai picchi di traffico.

Che cos'è il test di scalabilità?

Che cosa sono i test di scalabilità?

Test di scalabilità Il test di scalabilità è un metodo di test non funzionale che misura le prestazioni di un sistema o di una rete quando il numero di richieste degli utenti viene aumentato o diminuito. Lo scopo del test di scalabilità è garantire che il sistema sia in grado di gestire un aumento previsto del traffico utenti, del volume dei dati e della frequenza delle transazioni. Verifica la capacità del sistema di soddisfare la crescente domanda.

Il test di scalabilità è un sottotipo di test delle prestazioni, quindi si concentra sul comportamento di un'applicazione quando viene distribuita su un sistema più ampio o utilizzata sotto carico eccessivo. In Software EngineeringI test di scalabilità misurano il punto in cui un'applicazione smette di scalare e ne identificano la causa.

Perché eseguire test di scalabilità?

I problemi di capacità raramente emergono durante i test funzionali. Si manifestano nel giorno di maggiore attività commerciale dell'anno, quando viene lanciata una campagna di marketing o quando un set di dati cresciuto silenziosamente per due anni inizia a rallentare ogni query. I test di scalabilità mettono in luce questi limiti in un ambiente controllato. Nello specifico, ti aiutano a:

  • Determinare come l'applicazione si adatta all'aumento del carico di lavoro e dove tale curva si appiattisce.
  • Determinare il limite di utenti simultanei per l'applicazione web prima che i tempi di risposta diventino inaccettabili.
  • Determinare il degrado delle prestazioni lato client e l'esperienza dell'utente finale sotto carico, ad esempio il rallentamento del rendering dello schermo.
  • Determinare la robustezza e il degrado del lato server, inclusi la saturazione della CPU, le perdite di memoria e l'esaurimento del pool di connessioni.

La relazione si può visualizzare più facilmente come una curva: la velocità di elaborazione aumenta con l'aumento del carico fino a quando una risorsa si satura, dopodiché l'aggiunta di utenti non fa altro che allungare la coda.

I test di scalabilità misurano le prestazioni del sistema all'aumentare del carico di lavoro.

Tipi di test di scalabilità

La scalabilità non è una singola proprietà, quindi un piano di test di solito copre più di una dimensione. I quattro tipi seguenti sono quelli che la maggior parte dei team misura, e i primi due determinano la struttura stessa dell'ambiente di test.

Tipo Che cosa è scalato? Cosa dimostra il test
Scalabilità verticale (ampliamento) CPU, memoria o spazio di archiviazione aggiunti a un singolo server Quanto carico aggiuntivo assorbe una macchina aggiornata e dove si trova il limite massimo per un singolo nodo.
Scalabilità orizzontale (ridurre l'ingrandimento) Server, container o nodi aggiuntivi dietro un bilanciatore di carico Se la velocità di trasmissione aumenta approssimativamente in proporzione ai nodi aggiunti o se le risorse condivise la limitano
Scalabilità funzionale Nuove funzionalità, moduli o servizi Se le funzionalità aggiuntive possono essere integrate senza compromettere le transazioni esistenti.
Scalabilità amministrativa Utenti, tenant, team o ambienti da gestire Se l'onboarding, le autorizzazioni e il monitoraggio rimangono funzionali con la crescita dell'organizzazione

La scalabilità verticale è più semplice perché l'architettura cambia raramente, ma una singola macchina ha sempre un limite massimo. La scalabilità orizzontale elimina questo limite e migliora la tolleranza ai guasti, a scapito della latenza di rete, della coerenza dei dati e del sovraccarico di coordinamento, tutti aspetti che il test deve misurare anziché presumere.

Cosa testare nei test di scalabilità

La scalabilità si valuta in base alle misurazioni, non alle impressioni. Registra i seguenti attributi a ogni fase di caricamento, in modo che sia visibile l'andamento e non solo il valore finale.

Attributo Cosa ti dice
Tempo di risposta Tempo tra una richiesta dell'utente e la risposta del sistema; dovrebbe rimanere costante all'aumentare della concorrenza
Transizione dello schermo Quanto velocemente una pagina o una visualizzazione lascia il posto alla successiva sotto carico
Throughput Volume di richieste elaborate per unità di tempo; un plateau segna il limite di scalabilità
Misurazioni del tempo Tempo di sessione, tempo di riavvio, tempo di stampa, tempo di transazione e tempo di esecuzione dell'attività
Prestazioni in rapporto al numero di utenti Come si muove ciascuna metrica all'aumentare degli utenti simultanei.
Tariffe di richiesta Richieste al secondo, transazioni al secondo e accessi al secondo
Utilizzo della rete Larghezza di banda consumata e latenza dei pacchetti tra i livelli
Utilizzo della CPU e della memoria Costo delle risorse per transazione; una cifra in costante aumento spesso segnala una perdita
Contatori del server web Richieste e risposte al secondo, profondità della coda e connessioni rifiutate
Prestazioni sotto carico Comportamento combinato una volta che ogni metrica viene letta insieme al picco

Strategia di test per la scalabilità

La strategia di test per il test di scalabilità varia a seconda del tipo di applicazione in fase di test. Se un'applicazione accede a un banca datiI parametri di test includeranno la dimensione del database in relazione al numero di utenti e così via.

Prerequisiti per il test di scalabilità

  • Capacità di distribuzione del carico — Verificare se lo strumento di prova di carico consente di generare il carico da più macchine e di controllarlo da un punto centrale.
  • Operasistema di ting — Controlla cosa sistemi operativi gli agenti di generazione del carico e il master del test di carico vengono eseguiti sotto.
  • Processore — Verificare il tipo di CPU richiesto per l'agente utente virtuale e il master del test di carico.
  • Memorie — Verifica quanta memoria sarebbe sufficiente per l'agente utente virtuale e il master del test di carico.
  • Ambiente di test — Controlla che il ambiente di test rispecchia la produzione in modo sufficientemente fedele da permettere il trasferimento dei risultati.

Come eseguire test di scalabilità

  1. Definire un processo ripetibile per l'esecuzione di test di scalabilità durante l'intero ciclo di vita dell'applicazione.
  2. Determinare i criteri per la scalabilità
  3. Elenca gli strumenti software necessari per eseguire il test di carico
  4. Imposta l'ambiente di test e configura l'hardware richiesto per eseguire test di scalabilità
  5. Pianifica gli scenari di test e i test di scalabilità.
  6. Creare e verificare lo script dell'utente virtuale
  7. Creare e verificare gli scenari dei test di carico
  8. Eseguire i test
  9. Valuta i risultati
  10. Genera i report richiesti

Piano di test di scalabilità

Prima di creare effettivamente i test, sviluppate un piano di test dettagliato. Si tratta di un passaggio importante per garantire che il test sia conforme ai requisiti dell'applicazione.

Di seguito sono riportati gli attributi per la creazione di un ben definito Piano di test per i test di scalabilità.

  • Passaggi per gli scriptLo script di test dovrebbe contenere passaggi dettagliati che determinino le azioni esatte che un utente dovrebbe eseguire.
  • Dati di esecuzioneIl piano di test dovrebbe determinare tutti i dati di runtime necessari per interagire con l'applicazione.
  • Test guidati dai datiSe gli script necessitano di dati variabili in fase di esecuzione, è necessario comprendere tutti i campi che richiedono tali dati.

Esempio di test di scalabilità

Consideriamo un negozio online che prevede 2,000 acquirenti contemporanei durante i saldi stagionali. Il team concorda innanzitutto su un criterio di successo: la transazione di pagamento deve completarsi in meno di tre secondi per il 95% degli utenti, con un tasso di errore inferiore all'1%.

Il test esegue quindi lo stesso script di navigazione, ricerca, carrello e pagamento con 250, 500, 1,000, 1,500 e 2,000 utenti virtuali. Il tempo di risposta si mantiene intorno ai due secondi fino a 1,000 utenti, scende a 2.8 secondi a 1,500 e raggiunge i nove secondi a 2,000, mentre l'utilizzo della CPU del database si attesta al 98%. Il limite di scalabilità è quindi di circa 1,500 utenti e il collo di bottiglia è rappresentato dal livello del database, non dai server applicativi che il team aveva previsto di aggiungere.

Strumenti per i test di scalabilità

Per i test di scalabilità è necessario uno strumento in grado di generare carico da più macchine contemporaneamente e di centralizzare i risultati. La scelta di solito dipende dal linguaggio di programmazione principale del team e dai protocolli da testare.

Chiavetta Scripting più adatto a
Apache JMeter Piani di test GUI e XML, Java basato Ampia copertura dei protocolli, inclusi JDBC, JMS, LDAP e SOAP.
Grafana k6 JavaScrittura o TypeScript Test di API e microservizi integrati in una pipeline CI/CD
Gatling Java, Kotlin o Scala DSL Elevato numero di utenti virtuali per iniettore con report HTML dettagliati
Locusta pianura Python Python team che necessitano di estendere il client oltre HTTP
LoadRunner Script simili al linguaggio C registrati in VuGen Grandi infrastrutture aziendali con applicazioni legacy e pacchettizzate

Runner ospitati nel cloud come BlazeMeterLoadView e Gatling Enterprise si basano su diversi di questi motori e vale la pena considerarli quando un test richiede decine di migliaia di utenti virtuali o traffico da più regioni geografiche. Una panoramica più ampia della categoria è disponibile nella guida a strumenti di test delle prestazioni.

Sfide e migliori pratiche nei test di scalabilità

Risultati di scalabilità più deludenti tracTorniamo alla configurazione di test anziché all'applicazione. Questi sono i problemi che si ripresentano e le abitudini che li prevengono.

Sfide comuni

  • Ambienti di dimensioni ridotte — Un banco di prova con metà della memoria di produzione segnala un collo di bottiglia che non esiste in produzione.
  • Modelli di carico di lavoro irrealistici — Gli script senza tempo di elaborazione o variazione dei dati accedono a cache che gli utenti reali non riuscirebbero a raggiungere.
  • Risultati rumorosi — L'auto-scaling, la raccolta dei rifiuti e l'hardware cloud condiviso fanno sì che due esecuzioni identiche presentino risultati diversi.
  • Osservabilità sottile — Senza metriche lato server, un risultato lento indica che qualcosa si è rotto, ma non cosa.
  • Costo — Generare un numero molto elevato di richieste simultanee richiede una flotta dedicata di generatori di carico, il che può facilmente comportare un budget inferiore al previsto.

migliori pratiche

  • Definire i criteri di superamento, come ad esempio una percentuale del tempo di risposta e un limite massimo per il tasso di errore, prima della prima esecuzione.
  • Aumenta il carico gradualmente, secondo un piano prestabilito, e mantieni ogni livello per un tempo sufficiente a permettere al sistema di stabilizzarsi.
  • Variare i dati di test per ciascun utente virtuale in modo che la memorizzazione nella cache non alteri i risultati.
  • Raccogli metriche relative ad applicazioni, database e infrastruttura, oltre ai dati lato client.
  • Archivia gli script di test nel sistema di controllo versione ed esegui un breve controllo di scalabilità su ogni build, quindi un test completo prima del rilascio.
  • Confronta le tendenze tra le diverse build anziché valutare un singolo report isolatamente.

Test di scalabilità vs. test di carico

I due vengono spesso confusi perché entrambi applicano un carico. La differenza sta nella domanda a cui ognuno risponde: il test di scalabilità chiede fino a che punto il sistema può crescere, mentre test di carico chiede se è in grado di gestire il carico già previsto.

Base Test di scalabilità Caricare i test
Focus Si concentra sulle prestazioni di siti web, software, hardware e applicazioni quando vengono apportate modifiche alle dimensioni o al volume del sistema per soddisfare un'esigenza crescente. Il test di carico si concentra sulla verifica di un'applicazione sotto carichi elevati, al fine di determinare a quale punto il tempo di risposta del sistema non è più adeguato.
Modello di carico Il carico viene aumentato gradualmente e tra una fase e l'altra è possibile aggiungere risorse. Il carico viene mantenuto al valore massimo previsto per una durata fissa.
Domanda con risposta Fino a che punto può espandersi questo sistema e quali sono i suoi limiti? Questo sistema raggiunge oggi gli obiettivi prefissati?
Uscita tipica Un limite di scalabilità, un collo di bottiglia e un piano di capacità Risultato positivo o negativo rispetto agli obiettivi di tempo di risposta e di produttività.

Entrambi siedono sotto il test non funzionali ombrello accanto stress test, test di picco, prova di resistenza and test di volumee una strategia di performance matura di solito ne esegue diverse sugli stessi script.

DOMANDE FREQUENTI

I modelli di machine learning leggono i dati storici di esecuzione per individuare quale metrica ha subito la prima deviazione, separare le regressioni reali dal rumore di fondo e prevedere il livello di carico al quale una risorsa si saturerà. Diverse piattaforme commerciali offrono ora questa funzionalità come analisi automatizzata post-esecuzione.

Sì. Copilota e agenti simili bozza k6 o scenari Locust, generare dati di test parametrizzati e creare rapidamente la struttura per le fasi della pipeline CI. Un ingegnere delle prestazioni deve comunque impostare tempi di attesa realistici, mix di carichi di lavoro e criteri di superamento, perché questi derivano dal comportamento in produzione.

La scalabilità è la capacità di crescere quando vengono aggiunte risorse, che ciò richieda minuti o mesi. L'elasticità è la capacità di aggiungere e rilasciare automaticamente tali risorse in base alle variazioni della domanda, per poi tornare alle dimensioni ridotte in seguito.

Iniziate con valori ben al di sotto del picco previsto, spesso dal dieci al venti percento, per confermare il funzionamento dello script e del monitoraggio. Aumentate il conteggio gradualmente verso l'obiettivo e oltre, poiché il comportamento interessante si manifesta tra due passaggi piuttosto che in corrispondenza di un singolo valore.

Un singolo computer da ufficio non può generare decine di migliaia di sessioni e non può riprodurre la latenza sperimentata da un utente in un'altra regione. Test del cloud L'azienda fornisce energia ai generatori in diverse regioni su richiesta e li rilascia al termine del ciclo di funzionamento.

Esegui un breve controllo su ogni build in modo che le regressioni emergano entro un giorno e un test completo passo passo prima di qualsiasi rilascio che modifichi l'architettura, lo schema del database o le previsioni di traffico. Aspettare fino alla settimana prima del lancio non lascia il tempo di correggere ciò che il test rileva.

Oltre alle transazioni perse durante il periodo di interruzione del servizio, le pagine lente spingono i visitatori verso la concorrenza e danneggiano il posizionamento nei risultati di ricerca. Per il commercio al dettaglio e la biglietteria, il guasto si verifica solitamente nel giorno di maggior fatturato dell'anno, ovvero proprio quando il traffico era prevedibile.

Scripting Javasceneggiatura, Python or JavaÈ richiesta una conoscenza pratica di HTTP e del comportamento dei database, familiarità con la lettura delle metriche di server e container e una conoscenza statistica sufficiente a distinguere un percentile da una media. La familiarità con il cloud e la CI/CD è diventata quasi essenziale.

Riassumi questo post con: