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

Post on 06-Apr-2017

487 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Commenttesteretoptimiserlaperformanced'unSI?

22octobre2015

MarcBOJOLY

CyrilPICAT

OCTOTechnologyLausanne,consultant

OCTOTechnologyParis,manageretconsultantCo-fondateurduPerformanceUserGroupParis

Leprojet:migrationd'unebanqueversunenouvelleplateformetitres

Quelqueschiffres

Clients:x10

Portefeuillestitres:x5

Positions:x3

Titres:+50%

OrdresdeBourse:x2

Leprojet:migrationd'unebanqueversunenouvelleplateformetitres

Autantattendrelamiseenproduction...

Méconnaissances

Nierl'existenceduproblème Onabientravaillé,çavapasser

Nierl'existencedesolutions C'estimpossibleàtestersaufenprod

Nierlafiabilitédessolutions Lachargeneserapasreprésentative

Mettreendoutesescapacités

Onn'yarriverajamais

Idéesreçuessurlespré-requis

Unepré-productionidentiqueàlaproductionSimulerl'ensembledesactivitésdelabanque

Idéesreçuessurlestestsdecharge

Testerenautomatique?Impossiblemêmeavec<unnomdeproduitici>

Idéesreçuessurlediagnostic

Lesproblèmessontsurlemainframe

Cesontdesidéesreçues

Notreobjectif,vousmontrer

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

Dansunmondeparfait...

“Faisdetavieunrêve,etd'unrêveuneréalité.”AntoinedeSaint-Exupéry-Cahiers

deSaint-Exupéry(1900-1944)

Rêve:unevueintégréedelaperformance

Dynatrace

Réalité:Quilefaitauniveaud'unSI?

GoogleDapper

Réalité:Commencerpardesoutilssimples

Analysedelogs(python,pandas...)

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

Rêve:Toutcequ'ilfautpourfairelestests

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

Réalité:Lesintangibles

UnenvironnementopérationnelUnjeudedonnéesminimalUnezonedemesureisolée

Pourlereste...

Savoirfixersespriorités

Lesproblèmespeuventsembler

vertigineux

Ilfaut"cadrer"lechantier

FactualiserlesvolumesexistantsetciblesListerlesproblèmesexistantsBrainstormersurlesproblèmespotentiels

Lesproblèmes"usuels"

1. Capacitéentermedenombredetransactions/jour

2. Augmentationdevolumétrie(x2)

3. SLAtempsderéponseend-to-end

4. Lenteursactuelles5. Augmentationdu

nombred'utilisateurs6. Impactsurladuréedes

batchs7. Latenceettempsde

réponsepourlesutilisateursdistants

Etensuite?

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

ChaqueproblèmerestecomplexeetliéauresteduSI

Diviserpourmieuxrégner

2patterns

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

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

Diviser/découpler:unexemple

Diviser/découpler:unexemple

Etmaintenant?

Neprévoyezpasuntestdechargepourtouslesproblèmes!

Penseràd'autresoutils

Analysedel'existant

Modélisationetextrapolation

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

Testdechargedelacible(données,systèmes)

Oùpouvez-vousvous"planter"?

Mauvaiseconnaissancedelaperformanceexistante

Mauvaiseconnaissancedesusagesexistants

Bonnespratiquesdetestsdecharges(applicationparapplication)

Délimiterlepérimètretesté

CaruntestdechargeresteuntestautomatiséCaruntestenerreurnesertàrien

Comment?

ChoisissezsoigneusementvotrejeudedonnéesOudéveloppezdesbouchons

Bouchonner

LescomposantsutiliséssystématiquementLeplussimplementpossible

Modéliserscientifiquement

Modéliserlecomportementdemesutilisateurs?

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

Modélisationscientifique

LavéritéestenproductionUnmodèle:moyenneETpercentile99th

ExempledeloisdePoisson

Modélisaton:soyezprédictifs

Sivousn'avezpasdestatistiquesproduction,

proposezunmodèledeprévisiondunombred'utilisateurs

Modélisation:soyezprédictifs

Sivousn'avezpasdestatistiquesproduction,

proposezunmodèledeprévisiondeleurutilisation

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

Testsdechargeparapplication

UnebriquedebasedelaperformanceduSI

Commentfait-onpourmangerunéléphant?Bouchéeparbouchée.

Maisilfaut(quandmême)testerenend-to-end

DEMOQuizz:quelestletempsderéponsed'uneapplication?

70ms.detraitement

7appelsenbasededonnées,14ms.chacun

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.

DEMO&Quizz:quelestletempsderéponsed'unechaîneapplicativedansunSI

?

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

Appelssynchronesséquentiels

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.

DEMO&Quizz:quelestletempsderéponsedelamêmechaînedansune

modélisationplusprochedelaréalité?

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

ImplémentationdeceQuizz

Diokles:AnInformationSystemscaleperformancesimulator

https://github.com/mbojoly/diokles

L'outilutilisé

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

LatenceN+1SQLrequêtesN+1appelsàdesapplicationsexternes

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

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

Disclaimer

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

Outil#1:Analysedelaproductionexistante

Analysedeslatencesentresystèmes

Identificationdugouletd'étranglement

Découvertedesproblèmesdedesign

Évaluationdelacapacitédusystème

Outil#1:Analysedelaproductionexistante

Exempledel'évaluationdelacapacitédusystème

Outil#1:Analysedelaproductionexistante

Exempledel'évaluationdelacapacitédusystème

Outil#1:Analysedelaproductionexistante

Exempledel'évaluationdelacapacitédusystème

Outil#1:Analysedelaproductionexistante

Exempledel'évaluationdelacapacitédusystème

Outil#1:attentionauxchiffres!

Volume Tempsderéponsemoyen

1000transactions 15s

2000transactions 40s

Outil#1:attentionauxchiffres!

Outil#2:Benchmarkunitaire

Définition:mesuredelaréponseàunetransactionunitaire

Outil#2:Benchmarkunitaire

Exempled'analyse

Outil#3:lepicdetransactions

Outil#3:lepicdetransactions

Exempled'analyse

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

simplifiéebiensûr!

Outil#5:mettreenproduction

Toutcequipeutêtremisenproductionparavancedoitl'être

Pensezvotrestratégiedemigrationpourmonterenchargeprogressivement

Inspirez-vousdes"GéantsduWeb"

Take-away

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

"Touslesmodèlessontfaux,certainssontutiles"

Sicelavousaintéressé

recrutement@octo.com

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

top related