Journée DevOps : Tests de performance en continu

Post on 11-May-2015

378 views 2 download

description

Vous n'avez pas pu assister à la journée DevOps by Xebia ? Voici la présentation de Guillaume Arnaud concernant les tests de performance en continu.

Transcript of Journée DevOps : Tests de performance en continu

Tests de perf en continu

Guillaume Arnaud @guillarnaud

William Montaz @willymontaz

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Plan

�2

contexte méthodologie

outils Demo

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Anticiper

�3

Multithreading dead lock isolation

Contention taille de pool sollicitation BDD

Système mémoire cpu

DevOps déploiement continu dimensionnement

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Loi de Little

�4

L = λ.𝝉

L = nombre de requêtes λ = fréquence 𝝉 = durée moyen des requêtes

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Loi de Little

�5

serveur d’application

1 requête/sec200 ms

5 requêtes

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Que teste-t-on ?

�6

test de perf != test de charge

non exhaustif

temps de référence

reproductabilité

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Ecrire un scénario

�7

dialogue simple

un service = un job

débit fixe

contrôle des réponses

données déterministes

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Environnement technique

�8

serveur d’intégration continu

serveur de monitoring

serveur d’application

Diamond

graphite

déploie

ordonnetire

récolte

alimente

alimente

alimente

récolte

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Gatling

�9

!

• Domain Specific Language (DSL) intuitive

• s’intègre bien avec Jenkins et Maven

• hype: scala, modèle actor

• peut être étendu

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Gatling: DSL

�10

val scn = scenario("My scenario") .exec(http("My Page") .get("http://mywebsite.com/page.html") .param("username", "bill") .check(status.is(200))) !setUp(scn.inject( constantRate(20 usersPerSec) during (15 seconds) ))

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Gatling

�11

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Graphite

�12

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Graphite

�13

wildcard target=server*.cpu

timeshift target=server1.cpu&from=-30min&until=-10min target=server1.cpu&target=timeShift(server1.cpu, "7d")

operations target=sumSeries(server*.cpu, "7d") target=derivative(gatling.hitcount)

format de sortie target=server1.cpu&format=json

graphique target=server*.cpu&bgcolor=blue&aeraMode=stacked

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Grafana

�14

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

JMXTrans

�15

{"servers" : [ { "port" : "8004", "host" : "mysys.mydomain", "queries" : [ { "outputWriters" : [ { "@class" : "com.g.j.m.output.GraphiteWriter", "settings" : {"port" : 2003,"host" : "myhost", "typeNames" : [ "name" ]} } ], "obj" : "Catalina:type=…,class=j.s.DataSource,name=*", "resultAlias": "datasources", "attr" : [ "numActive", "numIdle" ] } ], "numQueryThreads" : 2 } ] }

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Diamond

�16

• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC

Metrics

�17

public class QueueManager { private final Queue queue; ! public QueueManager(MetricRegistry metrics, String name) { this.queue = new Queue(); metrics.register(MetricRegistry.name(QueueManager.class, name, "size"), new Gauge<Integer>() { @Override public Integer getValue() { return queue.size(); } }); } }