Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Performance au quotidien
#Symfony
Xavier Leune
@beoneself
Le groupe
Nos chiffres
+ 60 M VU Monde (Comscore)
+ 24 M VU France (Mediametrie - Desktop)
+ 700M Pages Vues
Trop confiant ?
Oh no
La perf avant tout
100
ms
8
Mo
10
Req
Réduire le coût
Source : Institut de l’estimation au doigt mouillé
Les technos historiques
Ou à construire
Un framework à choisir
Technique de l'entonnoir
Analyse
Benchmark
Etude complète
12
6
3
Mais pas le plus rapide
Symfony est le plus
mature
Lower is better
1
2.4
0.4
4
0
1
2
3
4
5
Consommation Mémoire
CCMBase Laravel Plain PHP Symfony
0
10
20
30
40
50
Consommati...
Supporter jusqu’à 100 000 rps
Point de blocage: l’ORM
Notre outil devra être conçu pour être
performant
Performance
Active Record… Seriously ?
Le pattern DataMapper
Les dévs doivent savoir ce qu’ils font
Pas d’abstraction
Eager Loading / Lazy Loading : Jamais la
bonne réponse
Un no-RM
Qui souhaite apprendre un méta langage
pour écrire des requêtes ?
Raw SQL
La Developer eXperience avant tout
DX
http://tech.ccmbg.com/ting/
La vitesse de requête ne fait pas tout
Optimisez votre cache privé!
ESI / 304 à l’origine
Optimisez votre cache public !
Les ESI : un fonctionnement méconnu
<esi:include
src="http://example.com/footer"
onerror="continue" />
Les 304 : Une page toujours à jour
Visiteur Proxy
GET /produit
Backend
GET /produit
Page en cache ?
200 OK
Non
Oui
200 OK
...
Déploiement et bonnes pratiques
Attention au cache Symfony
Sinon c’est plus vraiment du cache
Jamais de compilation en prod
Composer install : Le piège
Composer install : Masterisé
"extra": {
"symfony-app-dir": "app",
"symfony-web-dir": "web",
"symfony-cache-warmup": true,
...
Process de déploiement
Serveur
d’admin
1 – Git pull
2 – Build phing
• composer install
• compilation sass
• …
Rsync en par...
Le workflow complet
Zoom out
Un process agile: côté Dév
Création d'une
branche
Développement
{ CI }
Intégration continue Déploiement &
Monitoring
Let's focus on brackets
Peer Review Tests unitaires
Tests fonctionnels Test utilisateur
Analyse et correction
1
2 3
Broken By Design Development
BBDD
Choix des métriques
tests:
"Performance générale":
path: "/*"
assertions:
- "main.cpu_time <= 100ms"
- "metrics.sql.querie...
Création des scénarios
scenarios:
HP horoscope:
- /psychologie/horoscope/
HP zodiac:
- /psychologie/horoscope/zodiaque/
Pr...
Back to brackets
Peer Review Tests unitaires
Tests fonctionnels Test utilisateur
Tests de
performance
Attention à vos assets…
Front-End != Magic
Merci ! Questions ?
On recrute !
http://tech.ccmbg.com/blog/
http://tech.ccmbg.com/ting/
@beoneself
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfony
Prochain SlideShare
Chargement dans…5
×

Performance au quotidien dans un environnement symfony

1 744 vues

Publié le

C'est bien connu, les frameworks full stack, c'est lourd et c'est lent, Symfony le premier. Et chez CCM Benchmark (2ème groupe internet français - 50M de VU), on fait tout pour éviter la lenteur ! Alors pourquoi ai-je décider de migrer nos dizaines d'applications vers Symfony ? Et surtout comment respecter les critères de performances que nous avions défini avec notre bon vieux framework maison ?

Voyons ensemble les raisons qui m'ont poussé à faire ce choix et surtout quels process et solutions nous avons pu mettre en oeuvre pour éviter des régressions de performance.

Publié dans : Technologie
  • Soyez le premier à commenter

Performance au quotidien dans un environnement symfony

  1. 1. Performance au quotidien #Symfony
  2. 2. Xavier Leune @beoneself
  3. 3. Le groupe
  4. 4. Nos chiffres + 60 M VU Monde (Comscore) + 24 M VU France (Mediametrie - Desktop) + 700M Pages Vues
  5. 5. Trop confiant ?
  6. 6. Oh no
  7. 7. La perf avant tout 100 ms 8 Mo 10 Req
  8. 8. Réduire le coût Source : Institut de l’estimation au doigt mouillé
  9. 9. Les technos historiques
  10. 10. Ou à construire Un framework à choisir
  11. 11. Technique de l'entonnoir Analyse Benchmark Etude complète 12 6 3
  12. 12. Mais pas le plus rapide Symfony est le plus mature
  13. 13. Lower is better 1 2.4 0.4 4 0 1 2 3 4 5 Consommation Mémoire CCMBase Laravel Plain PHP Symfony 0 10 20 30 40 50 Consommation CPU CCMBase Laravel Plain PHP Symfony
  14. 14. Supporter jusqu’à 100 000 rps Point de blocage: l’ORM
  15. 15. Notre outil devra être conçu pour être performant Performance
  16. 16. Active Record… Seriously ? Le pattern DataMapper
  17. 17. Les dévs doivent savoir ce qu’ils font Pas d’abstraction
  18. 18. Eager Loading / Lazy Loading : Jamais la bonne réponse Un no-RM
  19. 19. Qui souhaite apprendre un méta langage pour écrire des requêtes ? Raw SQL
  20. 20. La Developer eXperience avant tout DX
  21. 21. http://tech.ccmbg.com/ting/
  22. 22. La vitesse de requête ne fait pas tout Optimisez votre cache privé!
  23. 23. ESI / 304 à l’origine Optimisez votre cache public !
  24. 24. Les ESI : un fonctionnement méconnu <esi:include src="http://example.com/footer" onerror="continue" />
  25. 25. Les 304 : Une page toujours à jour Visiteur Proxy GET /produit Backend GET /produit Page en cache ? 200 OK Non Oui 200 OK GET /produit If-Modified-Since: Sun, 03 Apr 2016 18:14:00 GMT 304 Not Modified
  26. 26. Déploiement et bonnes pratiques Attention au cache Symfony
  27. 27. Sinon c’est plus vraiment du cache Jamais de compilation en prod
  28. 28. Composer install : Le piège
  29. 29. Composer install : Masterisé "extra": { "symfony-app-dir": "app", "symfony-web-dir": "web", "symfony-cache-warmup": true, "symfony-assets-install": "hard" }
  30. 30. Process de déploiement Serveur d’admin 1 – Git pull 2 – Build phing • composer install • compilation sass • … Rsync en parallèle Apache graceful
  31. 31. Le workflow complet Zoom out
  32. 32. Un process agile: côté Dév Création d'une branche Développement { CI } Intégration continue Déploiement & Monitoring
  33. 33. Let's focus on brackets Peer Review Tests unitaires Tests fonctionnels Test utilisateur
  34. 34. Analyse et correction 1 2 3
  35. 35. Broken By Design Development BBDD
  36. 36. Choix des métriques tests: "Performance générale": path: "/*" assertions: - "main.cpu_time <= 100ms" - "metrics.sql.queries.count <= 10" - "main.peak_memory <= 10mb" - "metrics.output.network_out <= 250kb"
  37. 37. Création des scénarios scenarios: HP horoscope: - /psychologie/horoscope/ HP zodiac: - /psychologie/horoscope/zodiaque/ Prevision belier du jour: - /psychologie/horoscope/zodiaque/belier- jour/
  38. 38. Back to brackets Peer Review Tests unitaires Tests fonctionnels Test utilisateur Tests de performance
  39. 39. Attention à vos assets… Front-End != Magic
  40. 40. Merci ! Questions ? On recrute ! http://tech.ccmbg.com/blog/ http://tech.ccmbg.com/ting/ @beoneself

×