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

Documents pareils