Page History
| Navitabs | ||||||
|---|---|---|---|---|---|---|
| ||||||
Indhold
| Table of Contents |
|---|
...
Introduktion
Dette dokument beskriver kort omkring udvikling og afvikling af jmeter tests.
Dokumenthistorik
Version | Dato | Ansvarlig | Beskrivelse |
1.0 | 15-11-2018 | Openminds | Oprettelse |
| 1.1 | 14-11-2019 | Lakeside | Opdatering vedr. test krav |
| 1.2 | 25-09-2020 | KvalitetsIT | Opdatering ifm. flytning af test til arosiis performance test framework |
| 1.3 |
| KvalitetsIT |
lookup on behalf of udfases |
Performance
Det følgende beskriver performance test og analyse for
- MinLog2 - Performancetest borger lookup
- MinLog 2 - Performancetest registration
Først i dette afsnit beskrives de forskellige typer test data output, og hvordan de anvendes i analysen. Herefter skitseres scope og afvikling af testene samt performance kravene.
Se iøvrigt krav til performance test og rapport på siden https://www.nspop.dk/display/public/web/Performancekrav
Performance analyse
For alle test gælder følgende:
Udover de fremsatte performance krav på svartid, er der en række andre punkter, som bør analyseres for at vurdere servicens sundhed.
Følgende punkter undersøges derfor:
- Svartid per kald
- Antal kald per sekund
- Cpu status
- io på netværk
- Hukommelses forbrug
- Garbage collection
- Kafka Consumer Lag
Disse undersøgelser foretages vha. de forskellige log filer, som genereres under performance testen. De følgende afsnit gennemgår de vigtigste tal fra disse filer:
- JMeter log data belyser
- Faktisk antal test iteration kørt
- Throughput
- (Ex: docker01.bo.stage.nsp.netic.dk-perflogs/minlog_listlogstatements_borger_stress01.nsp-test.netic.dk_master_20200309_110341.tar.gz.log)
- Access log (applikations server information) belyser
- Antal kald per sekund
- Svartid
- For rapporten vedr. forespørgsler gælder
- De nedenstående grafer som er dannet fra denne log er lavet i splunk af Arosii.
- (Denne log er ikke inkluderet da den indeholder personfølsomme data)
- vmstat log (system information) belyser
- cpu status
- skrivning til disk
- Logning sker hver 10. sekund
- (Ex: docker01.bo.stage.nsp.netic.dk/docker01.bo.stage.nsp.netic.dk-vmstat-20200309101455.log)
- jstat log (JVM information) belyser
- Hukommelse (heap) forbrug
- Garbage collection
- Der er tidsstempel per log linie
- (Ex: docker01.bo.stage.nsp.netic.dk/docker01.bo.stage.nsp.netic.dk-docker-jstat-gc-stage_bo_comp_minlog_backend_lookup.log)
- docker stats log (container information) belyser
- Hukommelse
- io på netværk
- Der er ikke noget fast logningsinterval
- (Ex: docker01.bo.stage.nsp.netic.dk/docker01.bo.stage.nsp.netic.dk-docker-jstat-gc-stage_bo_comp_minlog_backend_lookup.log)
- Kafka Consumer lag
- Relevant ved registrering af data
- Offsets og lag fordelt per topic og partition
- Der er tidsstempel per log linie
- (Ex kafka01.stage.nsp.netic.dk-kafka-consumer-group/minlog-kafka-backend.log)
Hver kørsel/iteration (øgning af belastning) har en start og slut tid. Filerne access.log og jstat.log indeholder tidstempler. Dette muliggør at de kan mappes til en given iteration. Filen vmstat har ikke tidstempel. Men da den starter samtidig med jstat loggen og logintervallet er kendt på 10 sekunder, kan iterationernes placering i data beregnes. Docker stats loggen har hverken tidsstempel eller fast logninginterval, hvorfor tallene/graferne kun kan bruges som en generel betragtning over hele test perioden.
Scope og afvikling
Scope
Testene involverer følgende komponenter
- MinLog 2 service
- NSP kafka
- Galera MariaDB cluster
- NSP standard performance test framework
Versionen af MinLog2 og test frameworket varierer for hver test og fremgår nedenfor.
MinLog 2's overordnede arkitektur ses af følgende figur (kilde: arkitektur dokumentet)
Lookup/forespørgsler test vedrører kun "lookup" komponenten, da der ingen opdateringer (registration ) foregår imens, og der dermed heller ingen aktivitet er på "consumer" komponenten. Dette betyder konkret, at de tilsendte log filer, som vedrører "consumer" komponenten ikke analyseres for lookup rapporterne.
Registration består af 2 komponenter: registration komponenten, som modtager input og gemmer data ned i sin "lokale" kafka. Data herfra flyttes af mirrorMaker over på den centrale kafka i backoffice. Og den anden komponent kafka-consumer, der tager fra den centrale kafka og flytter data i databasen.
Der er ikke målinger på database serveren (MariaDB).
Performance test kald
- MinLog2 - Performancetest borger lookup
- MinLog 2 - Performancetest registration
- Kan kaldes med konfigurerbart antal registreringer per request.
- (Der er oprettet distributioner med forskellige antal registringer per request. Disse er beskrevet under "Udførsel af test".)
- De sidste 5 % af registreringerne i et kald er dupletter. (F.eks.: for 20 registreringer per kald vil den sidste registrering være en duplet af den foregående).
- Kan kaldes med konfigurerbart antal registreringer per request.
Afvikling
Performance testen afvikles på følgende måde
- Testen køres på et test system opsat af Netic
- Testen laves i standard NSP performance frameworket, udviklet af Arosii i JMeter.
- Opdater CSV file path i jmeter sådan passer med systemet
- Der køres en testplan med stadig øget belastning ved at øge antallet af tråde og noder indtil det målte throughput ikke længere vokser med tilsvarende mængde.
- Testplanerne kører typisk 15 minutter per iteration og for læsning hentes 30 entries per side.
- System under test køres på 2 docker containere for lookup, og 4 containere for registration (docker01 og docker02 henholdsvis docker01, docker02, docker03 og docker04 i nedenstående)
Krav
Servicemålene herunder er for henholdsvis MinLog 2 registreringsservices (svartider opdatering) og MinLog MinLog2 opslagsservices (Svartider forespørgsler).
| Service | Servicemål |
|---|---|
| Svartider opdatering | 95 % af tilfældene ≤ 6,5 sek |
| 98 % af tilfældene ≤ 15,5 sek | |
Svartider forespørgsler | 95 % af tilfældene ≤ 2,5 sek |
| 98 % af tilfældene ≤ 5,5 sek |
Både MinLog2 og Minlog1 bør testes, da alle snitflader vil blive belastet i indkøringsfasen, det forudsættes at de eksisterende MinLog1 performances test kan benyttes.
Lookup
Borger
Der skal udarbejdes et CPR nummer SELECT af nedre og øvre kvartil i mængden af MinLog logninger repræsenterende forskellige grupper i forhold til mængder af MinLog2 logninger i alt svarende til 2 % af alle med MinLog MinLog2 borger entrys.
| Interval af antal entrys | Antal CPR numre |
|---|---|
| 0 - 50 | 20.000 |
| 50 - 100 | 20.000 |
| 100 - 500 | 20.000 |
| 500 - 1000 | 20.000 |
| 1000 - 5000 | 19.000 |
| 5000 -10.000 (hvis de findes?) | 1.000 |
Sundhedsfaglig - Medhjælpslog
Der skal udarbejdes et CPR nummer SELECT af nedre og øvre kvartil i mængden af MinLog MinLog2 logninger svarende til 2 % af alle med MinLog MinLog2 medhjælps entrys. CPR nummerne skal være sundhedsfaglige med delegering.
Registration
Der skal udarbejdes et registration sæt som indsættes med 20.000 registringer pr. 5 min interval stigende op mod 60.000 pr. 5 min. interval.
Der skal teste testes både bulk og single registreringer samt dupletter.
- For bulk registreringer forslåes test af 10, 50, 100, 250 og 500 registreringer per kald.
...
- I hvert kald er de 5 % sidste registreringer dupletter.
Baggrundsdata
Database
Databasen har indeholdt en kopi af produktion.
Look up Id
Til lookup MinLog2 samt lookup Id ws anvendes følgende fil:
- borger.txt - tekstfil indeholdende borger Id'er.
Registration
Til registration anvendes følgende fil:
- opret.csv - CSV-fil indeholdende 142.895 cpr-numre.
Udførsel af test
Forberedelse
Testen hentes fra https://git
Dokumenthistorik
...
Version
...
Dato
...
Ansvarlig
...
Beskrivelse
...
1.0
...
15-11-2018
...
Openminds
...
Oprettelse
Testdata
Byg
Opsætning
svn checkout https://svn.nspop.dk/svnprojects/openmindsNT/Performance/trunk
Byg med mvn clean install.
Download og anvend jmeter version 2.9 binary.
I ...\apache-jmeter-2.9\bin\user.properties skal følgende linier tilføjes.
...
search_paths=MVNPATH/.m2/repository/com/arosii/nsp/jmeter-minlog2/1.7.5-SNAPSHOT/jmeter-minlog2-1.7.5-SNAPSHOT.jar;SVNPATH/performance/modules/jmeter-gw/target/jmeter-gw.jar;SVNPATH/performance/modules/jmeter-dcc/target/jmeter-dcc.jar;SVNPATH/performance/modules/jmeter-sdm/target/jmeter-sdm.jar;SVNPATH/performance/modules/jmeter-sts/target/jmeter-sts.jar;SVNPATH/performance/modules/jmeter-common/target/jmeter-common.jar;SVNPATH/performance/modules/jmeter-minlog/target/jmeter-minlog.jar;SVNPATH/performance/modules/jmeter-dds/target/jmeter-dds.jar;SVNPATH/performance/modules/jmeter-consent/target/jmeter-consent.jar
user.classpath=MVNPATH/.m2/repository/javax/javaee-api/7.0/javaee-api-7.0.jar;MVNPATH/.m2/repository/commons-discovery/commons-discovery/0.2/commons-discovery-0.2.jar;MVNPATH/.m2/repository/axis/axis/1.4/axis-1.4.jar;MVNPATH/.m2/repository/ca/juliusdavies/not-yet-commons-ssl/0.3.9/not-yet-commons-ssl-0.3.9.jar;MVNPATH/.m2/repository/org/owasp/esapi/esapi/2.0.1/esapi-2.0.1.jar;MVNPATH/.m2/repository/org/opensaml/openws/1.5.4/openws-1.5.4.jar;MVNPATH/.m2/repository/joda-time/joda-time/2.2/joda-time-2.2.jar;MVNPATH/.m2/repository/org/opensaml/opensaml/2.6.4/opensaml-2.6.4.jar;MVNPATH/.m2/repository/org/opensaml/xmltooling/1.4.4/xmltooling-1.4.4.jar;MVNPATH/.m2/repository/dk/sosi/seal/seal/2.4.5/seal-2.4.5-tests.jar;MVNPATH/.m2/repository/com/arosii/nsp/jmeter-sts/1.7.5-SNAPSHOT/jmeter-sts-1.7.5-SNAPSHOT.jar;MVNPATH/.m2/repository/org/apache/ws/security/wss4j/1.5.12/wss4j-1.5.12.jar;MVNPATH/.m2/repository/org/bouncycastle/bcprov-jdk15on/1.51/bcprov-jdk15on-1.51.jar;MVNPATH/.m2/repository/com/unboundid/unboundid-ldapsdk/2.3.1/unboundid-ldapsdk-2.3.1.jar;MVNPATH/.m2/repository/org/apache/santuario/xmlsec/1.4.8/xmlsec-1.4.8.jar;MVNPATH/.m2/repository/com/arosii/nsp/jmeter-minlog2/1.7.5-SNAPSHOT/jmeter-minlog2-1.7.5-SNAPSHOT.jar;MVNPATH/.m2/repository/dk/sosi/seal/seal/2.4.5/seal-2.4.5.jar;MVNPATH/.m2/repository/dk/sosi/testtools/testtools/2.4.5/testtools-2.4.5.jar;MVNPATH/.m2/repository/org/antlr/antlr-runtime/3.3/antlr-runtime-3.3.jar;MVNPATH/.m2/repository/org/antlr/stringtemplate/4.0.2/stringtemplate-4.0.2.jar;MVNPATH/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar;MVNPATH/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar;
repos/performance-framework i den revision, der er angivet nedenfor per release af MinLog 2 servicen.
Databasen klargøres.
Der skal være en kørende version af MinLog 2 servicen, man kan teste imod. Og host.properties skal være sat korrekt op jf. arosiis performance test framework.
Kørsel
Når databasen er på plads, servicen kørende og testen configureret kan følgende køres:
Lookupid
run_test.sh -h hosts.properties -p 9012 minlog2 lookupidws test900_10
Registration
run_test.sh -h hosts.properties -p 9012 minlog2 registration test900_10
- Distributionen kan ændres for flere registreringer per request (test900_10, test900_50, test900_100, test900_250, test900_500)
Mulige Distributionen at vælge til test
| Minlog2 distributions |
|---|
| test10_10 |
| test10_50 |
| test10_10 |
| test10_250 |
| test10_500 |
| test300_500 |
| test300_1000 |
| test300_2500 |
| test900_10 |
test900_50 |
test900_100 |
test900_250 |
test900_500 |
Version
MinLog2 Release | Performance test revision |
|---|---|
| 2.*.* | 2.0.* |
| GIT | GIT |
'* ' betyder hvilken som helst
Erstat "MVNPATH" med stien til maven repositories. Erstat "SVNPATH" med stien til svn projektet.
Vær opmærksom på at separator på windows er ; og på mac/linux :
jmeter startes vha. C:\tools\apache-jmeter-2.9\bin\jmeter.bat eller ./jmeter.sh
Test templates og tilhørende filer findes i .../tests/minlog2/src/test/jmeter/templates/testplans/
Performance tests
Lookup
Der er lavet en LookupRequestSampler. Den tager et cpr som input og forventer der er et IDCard på threadcontexten. Med inputtet laver den et kald til GetLogStatementsForCPRPerson. Vær opmærksom på at testen er bundet til et certifikat og dermed et idcard og dermed et lookup.
Se eksemplet her.
.../tests/minlog2/src/test/jmeter/templates/testplans/lookup.template.jmx
Lookup on behalf of
Her laves der lookup on behalf of hvor man enten benytter et medarbejder certifikat eller et firmacertifikat.
I setup fasen indhentes certifikatet og herefter startes selve performance testen.
Lookup on behalf of sampleren tager et cpr som input. Så det er muligt at sætte testen op så man indlæser en fil med flere cprnumre og bruger forskellige hver gang et kald laves.
Vi har lavet et eksempel på hvordan det kan sættes op her.
.../tests/minlog2/src/test/jmeter/templates/testplans/lookup_onbehalfof.template.jmx
Lookupid
Under setup hentes der nemind certifikater for de test brugere der benyttes. Lookupidentitytoken sampleren tager cpr, procurator cpr og subject som input. De nemid certifikater der hentes ind gemmes i et statisk map så de kan genbruges af lookupid sampleren i selve performance testen.
Lookupidws sampleren tager et cpr som input. Den bruger cpr til at hente certifikatet fra setup af og laver hefterter et kald til minlog2 hvor certifikatet benyttes.
Vi har lavet et eksempel på hvordan det kan sættes op her.
.../tests/minlog2/src/test/jmeter/templates/testplans/lookupidws.template.jmx
Registration
Vi har lavet et eksempel på hvordan det kan sættes op her.
tests/minlog2/src/test/jmeter/templates/testplans/registration.template.jmx
