Moodle, verdens mest populære læringsstyringssystem (LMS), bliver almindeligvis implementeret i et hurtigt voksende og storstilet miljø. Heldigvis er Moodle bygget med tilgængelighed og skalerbarhed i tankerne, med masser af værktøjer, for at hjælpe os med at administrere en stor infrastruktur. Moodle-infrastrukturer i stor skala kan opsættes på forskellige typer maskiner, fra bart metal til opdelte virtuelle containere (eller Kubernetes Pods) og vil almindeligvis involvere multi-tiers arkitektur til separate load balancers, webservere, cache-servere, centraliserede/clustered storage-servere og databaseservere.
I dette blogindlæg vil vi vise dig, hvordan du udfører et benchmark for dit Moodle-websted, som vil give os mulighed for at forstå, hvordan vores Moodle-websted klarer sig i en given periode. I en klynget opsætning kan ydeevnen af en Moodle-klynge påvirkes af forskellige faktorer som hardwareressourcer, virtualiseringsoverhead, netværksforsinkelser mellem servere, firewalls, caching og mange flere, og udførelse af benchmarks er en solid måde at teste og estimere Moodle-ydeevnen på. før den går live i produktion.
Rapport Benchmarking Plugin
Først og fremmest er det godt at have en grundforståelse, når vores setup er inaktivt og også under et miljø med tung belastning. Det anbefales stærkt at installere Report Benchmark plugin til Moodle, som udfører forskellige tests for at bestemme kvaliteten af Moodle platformen ved hjælp af et scoringssystem. Denne score sammenligner dit system og hastighed med nogle tærskelværdier (acceptable og kritiske), ligesom følgende skærmbillede:
Når pluginnet er installeret, skal du gå til Site administration -> Rapporter -> Benchmark -> Start benchmark at udføre benchmark. Benchmark-testene bør vare mindre end 1 minut og vil blive afbrudt efter 2 minutter uanset, hvilket afslører, om der er bekymringer på din platform. Jo lavere score, jo bedre, og hvis alt er grønt, indikerer det generelt, at vores Moodle-side burde være i god form. Der er grundlæggende 5 testgrupper:
- Serverhastighed
- Processorhastighed
- Harddiskhastighed
- Databasehastighed
- Indlæsningshastighed
I de tilfælde, hvor Moodle opfører sig langsommere end forventet, vil du se nogle ikke-grønne felter vises i benchmark-rapporten som vist i følgende eksempel:
Længere nede i rapporten kan du få et resumé af benchmark. I ovenstående tilfælde lavede vi et Apache Benchmark (ab) værktøj til at stressteste webstedet med 20 samtidige brugerforbindelser og samtidig køre denne benchmark-rapport og observere Moodles ydeevne. Den sammenfattende begrundelse, på trods af at den er ret bred med hensyn til tuning, kan hjælpe os med at indsnævre det område, der skal forbedres, såsom databaseoptimering, Moodle-cache og hardwareressourcer.
Det anbefales at udføre denne benchmark-test flere gange for at opnå et signifikant gennemsnit. Hvis ydelsen af din installation ikke er optimal, vil du finde nogle anbefalinger til at forbedre den i Moodle-dokumentationen. Kør ikke dette benchmark på en produktionsplatform i aktive timer, da det kan resultere i betydelig ydeevneforringelse.
Apache JMeter
Apache JMeter er en Java-applikation designet til at indlæse testfunktionel adfærd og måle ydeevnen af statiske og dynamiske webapplikationer. Den kan bruges til at simulere en tung belastning på en server, gruppe af servere, netværk eller objekt for at teste dens styrke eller til at analysere den samlede ydeevne under forskellige belastningstyper.
Siden Moodle v2.5 og nyere kommer den med en JMeter-testplangenerator for at forenkle processen med belastningstest med JMeter gennem to indbyggede scripts - "Lav testkursus" og "Lav JMeter-testplan", begge tilgængelige under Site administration -> Udvikling , forstærket af et sæt tilføjelser til sammenligning af Moodle-ydelse. For at du kan bruge denne funktion via Moodle-webgrænsefladen, skal du skifte Moodle til udviklertilstand under Siteadministration -> Udvikling -> Fejlretning -> Debug-meddelelser -> UDVIKLER:ekstra Moodle-fejlretningsmeddelelser til udviklere . Ellers skal du bruge CLI-værktøjerne, der er tilgængelige under {Moodle}/admin/tool/generator/cli-biblioteket.
Bemærk, at JMeter-testen ikke bør udføres på et produktionssystem. Testplanens scripts genererer data og indlæser bevidst serveren til dets grænser og udover, hvilket ofte gør den overbelastet og bliver ikke-responsiv. Lad være med at køre dem på en separat Moodle-instans i produktionsserveren, der forbinder til det samme produktionsdatabasesystem, da det vil påvirke ydeevnen direkte.
Installation af JMeter-serveren
For at forenkle instruktionerne, udfører vi alle vores kommandoer som root-bruger. På JMeter-serveren skal du installere alle de nødvendige pakker:
$ 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
Opret en privilegeret MySQL-bruger, der skal bruges af Moodle-ydelsessammenligningsværktøjet. Det er ikke nødvendigt at oprette en database først:
$ mysql -uroot -p
mysql> CREATE USER 'moodleperformance'@'localhost' IDENTIFIED BY 'mys3cret';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'moodleperformance'@'localhost';
mysql> exit
Opret dataroot og backup-mappen:
$ mkdir /var/moodledata
$ chmod -R 777 /var/moodledata
$ mkdir /root/backups
Installer Java:
$ apt update
$ apt install default-jre
Download Apache JMeter fra det officielle websted og gem det under /opt-mappe:
$ wget https://downloads.apache.org//jmeter/binaries/apache-jmeter-5.4.tgz
$ tar -xzf apache-jmeter-5.4.tgz -C /opt
Hent Moodle Performance Comparison-værktøjet fra Github og læg det under Apache-webserverens standarddokumentrod på /var/www/html, og kopier også konfigurationsfilerne fra deres skabeloner:
$ 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
Åbn jmeter_config.properties og rediger følgende linje:
jmeter_path=/opt/apache-jmeter-5.4
Kørsel af JMeter-testplanen
Den enkleste måde at køre et Moodle-benchmark på ved at bruge dette værktøj er at køre et lokalt Moodle-benchmark, hvor scripts automatisk trækker Moodle-applikationen fra Github, opsætter databasen og indstiller de nødvendige konfigurationer til et lokalt testmiljø. Det, vi skal gøre, er at angive følgende i 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"
Hvor 18.141.187.189 er den offentlige IP-adresse på denne JMeter-server. Moodlen, der vil blive benchmarked, er tilgængelig på http://18.141.187.189/moodle-performance-comparison/moodle. Når ovenstående er konfigureret, skal du navigere til /var/www/html/moodle-performance-comparison:
$ cd /var/www/html/moodle-performance-comparison
Den første ting er at give Moodle-teststedet et sæt data. Moodle-webstedets størrelse kan bestemmes af følgende:
Størrelse | Testplan |
XS | 1 bruger, 5 loops og 1 ramp-up periode |
S | 30 brugere, 5 loops og 6 ramp-up perioder |
M | 100 brugere, 5 sløjfer og 40 opstigningsperioder |
L | 1000 brugere, 6 loops og 100 ramp-up periode |
XL | 5000 brugere, 6 loops og 500 ramp-up periode |
XXL | 10.000 brugere, 7 loops og 800 ramp-up periode |
$ ./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
Før vi starter benchmark, anbefales det at genstarte web- og databaseservere, så vi får et godt baseline-resultat:
$ ./restart_service.sh
#######################################################################
Services restarted successfully.
Now you can begin running the tests with test_runner.sh.
Nu er vi klar til at køre JMeter benchmark ved at bruge test_runner.sh script:
$ ./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.
Vi har nu gennemført vores første løb og fået en optræden på et almindeligt Moodle-websted. På dette tidspunkt kan du udføre enhver ydelsesjustering og justering af din databaseserver, PHP, Apache-webserver eller andre komponenter relateret til Moodle og køre den anden kørsel for at sammenligne, om den anvendte justering giver mening. Før vi laver det andet benchmark, skal vi udføre after_run_setup.sh-scriptet for at forberede og rydde op på Moodle-teststedet, hvor scriptet vil gendanne databasen og Moodle-dataroden:
$ ./after_run_setup.sh
Nu er vi klar til at køre det andet 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.
Benchmark-resultater
Benchmark-resultaterne bør vises og tilgængelige på http://18.141.187.189/moodle-performance-comparison/ . Følgende helsides skærmbillede er et eksempel på resultater, du ville få:
Sammenligningen giver os mulighed for at forstå, hvilke aspekter eller komponenter af Moodle-webstedet, der er blevet forbedret mellem kørsler. Det er godt at udføre benchmarket flere gange for at få et signifikant gennemsnit, før du i sidste ende træffer en beslutning om, hvorvidt en bestemt tuning har introduceret gode eller dårlige resultater til Moodle-webstedet.
Der er mange andre måder at udføre JMeter benchmark på som beskrevet her. Du kan køre benchmark direkte til live-webstedet (anbefales ikke), eller iscenesætte det lokale Moodle-teststed med data fra produktionen ved at bruge backup af produktionsdatabasen og moodledata-biblioteket, eller også køre benchmark lokalt mod flere versioner af Moodle installation for at sammenligne gevinst eller tab i ydeevne for hver version.