SlideShare une entreprise Scribd logo
1
2
Comment gérer le cache
d’un site web à fort trafic ?
Cyril LABBE
Architecte applicatif en chef
3
Fossoyeur du code legacy
“
“
Arnaud LAHAXE
Architecte applicatif
@arnaud_lahaxe
4
Pourfendeur de code non optimisé
“
“
5
Boursorama Banque
Portail
▪ Leader de l’actualité économique et financière en France
▪ Streaming temps réel de cotations boursières
▪ Flux d’actualité en continu
▪ Forum boursier
6
Site client
▪ Leader de la banque en ligne en France
▪ La banque la moins chère depuis 10 ans
▪ 99% des démarches en ligne
▪ 1.7 million de clients
▪ 20% de nouveaux clients par an
▪ Guichet unique pour toute l’activité client
7
Applications
▪ 3 applications natives sur iOS et Android
▪ 600 000 utilisateurs par jour
8
Environnement technique (partie WEB)
▪ 1 brique du SI boursorama
▪ +/- 1200 serveurs
▪ 2 datacenters
▪ +50 partenaires utilisés sur le site live
▪ 7 barbus / 50 développeurs
▪ > 2 millions de lignes de code
▪ 200 000 lignes de code modifiées par mois
▪ 1400 pull request / mois
9
À Nancy depuis 20 ans
Environnement technique
10
APPS
Traffic
11
12
Qu’est-ce que le cache ?
Le cache
Un cache est une mémoire ou partie de mémoire dans laquelle sont stockés de façon
temporaire les données [...] les plus fréquemment ou les plus récemment utilisées, que
l'ordinateur peut interroger afin de réduire les temps de réponse.
13
“ “
Postulat de base
14
Dans 99,9% des cas, les données client affichées ne changent pas pendant une
session de navigation sans action du client.
“ “
Pourquoi mettre en place du cache ?
▪ Performances : pour optimiser nos temps
de réponse
▪ Économies : pour ne pas solliciter
l’infrastructure/ les partenaires plusieurs
fois pour le même résultat
▪ Résilience : ne pas exposer nos serveurs
applicatifs en cas de pic de trafic
▪ Mansuétude : servir la dernière réponse
valide en cas d’erreur
15
Pilotage par l'application
▪ La possibilité de mettre en cache chaque réponse:
▪ combien de temps
▪ par quel cache et sur quels critères discriminants
▪ comment ce cache pourra être invalidé
▪ L’invalidation d’entrées de cache précédentes:
▪ sur quels événements
▪ comment les sélectionner
16
A quel niveau gérer du cache ?
▪ Dans l’application pour cacher un résultat pour le hit courant:
▪ dans une variable le temps de l’exécution
▪ Dans l’application pour cacher un résultat pour le récupérer au hit suivant:
▪ dans un fichier sur le serveur
▪ dans une base de données (sql, clef/ valeur…)
▪ dans la mémoire partagée de l’application
▪ dans un cookie à transmettre au prochain hit
▪ En amont de l'application:
▪ dans le navigateur client pour éviter le prochain hit
▪ via un proxy cache HTTP
17
18
Cache HTTP
Pourquoi du cache HTTP à Boursorama ?
▪ Basé sur le standard HTTP (RFC 7234) section 5.2
▪ Implémentation technique du cache isolé de l’application
▪ Des partenaires avec des temps de réponse à plus de 20s
▪ Des lenteurs suite à la refonte de l’espace client
19
Entrée de cache HTTP
20
Clef Url + méthode + headers (vary)
Valeur Le body de la réponse HTTP
TTL max-age, s-maxage, max-stale
Tags x-key, x-cache-tag
Varnish
▪ Cache reverse proxy
▪ Écrit en C
▪ Support partiel des ESI
▪ Customisable (vcl)
▪ Licence BSD
21
Pas de données en cache (MISS)
22
Reverse-proxy cache
300ms
400ms
1000ms
1015ms
WEB API
On a les données en cache (HIT)
23
Reverse-proxy cache
15ms
WEB
On a les données à rafraîchir mais pas expirées (Grace)
24
Reverse-proxy cache
15ms
300ms
400ms
1000ms
WEB API
On a les données expirées en cache mais l’api est en erreur
25
Reverse-proxy cache
WEB API
Que mettre dans un cache HTTP
▪ API: Les données sous-jacentes à plusieurs pages
▪ Page: Une même page peut être demandée souvent
▪ ESI: Un fragment de page fréquent ou présent dans plusieurs pages
26
Page HTML Fragment
(ESI)
API
ESI
27
<html>
<head></head>
<body>
<h1>Titre</h1>
<esi:include src="http://example.com/header.html" />
<p>Contenu...</p>
<esi:include src="http://example.com/footer.html" />
</body>
</html>
http://example.com/header.html
http://example.com/footer.html
http://example.com/index.html
● Spécifié en 2001
● Langage de balisage pour l’assemblage de pages web
https://www.w3.org/TR/2001/NOTE-esi-lang-20010804
ESI
28
Menu
Profile
Article
Sidebar
Commentaires
Cache 24h
http://foo.fr/_fragments/menu
Cache 1h lié au client connecté
http://foo.fr/_fragments/profiles/123456
Cache 2h
http://foo.fr/_fragments/sidebar
Cache 24h lié à l’article affiché
http://foo.fr/_fragments/articles/12
Cache 10m lié à l’article affiché et au client connecté
http://foo.fr/_fragments/articles/12/comments
Proxy de cache sur le site
29
▪ 15 ESI
▪ 15 durées de cache
▪ Blocks partagés sur
d’autres pages
▪ Blocks résilients aux
pannes
▪ 92% des hits en cache
30
En faisant attention à la
cuillerée, on perd tout le
pot
Les contraintes/ risques
➢ On doit pouvoir perdre le cache à tout moment, donc toute
donnée dans le cache doit être reconstructible
31
Erreur commune:
▪ Stocker des données de formulaires à étapes en cache
Problématique:
▪ Un serveur de cache doit être redémarré/ purgé
▪ Un serveur de cache tombe en panne
Conséquence:
▪ Les clients perdent leur progression dans les parcours
Les contraintes/ risques
➢ Invalidation du cache : une donnée en cache ne doit plus
être servie si elle est périmée (durée ou événement)
32
Erreur :
▪ Oublier de purger le cache du client après un virement
Conséquence :
▪ La liste des opérations n’est plus à jour
▪ Les soldes affichés sont faux
▪ Le client fait son virement une seconde fois
Les contraintes/ risques
➢ Collisions : les clefs de cache doivent être uniques
33
Erreur commune :
▪ Oublier de mettre un vary sur les données du client
Conséquence :
▪ Un client peut voir les informations d’un autre client
Les contraintes/ risques
➢ Sécurité : la session a expiré mais la donnée est en cache
34
Erreur commune :
▪ Varnish ne vérifie pas que la session est toujours active
Conséquence :
▪ Un client déconnecté peut encore avoir accès à ses
données tant que le cache est valide
Les contraintes/ risques
➢ Le visiteur/ client a un cookie
35
Problème :
▪ L’application pose des cookies
Problématique :
▪ Varnish par défaut ne met rien en cache quand il y a des cookies
Conséquence :
▪ Pas de gain de performance
36
Questions ?
37

Contenu connexe

Similaire à [2018] Comment gérer le cache d’un site web à fort trafic ?

[2019] Comment faire une migration sur une fonctionnalité critique ?
[2019] Comment faire une migration sur une fonctionnalité critique ?[2019] Comment faire une migration sur une fonctionnalité critique ?
[2019] Comment faire une migration sur une fonctionnalité critique ?
LAHAXE Arnaud
 
Alan Poe appliqué au data streaming - toutes choses sont bonnes ou mauvaises ...
Alan Poe appliqué au data streaming - toutes choses sont bonnes ou mauvaises ...Alan Poe appliqué au data streaming - toutes choses sont bonnes ou mauvaises ...
Alan Poe appliqué au data streaming - toutes choses sont bonnes ou mauvaises ...
Julien Cognet
 
Morning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesMorning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slides
Oxalide
 
Oxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceOxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performance
Ludovic Piot
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data Processing
Lilia Sfaxi
 
Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"
Adyax
 
Gestion des performances Magento et Hebergement
Gestion des performances Magento et HebergementGestion des performances Magento et Hebergement
Gestion des performances Magento et Hebergement
X2i
 
JSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéJSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéChristophe Laporte
 
Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...
Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...
Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...
Peak Ace
 
Propostion un Iaas
Propostion un IaasPropostion un Iaas
Propostion un Iaas
yacine sebihi
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ?
haricot
 
Datit207 scénarios hybrides entre sql server et windows azure
Datit207   scénarios hybrides entre sql server et windows azureDatit207   scénarios hybrides entre sql server et windows azure
Datit207 scénarios hybrides entre sql server et windows azureChristophe Laporte
 
Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud Databases
OVHcloud
 
[Café Techno] Veeam 8 : Réduire au strict minimum la fenêtre de sauvegarde - ...
[Café Techno] Veeam 8 : Réduire au strict minimum la fenêtre de sauvegarde - ...[Café Techno] Veeam 8 : Réduire au strict minimum la fenêtre de sauvegarde - ...
[Café Techno] Veeam 8 : Réduire au strict minimum la fenêtre de sauvegarde - ...
Groupe D.FI
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.Fr
Oxalide
 
Besoin fonctionnelle (1)
Besoin fonctionnelle (1)Besoin fonctionnelle (1)
Besoin fonctionnelle (1)
AmalDAAGI1
 
Ix812 g formation-ibm-informix-administration-systeme
Ix812 g formation-ibm-informix-administration-systemeIx812 g formation-ibm-informix-administration-systeme
Ix812 g formation-ibm-informix-administration-systemeCERTyou Formation
 
TechDays 2011 - VIR302 virtualiser vos applications métiers critiques sous hy...
TechDays 2011 - VIR302 virtualiser vos applications métiers critiques sous hy...TechDays 2011 - VIR302 virtualiser vos applications métiers critiques sous hy...
TechDays 2011 - VIR302 virtualiser vos applications métiers critiques sous hy...
Patrick Guimonet
 
La Sécurité Sur Le Web
La Sécurité Sur Le WebLa Sécurité Sur Le Web
La Sécurité Sur Le Web
Groupe Revolution 9
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
Houda TOUKABRI
 

Similaire à [2018] Comment gérer le cache d’un site web à fort trafic ? (20)

[2019] Comment faire une migration sur une fonctionnalité critique ?
[2019] Comment faire une migration sur une fonctionnalité critique ?[2019] Comment faire une migration sur une fonctionnalité critique ?
[2019] Comment faire une migration sur une fonctionnalité critique ?
 
Alan Poe appliqué au data streaming - toutes choses sont bonnes ou mauvaises ...
Alan Poe appliqué au data streaming - toutes choses sont bonnes ou mauvaises ...Alan Poe appliqué au data streaming - toutes choses sont bonnes ou mauvaises ...
Alan Poe appliqué au data streaming - toutes choses sont bonnes ou mauvaises ...
 
Morning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesMorning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slides
 
Oxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceOxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performance
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data Processing
 
Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"
 
Gestion des performances Magento et Hebergement
Gestion des performances Magento et HebergementGestion des performances Magento et Hebergement
Gestion des performances Magento et Hebergement
 
JSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéJSS2013 : Haute disponibilité
JSS2013 : Haute disponibilité
 
Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...
Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...
Améliorer les performances de vos sites web une priorité pour 2018 - Petit dé...
 
Propostion un Iaas
Propostion un IaasPropostion un Iaas
Propostion un Iaas
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ?
 
Datit207 scénarios hybrides entre sql server et windows azure
Datit207   scénarios hybrides entre sql server et windows azureDatit207   scénarios hybrides entre sql server et windows azure
Datit207 scénarios hybrides entre sql server et windows azure
 
Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud Databases
 
[Café Techno] Veeam 8 : Réduire au strict minimum la fenêtre de sauvegarde - ...
[Café Techno] Veeam 8 : Réduire au strict minimum la fenêtre de sauvegarde - ...[Café Techno] Veeam 8 : Réduire au strict minimum la fenêtre de sauvegarde - ...
[Café Techno] Veeam 8 : Réduire au strict minimum la fenêtre de sauvegarde - ...
 
Conférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.FrConférence AFUP 20minutes.Fr
Conférence AFUP 20minutes.Fr
 
Besoin fonctionnelle (1)
Besoin fonctionnelle (1)Besoin fonctionnelle (1)
Besoin fonctionnelle (1)
 
Ix812 g formation-ibm-informix-administration-systeme
Ix812 g formation-ibm-informix-administration-systemeIx812 g formation-ibm-informix-administration-systeme
Ix812 g formation-ibm-informix-administration-systeme
 
TechDays 2011 - VIR302 virtualiser vos applications métiers critiques sous hy...
TechDays 2011 - VIR302 virtualiser vos applications métiers critiques sous hy...TechDays 2011 - VIR302 virtualiser vos applications métiers critiques sous hy...
TechDays 2011 - VIR302 virtualiser vos applications métiers critiques sous hy...
 
La Sécurité Sur Le Web
La Sécurité Sur Le WebLa Sécurité Sur Le Web
La Sécurité Sur Le Web
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 

[2018] Comment gérer le cache d’un site web à fort trafic ?

  • 1. 1
  • 2. 2 Comment gérer le cache d’un site web à fort trafic ?
  • 3. Cyril LABBE Architecte applicatif en chef 3 Fossoyeur du code legacy “ “
  • 6. Portail ▪ Leader de l’actualité économique et financière en France ▪ Streaming temps réel de cotations boursières ▪ Flux d’actualité en continu ▪ Forum boursier 6
  • 7. Site client ▪ Leader de la banque en ligne en France ▪ La banque la moins chère depuis 10 ans ▪ 99% des démarches en ligne ▪ 1.7 million de clients ▪ 20% de nouveaux clients par an ▪ Guichet unique pour toute l’activité client 7
  • 8. Applications ▪ 3 applications natives sur iOS et Android ▪ 600 000 utilisateurs par jour 8
  • 9. Environnement technique (partie WEB) ▪ 1 brique du SI boursorama ▪ +/- 1200 serveurs ▪ 2 datacenters ▪ +50 partenaires utilisés sur le site live ▪ 7 barbus / 50 développeurs ▪ > 2 millions de lignes de code ▪ 200 000 lignes de code modifiées par mois ▪ 1400 pull request / mois 9 À Nancy depuis 20 ans
  • 13. Le cache Un cache est une mémoire ou partie de mémoire dans laquelle sont stockés de façon temporaire les données [...] les plus fréquemment ou les plus récemment utilisées, que l'ordinateur peut interroger afin de réduire les temps de réponse. 13 “ “
  • 14. Postulat de base 14 Dans 99,9% des cas, les données client affichées ne changent pas pendant une session de navigation sans action du client. “ “
  • 15. Pourquoi mettre en place du cache ? ▪ Performances : pour optimiser nos temps de réponse ▪ Économies : pour ne pas solliciter l’infrastructure/ les partenaires plusieurs fois pour le même résultat ▪ Résilience : ne pas exposer nos serveurs applicatifs en cas de pic de trafic ▪ Mansuétude : servir la dernière réponse valide en cas d’erreur 15
  • 16. Pilotage par l'application ▪ La possibilité de mettre en cache chaque réponse: ▪ combien de temps ▪ par quel cache et sur quels critères discriminants ▪ comment ce cache pourra être invalidé ▪ L’invalidation d’entrées de cache précédentes: ▪ sur quels événements ▪ comment les sélectionner 16
  • 17. A quel niveau gérer du cache ? ▪ Dans l’application pour cacher un résultat pour le hit courant: ▪ dans une variable le temps de l’exécution ▪ Dans l’application pour cacher un résultat pour le récupérer au hit suivant: ▪ dans un fichier sur le serveur ▪ dans une base de données (sql, clef/ valeur…) ▪ dans la mémoire partagée de l’application ▪ dans un cookie à transmettre au prochain hit ▪ En amont de l'application: ▪ dans le navigateur client pour éviter le prochain hit ▪ via un proxy cache HTTP 17
  • 19. Pourquoi du cache HTTP à Boursorama ? ▪ Basé sur le standard HTTP (RFC 7234) section 5.2 ▪ Implémentation technique du cache isolé de l’application ▪ Des partenaires avec des temps de réponse à plus de 20s ▪ Des lenteurs suite à la refonte de l’espace client 19
  • 20. Entrée de cache HTTP 20 Clef Url + méthode + headers (vary) Valeur Le body de la réponse HTTP TTL max-age, s-maxage, max-stale Tags x-key, x-cache-tag
  • 21. Varnish ▪ Cache reverse proxy ▪ Écrit en C ▪ Support partiel des ESI ▪ Customisable (vcl) ▪ Licence BSD 21
  • 22. Pas de données en cache (MISS) 22 Reverse-proxy cache 300ms 400ms 1000ms 1015ms WEB API
  • 23. On a les données en cache (HIT) 23 Reverse-proxy cache 15ms WEB
  • 24. On a les données à rafraîchir mais pas expirées (Grace) 24 Reverse-proxy cache 15ms 300ms 400ms 1000ms WEB API
  • 25. On a les données expirées en cache mais l’api est en erreur 25 Reverse-proxy cache WEB API
  • 26. Que mettre dans un cache HTTP ▪ API: Les données sous-jacentes à plusieurs pages ▪ Page: Une même page peut être demandée souvent ▪ ESI: Un fragment de page fréquent ou présent dans plusieurs pages 26 Page HTML Fragment (ESI) API
  • 27. ESI 27 <html> <head></head> <body> <h1>Titre</h1> <esi:include src="http://example.com/header.html" /> <p>Contenu...</p> <esi:include src="http://example.com/footer.html" /> </body> </html> http://example.com/header.html http://example.com/footer.html http://example.com/index.html ● Spécifié en 2001 ● Langage de balisage pour l’assemblage de pages web https://www.w3.org/TR/2001/NOTE-esi-lang-20010804
  • 28. ESI 28 Menu Profile Article Sidebar Commentaires Cache 24h http://foo.fr/_fragments/menu Cache 1h lié au client connecté http://foo.fr/_fragments/profiles/123456 Cache 2h http://foo.fr/_fragments/sidebar Cache 24h lié à l’article affiché http://foo.fr/_fragments/articles/12 Cache 10m lié à l’article affiché et au client connecté http://foo.fr/_fragments/articles/12/comments
  • 29. Proxy de cache sur le site 29 ▪ 15 ESI ▪ 15 durées de cache ▪ Blocks partagés sur d’autres pages ▪ Blocks résilients aux pannes ▪ 92% des hits en cache
  • 30. 30 En faisant attention à la cuillerée, on perd tout le pot
  • 31. Les contraintes/ risques ➢ On doit pouvoir perdre le cache à tout moment, donc toute donnée dans le cache doit être reconstructible 31 Erreur commune: ▪ Stocker des données de formulaires à étapes en cache Problématique: ▪ Un serveur de cache doit être redémarré/ purgé ▪ Un serveur de cache tombe en panne Conséquence: ▪ Les clients perdent leur progression dans les parcours
  • 32. Les contraintes/ risques ➢ Invalidation du cache : une donnée en cache ne doit plus être servie si elle est périmée (durée ou événement) 32 Erreur : ▪ Oublier de purger le cache du client après un virement Conséquence : ▪ La liste des opérations n’est plus à jour ▪ Les soldes affichés sont faux ▪ Le client fait son virement une seconde fois
  • 33. Les contraintes/ risques ➢ Collisions : les clefs de cache doivent être uniques 33 Erreur commune : ▪ Oublier de mettre un vary sur les données du client Conséquence : ▪ Un client peut voir les informations d’un autre client
  • 34. Les contraintes/ risques ➢ Sécurité : la session a expiré mais la donnée est en cache 34 Erreur commune : ▪ Varnish ne vérifie pas que la session est toujours active Conséquence : ▪ Un client déconnecté peut encore avoir accès à ses données tant que le cache est valide
  • 35. Les contraintes/ risques ➢ Le visiteur/ client a un cookie 35 Problème : ▪ L’application pose des cookies Problématique : ▪ Varnish par défaut ne met rien en cache quand il y a des cookies Conséquence : ▪ Pas de gain de performance
  • 37. 37