Performance au quotidien dans un environnement symfony

Preview:

Citation preview

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

1263

Mais pas le plus rapide

Symfony est le plus mature

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

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

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

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, "symfony-assets-install": "hard" }

Process de déploiement

Serveur d’admin

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

Rsync en parallèleApache graceful

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 correction1

2 3

Broken By Design Development

BBDD

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"

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

HP zodiac: - /psychologie/horoscope/zodiaque/

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

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

Recommended