Maintenant que nous avons une application à tester, nous pouvons utiliser gatling pour simuler de la charge et voir comment se comporte l’application en cas de chute d’un noeud master.
Le script se contente de se logguer, et de rafraîchir 3 fois la page index. Il va injecter 20 users par seconde pendant 5 minutes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
package com.axioconsulting import scala.concurrent.duration._ import io.gatling.core.Predef._ import io.gatling.http.Predef._ import io.gatling.jdbc.Predef._ class Session extends Simulation { val httpProtocol = http .baseURL("http://172.17.0.83:8080") .inferHtmlResources(WhiteList(), BlackList()) .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") .acceptEncodingHeader("gzip, deflate") .acceptLanguageHeader("en") .connection("keep-alive") .doNotTrackHeader("1") .userAgentHeader("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0") val headers_1 = Map("Accept" -> "image/png,image/*;q=0.8,*/*;q=0.5") val uri1 = "http://172.17.0.83:8080" val scn = scenario("Session") .exec(http("Login") .get("/session-webapp/login.html?userName=benoit") ) .pause(7) .exec(http("refresh_1") .get("/session-webapp/index.jsp") .resources(http("request_4") .get(uri1 + "/favicon.ico"))) .pause(1) .exec(http("refresh_2") .get("/session-webapp/index.jsp") ) .pause(1) .exec(http("refresh_3") .get("/session-webapp/index.jsp") ) /*setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)*/ setUp(scn.inject(constantUsersPerSec(20) during(5 minutes))).protocols(httpProtocol) } |
J’ai arrêté un noeud master avec la commande supervisor :
1 2 |
supervisor> stop redis-1 redis-1: stopped |
Ce qui nous donne:
On peut voir qu’il y a des erreurs pendant près de 10s, le temps que le slave prenne le pas sur le master.
Il faudrait peut être modifier le session-manager pour tenir de ce problème. A suivre…