sql >> Databasteknik >  >> RDS >> Mysql

Hur man jämför prestanda för Moodle

Moodle, världens mest populära inlärningshanteringssystem (LMS), används ofta i en snabbt växande och storskalig miljö. Lyckligtvis är Moodle byggt med tillgänglighet och skalbarhet i åtanke, med massor av verktyg för att hjälpa oss att hantera en stor infrastruktur. Storskaliga Moodle-infrastrukturer kan ställas in på olika typer av maskiner, från ren metall till fackindelade virtuella behållare (eller Kubernetes Pods) och skulle vanligtvis involvera flerskiktsarkitektur för separata lastbalanserare, webbservrar, cacheservrar, centraliserade/klustrade lagringsservrar och databasservrar.

I det här blogginlägget kommer vi att visa dig hur du utför ett riktmärke för din Moodle-webbplats, vilket gör att vi kan förstå hur vår Moodle-sajt presterar under en viss tidsperiod. I en klustrad installation kan prestandan hos ett Moodle-kluster påverkas av olika faktorer som hårdvaruresurser, virtualiseringskostnader, nätverkslatenser mellan servrar, brandväggar, cachning och många fler, och att utföra benchmarks är ett bra sätt att testa och uppskatta Moodles prestanda innan den går live i produktion.

Rapport Benchmarking Plugin

Först och främst är det bra att ha en grundförståelse när vår installation är inaktiv och även under en tung miljö. Det rekommenderas starkt att installera plugin-programmet Report Benchmark för Moodle, som utför olika tester för att fastställa kvaliteten på Moodle-plattformen med hjälp av ett poängsystem. Den här poängen jämför ditt system och din hastighet med några tröskelvärden (acceptabla och kritiska), precis som följande skärmdump:

När plugin-programmet har installerats, gå till Webbplatsadministration -> Rapporter -> Benchmark -> Starta benchmark för att utföra riktmärket. Benchmark-testerna bör ta mindre än 1 minut och kommer att avbrytas efter 2 minuter oavsett, vilket avslöjar om det finns bekymmer på din plattform. Ju lägre poäng desto bättre, och om allt är grönt indikerar det generellt att vår Moodle-sajt borde vara i bra form. Det finns i princip 5 testgrupper:

  • Serverhastighet
  • Processorhastighet
  • Hårddiskhastighet
  • Databashastighet
  • Ladda sidhastighet

I de tillfällen då Moodle beter sig långsammare än förväntat, skulle du se några icke-gröna rutor visas i benchmarkrapporten som visas i följande exempel:

Längre ner i rapporten kan du få en sammanfattning av riktmärket. I ovanstående fall gjorde vi ett Apache Benchmark (ab)-verktyg för att stresstesta webbplatsen med 20 samtidiga användaranslutningar och samtidigt köra denna benchmark-rapport och observera Moodles prestanda. Den sammanfattande motiveringen, trots att den är ganska bred i justeringsaspekter, kan hjälpa oss att begränsa det område som behöver förbättras som databasoptimering, Moodle-cache och hårdvaruresurser.

Det rekommenderas att utföra detta benchmarktest flera gånger för att få ett signifikant medelvärde. Om prestandan för din installation inte är optimal hittar du några rekommendationer för att förbättra den i Moodle-dokumentationen. Kör inte detta riktmärke på en produktionsplattform under aktiva timmar, eftersom det kan resultera i betydande prestandaförsämring.

Apache JMeter

Apache JMeter är en Java-applikation designad för att ladda testfunktionellt beteende och mäta prestanda hos statiska och dynamiska webbapplikationer. Den kan användas för att simulera en tung belastning på en server, grupp av servrar, nätverk eller objekt för att testa dess styrka eller för att analysera övergripande prestanda under olika belastningstyper.

Sedan Moodle v2.5 och senare kommer den med en JMeter-testplansgenerator för att förenkla processen för belastningstestning med JMeter genom två inbyggda skript - "Make test course" och "Make JMeter testplan", båda tillgängliga under Webbplatsadministration -> Utveckling , förstärkt med en uppsättning tillägg Moodle prestandajämförelse. För att du ska kunna använda den här funktionen via Moodles webbgränssnitt måste du byta Moodle till utvecklarläge under Webbplatsadministration -> Utveckling -> Felsökning -> Felsökningsmeddelanden -> UTVECKLAR:extra Moodle felsöker meddelanden för utvecklare . Annars kan du använda CLI-verktygen som finns tillgängliga under katalogen {Moodle}/admin/tool/generator/cli.

Observera att JMeter-testet inte bör utföras på ett produktionssystem. Skripten för testplanen genererar data och laddar medvetet servern till dess gränser och längre, vilket ofta gör den överbelastad och inte svarar. Kör dem inte ens på en separat Moodle-instans i produktionsservern, anslut till samma produktionsdatabassystem eftersom det kommer att påverka prestandan direkt.

Distribuera JMeter-servern

För att förenkla instruktionerna kör vi alla våra kommandon som root-användare. Installera alla nödvändiga paket på JMeter-servern:

$ 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

Skapa en privilegierad MySQL-användare som ska användas av Moodles prestandajämförelseverktyg. Det finns ingen anledning att skapa en databas först:

$ mysql -uroot -p
mysql> CREATE USER 'moodleperformance'@'localhost' IDENTIFIED BY 'mys3cret';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'moodleperformance'@'localhost';
mysql> exit

Skapa dataroot- och säkerhetskopieringskatalogen:

$ mkdir /var/moodledata
$ chmod -R 777 /var/moodledata
$ mkdir /root/backups

Installera Java:

$ apt update
$ apt install default-jre

Ladda ner Apache JMeter från den officiella webbplatsen och lagra den i /opt-katalogen:

$ wget https://downloads.apache.org//jmeter/binaries/apache-jmeter-5.4.tgz
$ tar -xzf apache-jmeter-5.4.tgz -C /opt

Hämta Moodle Performance Comparison-verktyget från Github och placera det under Apache-webserverns standarddokumentrot på /var/www/html, och kopiera även konfigurationsfilerna från deras mallar:

$ 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

Öppna jmeter_config.properties och redigera följande rad:

jmeter_path=/opt/apache-jmeter-5.4

Köra JMeter-testplanen

Det enklaste sättet att köra ett Moodle-benchmark genom att använda det här verktyget är att köra ett lokalt Moodle-benchmark, där skripten automatiskt hämtar Moodle-applikationen från Github, ställer in databasen och ställer in nödvändiga konfigurationer för en lokal testmiljö. Vad vi behöver göra är att specificera följande 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"

Där 18.141.187.189 är den offentliga IP-adressen för denna JMeter-server. Moodlen som kommer att benchmarkas är tillgänglig på http://18.141.187.189/moodle-performance-comparison/moodle . När ovanstående är konfigurerat, navigera till /var/www/html/moodle-performance-comparison:

$ cd /var/www/html/moodle-performance-comparison

Det första är att ladda Moodles testwebbplats med en uppsättning data. Moodle-webbplatsens storlek kan bestämmas av följande:

Storlek

Testplan

XS

1 användare, 5 loopar och 1 ramp-up period

S

30 användare, 5 loopar och 6 upprampningsperioder

M

100 användare, 5 loopar och 40 ramp-up perioder

L

1 000 användare, 6 slingor och 100 uppgångsperioder

XL

5 000 användare, 6 loopar och 500 uppgångsperioder

XXL

10 000 användare, 7 loopar och 800 upprampningsperioder

Och kör before_run_setup.sh-skriptet för att skapa Moodle-webbplats med XS-storleken:
$ ./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

Innan vi startar benchmark, rekommenderas det att starta om webben och databasservrarna så att vi får ett bra baslinjeresultat:

$ ./restart_service.sh
#######################################################################
Services restarted successfully.

Now you can begin running the tests with test_runner.sh.

Nu är vi redo att köra JMeter benchmark genom att använda test_runner.sh-skriptet:

$ ./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 slutfört vår första körning och fått en prestation på en vanlig Moodle-webbplats. Vid denna tidpunkt kan du utföra valfri prestandajustering och justering av din databasserver, PHP, Apache-webbserver eller andra komponenter som är relaterade till Moodle och köra den andra körningen för att jämföra om den tillämpade justeringen är meningsfull. Innan vi gör det andra riktmärket måste vi köra after_run_setup.sh-skriptet för att förbereda och städa upp Moodle-testwebbplatsen där skriptet kommer att återställa databasen och Moodle-dataroten:

$ ./after_run_setup.sh

Nu är vi redo att köra det andra riktmärket:

$ ./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-resultat


Referensresultaten bör visas och tillgängliga på http://18.141.187.189/moodle-performance-comparison/ . Följande helsidesskärmdump är ett exempel på resultat som du skulle få:

Jämförelsen låter oss förstå i vilka aspekter eller komponenter på Moodle-webbplatsen som har förbättrats mellan körningarna. Det är bra att utföra riktmärket flera gånger för att få ett signifikant medelvärde, innan man slutligen fattar ett beslut om en viss justering har introducerat bra eller dåliga resultat på Moodle-webbplatsen.

Det finns många andra sätt att utföra JMeter benchmark som beskrivs här. Du kan köra riktmärket direkt till live-webbplatsen (rekommenderas inte), eller iscensätta den lokala Moodle-testplatsen med data från produktionen genom att använda säkerhetskopian av produktionsdatabasen och moodledatakatalogen, eller också köra riktmärket lokalt mot flera versioner av Moodle installation för att jämföra vinsten eller förlusten i prestanda för varje version.
  1. Analysera röravgränsad sträng i kolumner?

  2. Hur uppdaterar jag en rad i en tabell eller infogar den om den inte finns?

  3. Hur får jag lokal data till en skrivskyddad databas med dplyr?

  4. Ny data kvarstår inte i Rails-arraykolumnen på Postgres