Uno dei compiti più difficili nella creazione di applicazioni multichannel è quello della previsione delle risorse cloud necessarie a supportare un determinato carico di lavoro e, possibilmente, l’ottimizzazione di tali risorse.
Durante la fase di programmazione, infatti, è difficile tenere presente cosa succederà quando, invece che una sola, ci saranno centinaia di sessioni di lavoro contemporanee. Una singola operazione da 100 millisecondi, quasi in real time, può trasformarsi in una attesa di 100 secondi, assolutamente inaccettabile.
Anche a livello sistemistico la sfida è grande: scegliere la giusta architettura cloud è decisivo e le possibilità sono molteplici. Usare container o meno? Che tipo di orchestrazione? Quali sistemi operativi e su quali configurazioni di virtualizzazione? Nella nostra esperienza abbiamo rilevato variazioni di performance anche di un fattore 50.
Infine è necessario considerare a quale tipo di carico il sistema sarà sottoposto: che cosa faranno gli utenti? Quante sessioni di lavoro contemporanee dovremo supportare? A che tipo di stress sarà sottoposto il sistema? CPU, memoria, I/O o rete?
Ecco perché oggi la previsione dell’utilizzo delle risorse cloud è spesso più simile alle previsioni del tempo piuttosto che ad una scienza esatta. Finché gli utenti sono pochi va sempre bene, ma quando il sistema è in produzione e il back end inizia a cedere sotto il carico di lavoro, non è facile capire di chi è la colpa e come risolvere in fretta senza moltiplicare i costi di gestione.
Perché fare i test di carico
Uno strumento insostituibile per ottenere una previsione più precisa è un sistema per l’esecuzione di test di carico. Esistono diverse soluzioni disponibili, alcune delle principali sono descritte qui. Questi sistemi utilizzano una serie di server nel cloud che simulano le richieste di un numero a piacere di utenti verso il backend da testare e poi misurano i tempi di risposta.
Per chi utilizza Instant Developer Cloud, il sistema di test di carico è già integrato nella piattaforma e non ha alcun costo aggiuntivo! L’esecuzione dei test avviene in due mosse:
- Si utilizza l’applicazione da testare in “modalità di registrazione”, per ottenere le “sessioni campione” che simulano il comportamento reale degli utenti.
- Si esegue il test di carico scegliendo il numero di sessioni complessivo e la durata del test. Il sistema di backend contiene un sistema di auto-stimolazione che consente di effettuare le misure senza utilizzare server aggiuntivi nel cloud.
Il grafico in testa alla pagina mostra un esempio dei risultati del test: 1000 sessioni utente eseguite nel giro di 75 secondi, con un picco di oltre 400 sessioni contemporanee su un server cloud di taglia media, corrispondenti ad un utilizzo di CPU del 40% e a un consumo stabile di memoria.
Volete sapere com’è andata quando il sistema è entrato in produzione? Beh, come vi dicevo, a volte l’informatica è una scienza esatta ☺.