43
Performance au quotidien #Symfony

Performance au quotidien dans un environnement symfony

Embed Size (px)

Citation preview

Page 1: Performance au quotidien dans un environnement symfony

Performance au quotidien#Symfony

Page 2: Performance au quotidien dans un environnement symfony

Xavier Leune

@beoneself

Page 3: Performance au quotidien dans un environnement symfony

Le groupe

Page 4: Performance au quotidien dans un environnement symfony

Nos chiffres

+ 60 M VU Monde (Comscore)+ 24 M VU France (Mediametrie - Desktop)

+ 700M Pages Vues

Page 5: Performance au quotidien dans un environnement symfony
Page 6: Performance au quotidien dans un environnement symfony

Trop confiant ?

Page 7: Performance au quotidien dans un environnement symfony

Oh no

Page 8: Performance au quotidien dans un environnement symfony
Page 9: Performance au quotidien dans un environnement symfony

La perf avant tout

100 ms

8 Mo

10 Req

Page 10: Performance au quotidien dans un environnement symfony

Réduire le coût

Source : Institut de l’estimation au doigt mouillé

Page 11: Performance au quotidien dans un environnement symfony

Les technos historiques

Page 12: Performance au quotidien dans un environnement symfony

Ou à construire

Un framework à choisir

Page 13: Performance au quotidien dans un environnement symfony

Technique de l'entonnoir

Analyse

Benchmark

Etude complète

1263

Page 14: Performance au quotidien dans un environnement symfony

Mais pas le plus rapide

Symfony est le plus mature

Page 15: Performance au quotidien dans un environnement symfony

Lower is better

00.5

11.5

22.5

33.5

44.5

1

2.4

0.4

4

Consommation Mémoire

CCMBase LaravelPlain PHP Symfony

05

1015202530354045

Consommation CPU

CCMBase Laravel Plain PHP Symfony

Page 16: Performance au quotidien dans un environnement symfony

Supporter jusqu’à 100 000 rps

Point de blocage: l’ORM

Page 17: Performance au quotidien dans un environnement symfony

Notre outil devra être conçu pour être performant

Performance

Page 18: Performance au quotidien dans un environnement symfony

Active Record… Seriously ?

Le pattern DataMapper

Page 19: Performance au quotidien dans un environnement symfony

Les dévs doivent savoir ce qu’ils font

Pas d’abstraction

Page 20: Performance au quotidien dans un environnement symfony

Eager Loading / Lazy Loading : Jamais la bonne réponse

Un no-RM

Page 21: Performance au quotidien dans un environnement symfony

Qui souhaite apprendre un méta langage pour écrire des requêtes ?

Raw SQL

Page 22: Performance au quotidien dans un environnement symfony

La Developer eXperience avant tout

DX

Page 23: Performance au quotidien dans un environnement symfony

http://tech.ccmbg.com/ting/

Page 24: Performance au quotidien dans un environnement symfony

La vitesse de requête ne fait pas tout

Optimisez votre cache privé!

Page 25: Performance au quotidien dans un environnement symfony

ESI / 304 à l’origine

Optimisez votre cache public !

Page 26: Performance au quotidien dans un environnement symfony

Les ESI : un fonctionnement méconnu<esi:include src="http://example.com/footer" onerror="continue" />

Page 27: Performance au quotidien dans un environnement symfony

Les 304 : Une page toujours à jour

Visiteur Proxy

GET /produit

BackendGET /produit

Page en cache ?200 OK

Non

Oui

200 OK

GET /produitIf-Modified-Since: Sun, 03

Apr 2016 18:14:00 GMT

304 Not Modified

Page 28: Performance au quotidien dans un environnement symfony

Déploiement et bonnes pratiques

Attention au cache Symfony

Page 29: Performance au quotidien dans un environnement symfony

Sinon c’est plus vraiment du cache

Jamais de compilation en prod

Page 30: Performance au quotidien dans un environnement symfony

Composer install : Le piège

Page 31: Performance au quotidien dans un environnement symfony

Composer install : Masterisé

"extra": { "symfony-app-dir": "app", "symfony-web-dir": "web", "symfony-cache-warmup": true, "symfony-assets-install": "hard" }

Page 32: Performance au quotidien dans un environnement symfony

Process de déploiement

Serveur d’admin

1 – Git pull2 – Build phing• composer install• compilation sass• …

Rsync en parallèleApache graceful

Page 33: Performance au quotidien dans un environnement symfony

Le workflow complet

Zoom out

Page 34: Performance au quotidien dans un environnement symfony

Un process agile: côté Dév

Création d'une branche

Développement

{ CI }Intégration continue Déploiement &

Monitoring

Page 35: Performance au quotidien dans un environnement symfony

Let's focus on brackets

{ }Peer Review Tests unitaires

Tests fonctionnels Test utilisateur

Page 36: Performance au quotidien dans un environnement symfony

Analyse et correction1

2 3

Page 37: Performance au quotidien dans un environnement symfony

Broken By Design Development

BBDD

Page 38: Performance au quotidien dans un environnement symfony
Page 39: Performance au quotidien dans un environnement symfony

Choix des métriquestests: "Performance générale": path: "/*" assertions: - "main.cpu_time <= 100ms" - "metrics.sql.queries.count <= 10" - "main.peak_memory <= 10mb" - "metrics.output.network_out <= 250kb"

Page 40: Performance au quotidien dans un environnement symfony

Création des scénariosscenarios: HP horoscope: - /psychologie/horoscope/

HP zodiac: - /psychologie/horoscope/zodiaque/

Prevision belier du jour: - /psychologie/horoscope/zodiaque/belier-jour/

Page 41: Performance au quotidien dans un environnement symfony

Back to brackets

{ }Peer Review Tests unitaires

Tests fonctionnels Test utilisateur

Tests de performance

Page 42: Performance au quotidien dans un environnement symfony

Attention à vos assets…

Front-End != Magic

Page 43: Performance au quotidien dans un environnement symfony

Merci ! Questions ?

On recrute !

http://tech.ccmbg.com/blog/http://tech.ccmbg.com/ting/

@beoneself