Billig loadtest
Prosedyre
Etter større config-, kode- eller hardwareendringer, burde det kjøres en loadtest for å verifisere at man ikke har redusert ytelsen (evt. for å verifisere at den er blitt bedre). Dokumentasjonen under er ment som en grov skisse til hvordan; du vil antageligvis fortsatt kreve en viss Billig-ekspertise og møte på uventede hindringer, men det er en god start.
- Meld nedetid i Nagios
- Ta ned billettsalget på samfundet.no og uka.no.
- Gi okkupasjon en ubrukt IPv4- og/eller IPv6-adresse, så ingen prøver å få kontakt med den. Oppdater DNS med billettsalg-loadtest.samfundet.no. Sjekk at pg_hba.conf gir den nye IP-adressen tilgang til mdb2_dev-databasen (som brukerne billig_web og billig_okkupasjon).
- Pass på at test-vhosten har siste programvare:
cd /var/www/samfundet.no/billettsalg-loadtest su - billettsalg git pull exit
- Gå over configfilen på test-vhosten (/var/www/samfundet.no/billettsalg-loadtest/include/config.local.pm). Test-vhosten peker på mdb2_dev i stedet for mdb2, på PayEx-testsystemer i stedet for -prodsystemer, og har andre HMAC-koder og slikt.
- Slå av hoved-vhosten og bytt til test-vhosten:
a2dissite billettsalg.samfundet.no a2ensite billettsalg-loadtest.samfundet.no vim /etc/apache2/perl/startup.pl # Juster include-stien service apache2 reload
- Tilsvarende for cron; rediger /etc/cron.d/billettsalg og endre stien fra /var/www/samfundet.no/billettsalg til billettsalg-loadtest.
- Swedbank' testsystemer takler ikke lasten fra en loadtest, så vi har laget en mock. Den ligger i bin/swedbank-mock i Billig-repositoryet, og kan kjøres på f.eks. altersex. Kjør den med «nodejs mock.js»; den vil åpne en server på port 8000. Pek $swedbank_base_url til den (og reload apache om nødvendig). Åpne for den i iptables (/usr/local/sbin/iptables-setup.sh), både IPv4 og IPv6. For å få https på mocken må configvariablen $loadtest settes til 1, og sertifikatfilen må legges i rett mappe som beksrevet i mock.js.
- Finn et testevent i mdb2dev med f.eks. en million billetter. Finn en prisgruppe i eventet. Pass på at eventet er i salg. Om du ønsker, kan du drepe alle data (PASS PÅ AT DU IKKE ER I PRODUKSJONSDATABASEN):
truncate purchase cascade; update ticket_group set num_sold=0;
- Finn loadtesten (bin/okkupasjon-loadtest.pl) og en rask maskin å kjøre den på (fordi den ikke er veldig effektiv). Pass på at du har lov til å åpne nok filer til å kjøre så mange loadtest-workere som du ønsker. Sjekk URLen og prisgruppen du valgte.
- Start loadtesten med et lavt antall workere (f.eks. 100). Om det går bra, kan du prøve litt mer, osv. Loadtest og tune til du er fornøyd. Tallet du ser etter er i utgangspunktet RATE= (i «RUN»-fasen; tall under «WARMUP» og «END» må forkastes), som sier noe om hvor mange billettsalg som går unna per sekund, men også latenstellerne for 90-percentil kan være interessante. (Om du har mange workere, trenger de mer enn seksti sekunder på å starte opp; gi da f.eks. 180 som andre parameter, slik at warmup-fasen forlenges.)
- Gå gjennom alle oppsettskrittene over i motsatt rekkefølge for å gå tilbake til prod-oppsett.
Vanlige feil
- timeout-payex vil ved første kjøring etter at lasttesten har begynt se noen tusen kjøp. Skriptet vil begynne å gjøre capture på kjøpene, men dette vil ta meget lang tid, og du vil i praksis aldri nå epostutsendingsfasen. Derfor bør du heller stoppe cronjobben som kjører timeout-payex og heller holde skriptet kjørende manuelt. Når du kommer til enden av warmup, start timeout-payex på nytt, slik at den begynner å sende ut epost. Du bør gjøre én slik kjøring, og en kjøring med cron-jobben, slik at du ser om epostutsending påvirker resultatet.
Tidligere resultater
Januar 2017
- Kontekst
- Hardware- og software-oppgraderinger
- Resultater
- Maks 140
Juni 2018
- Kontekst
- Etter oppgradering til stretch.
- Resultater
- Maks 150
August 2019
- Kontekst
- Før oppgradering til buster.
- Parametre
- 2000/2500/4000 workers, 300 sek warmup, 300 sek runtime
- Resultater
- Mean 148/180/190
September 2019
- Kontekst
- Hardware-oppgradering
- Parametre
- 6000 workers
- Resultater
- Omtrent 330
Epost: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2020-07-05 15:05 | Revisjon: 14 (historie, blame) | Totalt: 1905 kB | Rediger