Unterabschnitte


4.3 Cache-Verhalten von Squid

Das Haupteinsatzgebiet von Squid ist der Cache-Proxy, weshalb er auch häufig nur als Webcache oder Cache bezeichnet wird. Das wichtigste Kriterium für einen guten Cache ist neben der Verfügbarkeit und Hit-Rate die Aktualität der enthaltenen Daten. Die folgenden Abschnitte befassen sich genau mit diesem Problem.


Aktualität des Cache

Die Aktualität wird für jedes Objekt vor dem Versenden berechnet. Das Ergebnis der Berechnung kann nur einen von zwei Zuständen haben:

Das Objekt ist noch aktuell: fresh

Das Objekt ist abgelaufen: stale

In die Berechnung fließen folgende Daten ein:

LM Im Header mitgeliefertes Datum der letzten Änderung (Last Modified)
EX Im Header mitgeliefertes Ablaufdatum eines Objekts (Expire)
NOW aktuelles Datum (jetzt)
OBJ_Date Datum der Speicherung im Cache
MIN Mindesthaltbarkeit im Cache
MAX Maximale Haltbarkeit im Cache
PERCENT Haltbarkeitsfaktor (siehe Berechnung)
Age Zeit, die ein Objekt bereits im Cache ist (Age = NOW - OBJ_Date)
LM_Age Objektalter zum Zeitpunkt des Abspeicherns (LM_Age = OBJ_Dat - LM)
LM_FACTOR Altersfaktor des Objekts (LM_FACTOR = Age / LM_Age)

Jedes Objekt im Cache wird bis zum Zeitpunkt X als aktuell (fresh) angesehen.

$ X=OBJ\_Date+(LM\_Age*PERCENT)$

Die folgende Grafik sollte den Algorithmus etwas verdeutlichen:

Abbildung: 'fresh' und 'stale' Zeiten für Cache-Objekte
\includegraphics[width=0.80\textwidth,keepaspectratio]{pic/squid-cache2}

Falls Ihnen die ganze Rechnerei zu komplex war, kurz zusammengefasst gilt:

''Je häufiger sich ein Objekt ändert, desto häufiger wird es auch vom Proxyserver auf seine Aktualität geprüft. Wobei es frühestens nach der Zeit MIN geprüft wird und spätestens nach Ablauf der Zeit MAX geprüft werden muss!''

Das folgende Diagramm zeigt den Ablauf einer Cache-Anfrage:

Abbildung: Prinzip einer Cache-Anfrage (Aktualitätsprüfung)
\includegraphics[width=0.70\textwidth,keepaspectratio]{pic/squid-cache1}

Die Prüfung erfolgt, indem der Proxyserver eine If-Modified-Since Anfrage an den Webserver stellt und dabei das Datum der letzten Änderung seines Cache-Objekts (OBJ_Date) mitsendet.

Der Webserver prüft, ob das Objekt, das er besitzt, aktueller ist und sendet entweder nur einen Statuscode 304 (not modified), wenn das Objekt unverändert ist oder mit Statuscode 200 (OK) das neue Objekt zurück. So wird das Objekt nur dann neu übertragen, wenn es wirklich geändert wurde.


(c)2003 dpunkt.Verlag - mail(a)squid-handbuch.de