softshake 2015 comment tester et optimiser la performance d'un si

70
Comment tester et optimiser la performance d'un SI ? 22 octobre 2015

Upload: marc-bojoly

Post on 22-Jan-2018

612 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: Softshake 2015   comment tester et optimiser la performance d'un si

Commenttesteretoptimiserlaperformanced'unSI?

22octobre2015

Page 2: Softshake 2015   comment tester et optimiser la performance d'un si

MarcBOJOLY

CyrilPICAT

OCTOTechnologyLausanne,consultant

OCTOTechnologyParis,manageretconsultantCo-fondateurduPerformanceUserGroupParis

Page 3: Softshake 2015   comment tester et optimiser la performance d'un si

Leprojet:migrationd'unebanqueversunenouvelleplateformetitres

Page 4: Softshake 2015   comment tester et optimiser la performance d'un si

Quelqueschiffres

Clients:x10

Portefeuillestitres:x5

Positions:x3

Titres:+50%

OrdresdeBourse:x2

Page 5: Softshake 2015   comment tester et optimiser la performance d'un si

Leprojet:migrationd'unebanqueversunenouvelleplateformetitres

Page 6: Softshake 2015   comment tester et optimiser la performance d'un si

Autantattendrelamiseenproduction...

Page 7: Softshake 2015   comment tester et optimiser la performance d'un si

Méconnaissances

Nierl'existenceduproblème Onabientravaillé,çavapasser

Nierl'existencedesolutions C'estimpossibleàtestersaufenprod

Nierlafiabilitédessolutions Lachargeneserapasreprésentative

Mettreendoutesescapacités

Onn'yarriverajamais

Page 8: Softshake 2015   comment tester et optimiser la performance d'un si

Idéesreçuessurlespré-requis

Unepré-productionidentiqueàlaproductionSimulerl'ensembledesactivitésdelabanque

Page 9: Softshake 2015   comment tester et optimiser la performance d'un si

Idéesreçuessurlestestsdecharge

Testerenautomatique?Impossiblemêmeavec<unnomde

produitici>

Page 10: Softshake 2015   comment tester et optimiser la performance d'un si

Idéesreçuessurlediagnostic

Lesproblèmessontsurlemainframe

Page 11: Softshake 2015   comment tester et optimiser la performance d'un si

Cesontdesidéesreçues

Notreobjectif,vousmontrer

commentadaptervospré-requisàvosenjeuxcommentaborderlestestsdechargedansunSIcommentnepasêtrepiégéparlesdiagnosticspréconçus

Page 12: Softshake 2015   comment tester et optimiser la performance d'un si

Dansunmondeparfait...

“Faisdetavieunrêve,etd'unrêveune

réalité.”AntoinedeSaint-Exupéry-Cahiers

deSaint-Exupéry(1900-1944)

Page 13: Softshake 2015   comment tester et optimiser la performance d'un si

Rêve:unevueintégréedelaperformance

Dynatrace

Page 14: Softshake 2015   comment tester et optimiser la performance d'un si

Réalité:Quilefaitauniveaud'unSI?

GoogleDapper

Page 15: Softshake 2015   comment tester et optimiser la performance d'un si

Réalité:Commencerpardesoutilssimples

Analysedelogs(python,pandas...)

Collected'outilssystèmes(nmon,vmstat...)

Page 16: Softshake 2015   comment tester et optimiser la performance d'un si

Rêve:Toutcequ'ilfautpourfairelestests

DesdéveloppementsterminésDesdonnéesmigréesDespersonnesdisponibles....etcolocalisées

Page 17: Softshake 2015   comment tester et optimiser la performance d'un si

Réalité:Lesintangibles

UnenvironnementopérationnelUnjeudedonnéesminimalUnezonedemesureisolée

Pourlereste...

Page 18: Softshake 2015   comment tester et optimiser la performance d'un si

Savoirfixersespriorités

Page 19: Softshake 2015   comment tester et optimiser la performance d'un si

Lesproblèmespeuventsembler

vertigineux

Page 20: Softshake 2015   comment tester et optimiser la performance d'un si

Ilfaut"cadrer"lechantier

FactualiserlesvolumesexistantsetciblesListerlesproblèmesexistantsBrainstormersurlesproblèmespotentiels

Page 21: Softshake 2015   comment tester et optimiser la performance d'un si

Lesproblèmes"usuels"

1. Capacitéentermedenombredetransactions/jour

2. Augmentationdevolumétrie(x2)

3. SLAtempsderéponseend-to-end

4. Lenteursactuelles5. Augmentationdu

nombred'utilisateurs

6. Impactsurladuréedesbatchs

7. Latenceettempsderéponsepourlesutilisateursdistants

Page 22: Softshake 2015   comment tester et optimiser la performance d'un si

Etensuite?

Lacartevousaideàvisualiseretàprioriser,ellene"résout"paslesproblèmes

ChaqueproblèmerestecomplexeetliéauresteduSI

Page 23: Softshake 2015   comment tester et optimiser la performance d'un si

Diviserpourmieuxrégner

2patterns

Diviser/découpler:passerd'untestdeNsystèmesàuntestdek<Nsystèmes(idéalement1)

Simplifier:réduireladimensionnalité(casdetests,donnéesetc.)

Page 24: Softshake 2015   comment tester et optimiser la performance d'un si

Diviser/découpler:unexemple

Page 25: Softshake 2015   comment tester et optimiser la performance d'un si

Diviser/découpler:unexemple

Page 26: Softshake 2015   comment tester et optimiser la performance d'un si

Etmaintenant?

Neprévoyezpasuntestdechargepourtouslesproblèmes!

Page 27: Softshake 2015   comment tester et optimiser la performance d'un si

Penseràd'autresoutils

Analysedel'existant

Modélisationetextrapolation

Testdechargedel'existant(données,systèmes)

Testdechargedelacible(données,systèmes)

Page 28: Softshake 2015   comment tester et optimiser la performance d'un si

Oùpouvez-vousvous"planter"?

Mauvaiseconnaissancedelaperformanceexistante

Mauvaiseconnaissancedesusagesexistants

Page 29: Softshake 2015   comment tester et optimiser la performance d'un si

Bonnespratiquesdetestsdecharges(applicationparapplication)

Page 30: Softshake 2015   comment tester et optimiser la performance d'un si

Délimiterlepérimètretesté

CaruntestdechargeresteuntestautomatiséCaruntestenerreurnesertàrien

Comment?

ChoisissezsoigneusementvotrejeudedonnéesOudéveloppezdesbouchons

Page 31: Softshake 2015   comment tester et optimiser la performance d'un si

Bouchonner

LescomposantsutiliséssystématiquementLeplussimplementpossible

Page 32: Softshake 2015   comment tester et optimiser la performance d'un si

Modéliserscientifiquement

Modéliserlecomportementdemesutilisateurs?

Combiend'utilisateurssimultanés?Qu'est-cequ'unutilisateursimultané?

Page 33: Softshake 2015   comment tester et optimiser la performance d'un si

Modélisationscientifique

LavéritéestenproductionUnmodèle:moyenneETpercentile99th

ExempledeloisdePoisson

Page 34: Softshake 2015   comment tester et optimiser la performance d'un si

Modélisaton:soyezprédictifs

Sivousn'avezpasdestatistiquesproduction,

proposezunmodèledeprévisiondunombred'utilisateurs

Page 35: Softshake 2015   comment tester et optimiser la performance d'un si

Modélisation:soyezprédictifs

Sivousn'avezpasdestatistiquesproduction,

proposezunmodèledeprévisiondeleurutilisation

Page 36: Softshake 2015   comment tester et optimiser la performance d'un si

Modélisation:commentl'utiliser?

Définissezdansvostestsd'injectionlocauxlenombred'utilisateurs"simultanés"etletempsderéflexion

val clientSearchChain = group("client_search_page") { exec(http("client_search_html") .get("""/ebankingAdmin/xxxxx/root/contract/contractlist/""")}).pause(7,8) //Pause between 7 and 8 seconds

val scn = scenario("AdminSimulation").repeat(1) { exitBlockOnFail { exec(loginChain).exec(clientSearchChain)//No logout, 90% of users don't }}

setUp(scn.inject(rampUsers(120).over(60))).protocols(httpProtocol) //This will go from 0 to 120 users in 60 seconds

Page 37: Softshake 2015   comment tester et optimiser la performance d'un si

Testsdechargeparapplication

UnebriquedebasedelaperformanceduSI

Commentfait-onpourmangerunéléphant?

Bouchéeparbouchée.

Page 38: Softshake 2015   comment tester et optimiser la performance d'un si

Maisilfaut(quandmême)testerenend-to-end

Page 39: Softshake 2015   comment tester et optimiser la performance d'un si

DEMOQuizz:quelestletempsderéponsed'uneapplication?

70ms.detraitement

7appelsenbasededonnées,14ms.chacun

Page 40: Softshake 2015   comment tester et optimiser la performance d'un si

curl -X POST \-H "Accept: applicaiton/json" \-H "Content-Type: application/json" \-d '{"cpuIntensiveComputationsDuration":70, "databaseCallsNumber":7, "databaseCallDuration":14 }' \http://$HOST:8080/compute

Page 41: Softshake 2015   comment tester et optimiser la performance d'un si

Tempsderéponse~190ms.

$ ./sh/poc1.sh% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed100 253 100 161 100 92 789 450 --:--:-- --:--:-- --:--:-- 789Call HTTP Ressources : For an HTTP ressources total of 0.0 ms.Call the database 7 times during 14 ms. each for a total of 118 ms.CPU intensive compute 186 ms.

Page 42: Softshake 2015   comment tester et optimiser la performance d'un si

Détaildel'exécution

10-18 16:32:22 jdbc:/**/CallableStatement call98 = conn7.prepareCall("call sleep(?)");10-18 16:32:22 jdbc: SESSION_PREPARE_READ_PARAMS 3010-18 16:32:22 jdbc:/**/call98.setLong(1, 14L);10-18 16:32:22 jdbc:/**/call98.execute();10-18 16:32:22 jdbc: COMMAND_EXECUTE_QUERY 3010-18 16:32:22 jdbc: RESULT_CLOSE 3110-18 16:32:22 jdbc:/**/call98.close();10-18 16:32:22 jdbc: COMMAND_CLOSE 3010-18 16:32:22 jdbc:/**/conn7.getAutoCommit();10-18 16:32:22 jdbc:/**/conn7.getWarnings();10-18 16:32:22 jdbc:

Page 43: Softshake 2015   comment tester et optimiser la performance d'un si

DEMO&Quizz:quelestletempsderéponsed'unechaîneapplicativedansunSI

?

7applicationsidentiquesàlaprécédente(70ms.detraitement,7x14ms.deBD)

Appelssynchronesséquentiels

Page 44: Softshake 2015   comment tester et optimiser la performance d'un si

curl -X POST \-H "Accept: applicaiton/json" \-H "Content-Type: application/json" \-d '{"cpuIntensiveComputationsDuration":70, "databaseCallsNumber":7, "databaseCallDuration":14, "serviceCalls":[{"computationDescription":{"cpuIntensiveComputationsDuration":70, "databaseCallsNumber":7, "databaseCallDuration":14}, "callsNumber":6 }]}' \http://$HOST:8080/compute

Page 45: Softshake 2015   comment tester et optimiser la performance d'un si

Tempsderéponse:1s.

$ ./sh/poc2.sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed100 1417 100 1171 100 246 881 185 0:00:01 0:00:01 --:--:-- 881Call HTTP Ressources : { Call HTTP Ressources : For an HTTP ressources total of 0.0 ms. Call the database 7 times during 14 ms. each for a total of 113 ms. CPU intensive compute 68ms.{,{ Call HTTP Ressources : For an HTTP ressources total of 0.0 ms.

Page 46: Softshake 2015   comment tester et optimiser la performance d'un si

DEMO&Quizz:quelestletempsderéponsedelamêmechaînedansune

modélisationplusprochedelaréalité?

Page 47: Softshake 2015   comment tester et optimiser la performance d'un si

ImplémentationdeceQuizz

Diokles:AnInformationSystemscaleperformancesimulator

https://github.com/mbojoly/diokles

Page 48: Softshake 2015   comment tester et optimiser la performance d'un si

$ sudo docker-machine ssh default $$ sudo tc qdisc add dev docker0 root netem delay 10ms $$ sudo tc qdisc show dev docker0 $$ #After demo $$ sudo tc qdisc del root dev docker0

Page 49: Softshake 2015   comment tester et optimiser la performance d'un si

Tempsderéponse:3s.

$ ./sh/poc2.sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1417 100 1171 100 246 328 69 0:00:03 0:00:03 --:--:-- 328 Call HTTP Ressources : { Call HTTP Ressources : For an HTTP ressources total of 0.0 ms. Call the database 7 times during 14 ms. each for a total of 394 ms. CPU intensive compute 69ms. {, { Call HTTP Ressources : For an HTTP ressources total of 0.0 ms. Call the database 7 times during 14 ms. e

Page 50: Softshake 2015   comment tester et optimiser la performance d'un si

L'outilutilisé

Page 51: Softshake 2015   comment tester et optimiser la performance d'un si

Desproblèmes"mineurs"peuventdevenircritiquesàl'échelled'unSI

LatenceN+1SQLrequêtesN+1appelsàdesapplicationsexternes

Lestests"end-to-end"sontobligatoirescarcertainsrésultatspeuventdéfierl'intuition

Page 52: Softshake 2015   comment tester et optimiser la performance d'un si

Boîteàoutilspourlestests"end-to-end"

Disclaimer

Lestestsend-to-endsontcomplexes.Cecineseveutpasuneméthodesystémiquemaisuninventaired'outilsàdisposition,ainsiqu'unREXsurleurefficacité

Page 53: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#1:Analysedelaproductionexistante

Analysedeslatencesentresystèmes

Identificationdugouletd'étranglement

Découvertedesproblèmesdedesign

Évaluationdelacapacitédusystème

Page 54: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#1:Analysedelaproductionexistante

Exempledel'évaluationdelacapacitédusystème

Page 55: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#1:Analysedelaproductionexistante

Exempledel'évaluationdelacapacitédusystème

Page 56: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#1:Analysedelaproductionexistante

Exempledel'évaluationdelacapacitédusystème

Page 57: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#1:Analysedelaproductionexistante

Exempledel'évaluationdelacapacitédusystème

Page 58: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#1:Analysedelaproductionexistante

Exempledel'évaluationdelacapacitémaximaledusystème

Page 59: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#1:attentionauxchiffres!

Volume Tempsderéponsemoyen

1000transactions 15s

2000transactions 40s

Page 60: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#1:attentionauxchiffres!

Page 61: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#2:Benchmarkunitaire

Définition:mesuredelaréponseàunetransactionunitaire

Page 62: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#2:Benchmarkunitaire

Exempled'analyse

Page 63: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#3:lepicdetransactions

Page 64: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#3:lepicdetransactions

Exempled'analyse

Page 65: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#4:"rejeu"d'unejournéedeproduction

simplifiéebiensûr!

Page 66: Softshake 2015   comment tester et optimiser la performance d'un si

Outil#5:mettreenproduction

Toutcequipeutêtremisenproductionparavancedoitl'être

Pensezvotrestratégiedemigrationpourmonterenchargeprogressivement

Inspirez-vousdes"GéantsduWeb"

Page 67: Softshake 2015   comment tester et optimiser la performance d'un si

Take-away

Faitesdestests,mêmeimparfaitsMesurezscientifiquementRevenez-enàdesproblèmessimplesExtrapolez,enayantconsciencedeslimites

Page 68: Softshake 2015   comment tester et optimiser la performance d'un si

"Touslesmodèlessontfaux,certainssontutiles"

Page 69: Softshake 2015   comment tester et optimiser la performance d'un si

Sicelavousaintéressé

[email protected]

Page 70: Softshake 2015   comment tester et optimiser la performance d'un si

Sources

Touslesslides:icônes(c)OCTOTechnology(2015)

:

: et

:

:

:

:

:

:

:

:

:

Autantattendrelamiseenproduction Morguefile

Vivresesrêvess ginacn.blogspot.fr Wikipedia

APM OutilDynatrace

GoogleDapper Dapper,aLarge-ScaleDistributedSystemsTracingInfrastructure

Bonnespratiques GéantsduWeb,l'obsessiondelamesure

Exemplesdeloisdepoisson Wikipedia

Cycledediffusiondel'innovation Wikipedia

TrafficsurInternet Libstat

Testsend-to-end Youtube:SpectacularDominoRallyStuntScreenLink4:51

Touslesmodèlessontfauxcertainssontutiles Morguefile

TheOCTOWay (c)OCTOTechnology2015