Moodle, il sistema di gestione dell'apprendimento (LMS) più popolare al mondo, viene comunemente implementato in un ambiente in rapida crescita e su larga scala. Fortunatamente, Moodle è progettato pensando alla disponibilità e alla scalabilità, con molti strumenti per aiutarci a gestire una grande infrastruttura. Le infrastrutture Moodle su larga scala possono essere configurate su diversi tipi di macchine, dal bare metal ai contenitori virtuali compartimentalizzati (o Kubernetes Pods) e coinvolgerebbero comunemente un'architettura multi-tier per bilanciatori del carico, server Web, server cache, server di archiviazione centralizzati/cluster e server di database.
In questo post del blog, ti mostreremo come eseguire un benchmark del tuo sito Moodle, che ci consentirà di capire come si comporta il nostro sito Moodle in un determinato periodo di tempo. In una configurazione in cluster, le prestazioni di un cluster Moodle possono essere influenzate da vari fattori come risorse hardware, sovraccarico di virtualizzazione, latenze di rete tra server, firewall, memorizzazione nella cache e molti altri, e l'esecuzione di benchmark è un modo solido per testare e stimare le prestazioni di Moodle prima che entri in produzione.
Plugin di benchmarking dei rapporti
Prima di tutto, è bene avere una conoscenza di base quando la nostra configurazione è inattiva e anche in un ambiente con carichi pesanti. Si consiglia vivamente di installare il plug-in Report Benchmark per Moodle, che esegue vari test per determinare la qualità della piattaforma Moodle utilizzando un sistema di punteggio. Questo punteggio confronta il tuo sistema e la tua velocità con alcuni valori di soglia (accettabili e critici), proprio come il seguente screenshot:
Dopo aver installato il plug-in, vai su Amministrazione sito -> Rapporti -> Benchmark -> Avvia il benchmark per eseguire il benchmark. I test di benchmark dovrebbero durare meno di 1 minuto e verranno interrotti a 2 minuti a prescindere, rivelando se ci sono preoccupazioni sulla tua piattaforma. Più basso è il punteggio, meglio è, e se tutto è verde, generalmente indica che il nostro sito Moodle dovrebbe essere in buone condizioni. Ci sono fondamentalmente 5 gruppi di test:
- Velocità del server
- Velocità del processore
- Velocità del disco rigido
- Velocità del database
- Velocità di caricamento della pagina
Nelle occasioni in cui Moodle si comporta più lentamente del previsto, vedresti apparire alcune caselle non verdi nel report del benchmark, come mostrato nell'esempio seguente:
Più avanti nel rapporto, puoi ottenere il riepilogo del benchmark. Nel caso precedente, abbiamo creato uno strumento Apache Benchmark (ab) per sottoporre a stress test il sito Web con 20 connessioni di utenti simultanei ed eseguire contemporaneamente questo rapporto di benchmark e osservare le prestazioni di Moodle. La giustificazione di sintesi, nonostante sia piuttosto ampia negli aspetti di ottimizzazione, potrebbe aiutarci a restringere l'area che necessita di miglioramenti come l'ottimizzazione del database, la cache di Moodle e le risorse hardware.
Si consiglia di eseguire più volte questo test di riferimento per ottenere una media significativa. Se le prestazioni della tua installazione non sono ottimali, troverai alcuni consigli per migliorarla nella documentazione di Moodle. Non eseguire questo benchmark su una piattaforma di produzione durante le ore attive, poiché potrebbe comportare un degrado significativo delle prestazioni.
Apache JMeter
Apache JMeter è un'applicazione Java progettata per caricare il comportamento funzionale di test e misurare le prestazioni di applicazioni web statiche e dinamiche. Può essere utilizzato per simulare un carico pesante su un server, un gruppo di server, una rete o un oggetto per testarne la forza o per analizzare le prestazioni complessive con diversi tipi di carico.
A partire da Moodle v2.5 e versioni successive, viene fornito con un generatore di piani di test JMeter per semplificare il processo di test di carico con JMeter tramite due script integrati:"Crea corso di test" e "Crea piano di test JMeter", entrambi disponibili in Amministrazione sito -> Sviluppo , aumentato da una serie di componenti aggiuntivi Confronto delle prestazioni di Moodle. Per poter utilizzare questa funzione tramite l'interfaccia web di Moodle, devi impostare Moodle in Modalità sviluppatore in Amministrazione sito -> Sviluppo -> Debug -> Messaggi di debug -> SVILUPPATORE:messaggi di debug aggiuntivi di Moodle per gli sviluppatori . In caso contrario, utilizza gli strumenti CLI disponibili nella directory {Moodle}/admin/tool/generator/cli.
Si noti che il test JMeter non deve essere eseguito su un sistema di produzione. Gli script del piano di test generano dati e caricano deliberatamente il server al suo limite e oltre, rendendolo spesso sovraccarico e non rispondendo. Non eseguirli nemmeno su un'istanza Moodle separata nel server di produzione, connettendoti allo stesso sistema di database di produzione poiché influirà direttamente sulle prestazioni.
Distribuzione del server JMeter
Per semplificare le istruzioni, eseguiamo tutti i nostri comandi come utente root. Sul server JMeter, installa tutti i pacchetti necessari:
$ sudo apt install apache2 mysql-client mysql-server php libapache2-mod-php graphviz aspell ghostscript clamav php7.4-pspell php7.4-curl php7.4-gd php7.4-intl php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-ldap php7.4-zip php7.4-soap php7.4-mbstring
Crea un utente MySQL privilegiato da utilizzare con lo strumento di confronto delle prestazioni di Moodle. Non è necessario creare prima un database:
$ mysql -uroot -p
mysql> CREATE USER 'moodleperformance'@'localhost' IDENTIFIED BY 'mys3cret';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'moodleperformance'@'localhost';
mysql> exit
Crea la radice dei dati e la directory di backup:
$ mkdir /var/moodledata
$ chmod -R 777 /var/moodledata
$ mkdir /root/backups
Installa Java:
$ apt update
$ apt install default-jre
Scarica Apache JMeter dal sito ufficiale e salvalo nella directory /opt:
$ wget https://downloads.apache.org//jmeter/binaries/apache-jmeter-5.4.tgz
$ tar -xzf apache-jmeter-5.4.tgz -C /opt
Ottieni lo strumento Moodle Performance Comparison da Github e inseriscilo nella root del documento predefinito del server web Apache in /var/www/html, e copia anche i file di configurazione dai loro modelli:
$ cd /var/www/html
$ git clone https://github.com/moodlehq/moodle-performance-comparison
$ cd moodle-performance-comparison
$ cp webserver_config.properties.dist webserver_config.properties
$ cp jmeter_config.properties.dist jmeter_config.properties
Apri jmeter_config.properties e modifica la seguente riga:
jmeter_path=/opt/apache-jmeter-5.4
Esecuzione del piano di test JMeter
Il modo più semplice per eseguire un benchmark Moodle utilizzando questo strumento è eseguire un benchmark Moodle locale, in cui gli script estrarranno automaticamente l'applicazione Moodle da Github, configureranno il database e imposteranno le configurazioni necessarie per un ambiente di test locale. Quello che dobbiamo fare è specificare quanto segue in webserver_config.properties:
dbtype="mysqli"
dbhost="localhost"
dbuser="moodleperformance"
dbpass="mys3cret"
wwwroot="http://18.141.187.189/moodle-performance-comparison/moodle"
dataroot="/var/moodledata"
backupsdir="/root/backups"
Dove 18.141.187.189 è l'indirizzo IP pubblico di questo server JMeter. Il Moodle che sarà sottoposto a benchmark è accessibile all'indirizzo http://18.141.187.189/moodle-performance-comparison/moodle . Una volta configurato quanto sopra, vai a /var/www/html/moodle-performance-comparison:
$ cd /var/www/html/moodle-performance-comparison
La prima cosa è caricare il sito di test Moodle con una serie di dati. La dimensione del sito Moodle può essere determinata da quanto segue:
Dimensioni | Piano di test |
XS | 1 utente, 5 loop e 1 periodo di accelerazione |
S | 30 utenti, 5 loop e 6 periodi di accelerazione |
M | 100 utenti, 5 loop e 40 periodo di accelerazione |
L | 1000 utenti, 6 loop e 100 periodo di accelerazione |
XL | 5000 utenti, 6 loop e 500 periodo di accelerazione |
XXL | 10000 utenti, 7 loop e 800 periodo di accelerazione |
$ ./before_run_setup.sh XS
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
#######################################################################
Installing Moodle (ec58cefefb2722f61f77c9a2b6a12d40a8c078a0)
Moodle site configuration finished successfully.
Creating Moodle (ec58cefefb2722f61f77c9a2b6a12d40a8c078a0) database and dataroot backups
mysqldump: [Warning] Using a password on the command line interface can be insecure.
Upgrading Moodle (ec58cefefb2722f61f77c9a2b6a12d40a8c078a0) to master
#######################################################################
'Before' run setup finished successfully.
Note the following files were generated, you will need this info when running
testrunner.sh in a different server, they are also saved in test_files.properties.
- Test plan: /var/www/html/moodle-performance-comparison/moodle/testplan.jmx
- Test users: /var/www/html/moodle-performance-comparison/moodle/testusers.csv
- Dataroot backup: /root/backup/dataroot_backup_202101090901
- Database backup: /root/backup/database_backup_202101090901.sql
Now you can:
- Change the site configuration
- Change the cache stores
And to continue with the test you should:
- Run restart_services.sh (or manually restart web and database servers if
this script doesn\'t suit your system)
- Run test_runner.sh
Prima di avviare il benchmark, si consiglia di riavviare i server Web e database in modo da ottenere un buon risultato di base:
$ ./restart_service.sh
#######################################################################
Services restarted successfully.
Now you can begin running the tests with test_runner.sh.
Ora siamo pronti per eseguire il benchmark JMeter utilizzando lo script test_runner.sh:
$ ./test_runner.sh Group1 Run1
#######################################################################
Test running... (time for a coffee?)
Jan 09, 2021 9:03:55 AM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
Warning: Nashorn engine is planned to be removed from a future JDK release
#######################################################################
Test plan completed successfully.
To compare this run with others remember to execute after_run_setup.sh before
it to clean the site restoring the database and the dataroot.
Ora abbiamo completato la nostra prima esecuzione e ottenuto una performance su un semplice sito Moodle. A questo punto, puoi eseguire qualsiasi ottimizzazione delle prestazioni e ottimizzazione del tuo server di database, PHP, server Web Apache o qualsiasi altro componente correlato a Moodle ed eseguire la seconda esecuzione per confrontare se l'ottimizzazione applicata ha senso. Prima di creare il secondo benchmark, dobbiamo eseguire lo script after_run_setup.sh per preparare e ripulire il sito Moodle di test in cui lo script ripristinerà il database e la radice dei dati di Moodle:
$ ./after_run_setup.sh
Ora siamo pronti per eseguire il secondo benchmark:
$ ./test_runner.sh Group1 Run2
#######################################################################
Test running... (time for a coffee?)
Jan 09, 2021 9:03:55 AM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
Warning: Nashorn engine is planned to be removed from a future JDK release
#######################################################################
Test plan completed successfully.
To compare this run with others remember to execute after_run_setup.sh before
it to clean the site restoring the database and the dataroot.
Risultati benchmark
I risultati del benchmark dovrebbero essere visualizzati e accessibili all'indirizzo http://18.141.187.189/moodle-performance-comparison/ . Il seguente screenshot a pagina intera è un esempio di risultati che otterresti:
Il confronto ci consente di capire in quali aspetti o componenti del sito Moodle sono stati migliorati tra le corse. È bene eseguire il benchmark più volte per ottenere una media significativa, prima di decidere se una particolare ottimizzazione ha introdotto risultati positivi o negativi sul sito Moodle.
Esistono molti altri modi per eseguire il benchmark JMeter come descritto qui. È possibile eseguire il benchmark direttamente sul sito live (sconsigliato) o organizzare il sito di test Moodle locale con i dati della produzione utilizzando il backup del database di produzione e della directory moodledata, oppure eseguire il benchmark in locale su più versioni di Moodle installazione per confrontare il guadagno o la perdita di prestazioni per ciascuna versione.