caches web
Transcription
caches web
Proxy Distribution de contenu 1 - caches web élément intermédiaire dans une communication client-serveur • passerelle ✓ protocoles ✓ réseau public/privé ✓ paramètres réseau Christophe Deleuze Grenoble INP – ESISAR • filtrage • transformation de contenu • cache NE520 2010–2011 requête requête C réponse client SC S réponse proxy serveur Caches Cache web Pourquoi le cache est utile • proxy garde réponses en cache • 1 cache = 10–100 Go, Internet = 300 tera-octets (1012) • 0,033 % ... 1 C P 3 1 S 2 • gestion du cache ✓ Least Recently Used (LRU) ✓ Least Frequently Used (LFU) ✓ LRU + taille ✓ taille ✓ ... Caches 2 Forward Proxy Caching 3 Caches 5 Accélérateur web (reverse proxy) O • un proxy sert le contenu au client • géré par le FAI ✓ + débit ✓ + délai ✓ + charge origine ✓ – stats origine ✓ – fraicheur • explicite/forcé/transparent Caches O • origine caché derrière un proxy • géré par le fournisseur de contenu ✓ + charge origine • variante : web switch/server farm P C RP C C Caches C 4 Cluster Hiérarchie O • groupe de caches localisé • eqv système plus puissant projet Harvest ’94 • hiérarchie ➠ scalabilité • conf. statique • topologie du réseau P P P C P A P P B C C Caches 6 Caches 7 Vue d’ensemble j’entre une URL... 1. le nom est résolu en adresse IP (DNS) 2. une connexion TCP (“tuyau”) est ouverte HTTP (a) → TCP SYN R 1 (b) ← TCP SYN+ACK W 2 (c) → TCP ACK 3. la requête est envoyée, le serveur répond (en général, gd nb de requêtes et réponses) C 3 Caches Versions de HTTP 8 HTTP/1.1 – rfc 2616 • 0.9 ⇒ GET / HTTP/1.1 Host: z80.info User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.12) Gecko/2009072220 Icew Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive 1. client ouvre connexion et envoie GET doc.html 2. serveur écrit le fichier dans la connexion 3. la connexion est fermée • 1.0 – rfc 1945 ✓ possibilité connexion persistante ✓ format structuré pour les requêtes et les réponses ⇐ HTTP/1.1 200 OK Date: Fri, 09 Apr 2010 07:50:23 GMT Server: Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3 FrontPage/5.0.2.2635 Last-Modified: Sun, 07 Feb 2010 11:25:56 GMT ETag: "35d02c7-490e-4b6ea344" Content-Length: 18702 Connection: close Content-Type: text/html ⇒ GET / HTTP/1.0 User-Agent: Wget/1.11.4 Accept: */* Host: www.acrimed.org ⇐ HTTP/1.0 200 OK Date: Thu, 08 Apr 2010 13:11:50 GMT [...] <HTML><HEAD> [...] [le document] Caches 9 Gestion des proxys cache Caches 10 Caches 12 Caches 14 Ne cache pas si... • authentification • quelles réponses cacher ? • quels éléments des réponses ? • comment “économiser” en assurant la cohérence ? (transparence sémantique) ✓ expiration ✓ validation ✓ cache control ⇒ GET /Private/ HTTP/1.1 [...] ⇐ HTTP/1.1 401 Authorization Required WWW-Authenticate: Basic realm="Acces Restreint" [...] ⇒ GET /Private/ HTTP/1.1 Authorization: Basic cGhvdG9zOmdsb3BnbG9w [...] ⇐ HTTP/1.1 200 OK Date: Fri, 09 Apr 2010 09:28:26 GMT Server: Apache/ProXad [Aug 9 2008 02:45:09] [...] • indication explicite (on y revient) Caches 11 Parties non cachables Cohérence hop-by-hop headers : n’ont de sens que sur une connexion de transport, ne sont ni cachés ni relayés par les proxies. Connection Keep-Alive Proxy-Authenticate Proxy-Authorization Upgrade ... • degrés ✓ forte ✓ delta ✓ faible • type ✓ mutuelle ✓ 6= besoins pour 6= objets et 6= utilisateurs ✓ côté client (proxy)/serveur plus ceux listés dans Connection Caches 13 Expiration Validation • date spécifiée par le serveur : Expires • origine associe un “validateur” à la réponse • req. cond. avec validateur ✓ si OK ➠ 304 Not Modified • validateurs ✓ Last-Modified (If-Modified-Since) HTTP/1.0 ✓ ETag ➠ validateur “opaque” • validateurs faibles et forts ✓ faible : reste valide si chgt “not semantically significant” ☞ GET subrange interdit ✓ fort : invalide pour tout chgt • browser reload/shift-reload • heuristique “adaptive TTL” ✓ ex. Cisco Content Engine TTL = (CurrentDate – LastModTime) × FreshnessFactor (doc décourage FF > 10 %) ✓ expiration si age > TTL ☞ origine fournit Date ☞ proxy fournit Age Caches 15 Validation : je clique reload Caches 16 Première requête tout à l’heure... ⇒ GET / HTTP/1.1 ⇒ GET / HTTP/1.1 Host: z80.info Host: z80.info User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.12) Gecko/2009072220 User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.12) Gecko/ Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Keep-Alive: 300 Connection: keep-alive Connection: keep-alive If-Modified-Since: Sun, 07 Feb 2010 11:25:56 GMT If-None-Match: "35d02c7-490e-4b6ea344" ⇐ HTTP/1.1 200 OK Cache-Control: max-age=0 Date: Fri, 09 Apr 2010 07:50:23 GMT Server: Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3 FrontP ⇐ HTTP/1.1 304 Not Modified Last-Modified: Sun, 07 Feb 2010 11:25:56 GMT Date: Fri, 09 Apr 2010 07:51:01 GMT ETag: "35d02c7-490e-4b6ea344" Server: Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3 FrontPage/5.0.2.26 Content-Length: 18702 Connection: close [...] ETag: "35d02c7-490e-4b6ea344" Caches 17 Cachabilité HTTP/1.0 Pragma: no-cache HTTP/1.1 Cache-Control: Exemple : je clique shift-reload Expires âge min−fresh max−stale réponses requêtes no-cache no-store max-age max-stale min-fresh no-transform only-if-cached cache-extension 18 ⇒ GET / HTTP/1.1 Host: z80.info User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.12) Gecko/2009072220 Icew Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Pragma: no-cache Cache-Control: no-cache max−age 0 Caches public private no-cache no-store no-transform must-revalidate proxy-revalidate max-age s-maxage cache-extension HTTP/1.1 200 OK Date: Fri, 09 Apr 2010 07:51:36 GMT Server: Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3 FrontPage/5.0.2.2635 Last-Modified: Sun, 07 Feb 2010 11:25:56 GMT ETag: "35d02c7-490e-4b6ea344" Accept-Ranges: bytes Content-Length: 18702 [...] Caches 19 Caches Cohérence : résumé support pour : • explicite (Expires) • forte non scalable (revalidation systématique) • faible OK (adaptive TTL) • hétérogénéité si explicite • hétérogénéité client manque : invalidation/mise à jour • délicat à intégrer dans HTTP • état serveur • fiabilité/scalabilité • pb administratifs Protocoles inter-caches Caches 21 20 Internet Cache Protocol - ICP - 1 frères parent ICP - 2 as-tu ce document en cache ? ’95 cache Squid conçu pour HTTP/0.9 défini dans rfc2186/7 relations ✓ parents ✓ frères (siblings) • msg UDP : 20 octets en-tête + URL • • • • • HTTP 1. envoie • ICP QUERY aux pairs • ICP SECHO (= ping) à l’origine O ICP SECHO 2. reçoit ICP HIT ou ICP MISS 3. • 1er HIT gagne ✓ ⇒ GET xxx • attend max 2 secondes • pas de hit : parent le plus proche QUERY QUERY remarque : n’attend plus les pairs qui ne répondent pas GET C Caches 22 ICP - 3 Caches 23 ICP - 4 network probe • chaque proxy construit une table (origine, RTT) • inclut son RTT vers l’origine dans ICP REPLY • sélection du proxy le plus proche (peut être soit-même) ! ✓ plus complexe ✓ attendre toutes les réponses problèmes de ICP • scalabilité • sécurité • gestion des représentations • ICP HIT OBJ ✓ inclut objet dans la réponse ✓ + rapide ✓ – ☞ + lent qu’un HIT ☞ fragmentation ☞ ne distingue pas les représentations (rfc2616) resource : network data object or service that can be identified by a URI. Resources may be available in multiple representations. ☞ cache poisoning ✓ ➠ déconseillé Caches 24 Hyper Text Caching Protocol - HTCP 25 Caches 27 Caches 28 Cache Digests rfc2756 HTCP/0.0 - expérimental • • • • Caches Les protocoles précédents ajoutent des délais msgs sur UDP (TCP optionnel) en-têtes complètes envoi d’infos générales authentification (signatures) • Cache digest : résumé du contenu d’un cache ✓ basé les filtres de Bloom ✓ compression avec pertes et recherche (hash) ✓ impossible effacer une clé unique • les caches pairs s’échangent leur CD • màj périodique • 1 Mo pour 16 Go Système similaire : summary cache Caches 26 Efficacité : que mesurer ? Efficacité • faciles à mesurer ✓ débit économisé ✓ hit-rate (max 40–55 %) ✓ byte hit-rate (max 20–35 %) ✓ temps de remplissage • plus difficiles ✓ gain en temps de réponse • difficultés ✓ qu’est-ce qu’un hit ? • taux d’utilisation par les usagers • web dynamique peu cachable Efficacité : impact de TCP Efficacité : fournisseurs • l’impact de TCP : ex. modem 28 kb/s ✓ débit : coût des ABORT annule les gains ✓ réduction de délai = 3 % ✓ sauf si connexions persistentes ✓ proxy = cache de connexions pratique du cache busting pour compter le nb de hits ⇐ HTTP/1.1 200 OK Date: Fri, 09 Apr 2010 09:31:34 GMT Server: Apache Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-che Pragma: no-cache [...] ⇐ HTTP/1.0 200 OK Date: Thu, 08 Apr 2010 13:11:50 GMT Server: Apache Expires: Thu, 19 Nov 1981 08:52:00 GMT Vary: Cookie,Accept-Encoding,User-Agent Last-Modified: Thu, 08 Apr 2010 11:16:22 GMT Caches 29 Efficacité : fournisseurs Caches 32 • explicite ✓ manuelle ✓ à partir d’un fichier “AutoConfig” ✓ forcée ✓ automatique ☞ WPAD • aucune ✓ interception (cache “transparent”) Caches 31 Interception niveau transport Interception niveau application peut se baser sur données application (URL...) • nécessaire ouvrir connexion (prétend être l’origine) • puis ouvre 2ième connexion avec le proxy (ou l’origine) • et relaie... O légende (IP.src, IP.dst, TCP.sport, TCP.dport) (S,P,pc,80) P 30 Efficacité : conf. clients • rfc2277 “Simple Hit-Metering and Usage Limiting for HTTP” • extension HTTP, compte les hits en “best-effort” • en-tête Meter (hop-by-hop) • formation d’un arbre de mesure ✓ chaque nœud compte les hit ✓ reporte à son parent au prochain GET ✓ nœuds feuilles font du cache busting • autres approches : méthodes statistiques • “switch L4” examine trafic if IP.proto=TCP & TCP.flags=SYN & TCP.dport = 80 then setup rewrite (IP.src, IP.dest, TCP.sport, 80) ↔ (myIP, proxyIP, TCP.sport, 80) Caches S4 O ou cxion 2 P cxion 2 S7 (P,S,80,pc) souvent cas d’une machine “in-path” • routeur d’accès • pare-feu • NAT • proxy “transparent” (O,C,80,pc) (C,O,pc,80) • doit retirer l’entrée quand connexion terminée • peut filtrer sur IP.src ou IP.dst C Caches 33 Pb. avec interception cxion 1 C Caches 34 Caches 36 WPAD • pas très catholique • si pb proxy, accès coupé • “transparence” ✓ authentification/personalisation ✓ recherche DNS inutile ✓ ouvre/ferme connexions TCP Web Proxy Auto-discovery Protocol • trouver l’URL du fichier PAC (proxy auto config) http://<host>:<port><path> • chaos de mécanismes d’auto-conf • port défaut 80, path défaut wpad.dat • essayer dans l’ordre : 1. DHCP 2. SLP (Service Location Protocol rfc2608) 3. DNS wpad.example.com a) SRV b) TXT c) A • 1 et 3c obligatoires • le fichier précis en fct de User-Agent Caches 35 Exemple WPAD Active Cache proposition académique ⇒ ⇐ DNS Standard query A wpad.esisar.inpg.fr DNS Standard query response CNAME www.esisar.inpg.fr A 195.220.37.55 ⇒ HTTP GET /wpad.dat HTTP/1.1 Host: wpad.esisar.inpg.fr HTTP HTTP/1.1 302 Redirect (text/html) Location: http://www.esisar.inpg.fr/auto-proxy.pac ⇐ ⇒ ⇐ DNS Standard query A www.esisar.inpg.fr DNS Standard query response A 195.220.37.55 ⇒ HTTP GET /auto-proxy.pac HTTP/1.1 Host: www.esisar.inpg.fr HTTP HTTP/1.1 200 OK (application/x-ns-proxy-autoconfig) ⇐ Caches • en tête HTTP CacheApplet • proxy exécute l’applet ou fait suivre la requête • applications ✓ journal d’accès ✓ rotation bandeau pub. ✓ autorisation (vérification certificat) ✓ expansion SSI, compression delta etc • sécurité ... ✓ Java ✓ env. sécurisé O 3 CacheApplet: URL 2 5b GET URL 6 exécute applet P 7 1 4 5 C 37 Prefetching C Caches 38 Caches 40 Exemple de cache : Squid Comment augmenter le hit rate ? • en anticipant les requêtes ✓ doc. populaires sur le serveur ✓ prédiction sur l’utilisateur ✓ trois situations ☞ client – serveur ☞ proxy – serveur ☞ client – proxy (accès bas débit) • • • • • • • • Caches 39 Caches 41 En conclusion • difficultés ✓ adaptativité ✓ contenus dynamiques ✓ cohérence forte développé par le NLANR proxy cache pour HTTP, FTP et d’autres proxy pour SSL support des hiérarchies support de ICP, HTCP, Cache Digests proxy cache transparent reverse proxy cache les résultats DNS