Squid Caching

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Caching

  • Squid kann auch Seiten zwischenspeichern.
  • Durch das Aufkommen von dynamischen Webseiten wird dieser Aspekt aber immer unwichtiger

Squid2.jpg

Sinnvolles Caching

  • Ein viel größeres Problem ist es, daß die Lebensdauer von Web-Seiten sehr unterschiedlich ist.
  • Dadurch kann nie mit Sicherheit bestimmt werden, wann sich eine Seite ändert und dadurch veraltet ist und aus dem Cache gelöscht, bzw. beim Server neu angefordert werden soll.
  • Es kann also immer vorkommen, daß der Cache ein veraltetes Dokument an den Client liefert.
  • Durch verschiedene Strategien wird versucht, dieses Manko so weit wie möglich auszugleichen.
  • HTTP bietet dazu zwei Möglichkeiten: Last-Modified und Expires.
  • Mit der Antwort des Servers werden diese Information an den Proxy mitgeteilt.
  • Mit Last-Modified wird angezeigt, wann das Dokument das letzte mal geändert wurde.
  • Mit der Angabe Expires erhält der Client (in diesem Falle der Proxy) Informationen, wann er das Dokument als veraltet ansehen soll und vom Server neu anfordern muß.
  • In einem HTML-Dokument werden diese Angaben im Header generiert.
  • Dazu wird das META-Element benutzt.
  • Die Informationen sehen dann wie im folgenden Beispiel aus:

<META HTTP-EQUIV=“Last-Modified“ CONTENT=“Thu Jan 1 12:00:00 GMT DST 1998“>

<META HTTP-EQUIV=“Expires“ CONTENT=“Thu Dec 31 12:00:00 GMT DST 1998“>

  • Allein die Expires-Angabe würde reichen, um den Cache in dieser Hinsicht zu optimieren.
  • Jedoch sind diese Angaben optional und werden sehr selten eingesetzt.
  • Außerdem ist es oft schwierig die Lebensdauer einer Web-Seite vorauszusagen.
  • Daher sind die meisten Web-Seiten einfach so lange gültig, bis der Autor eine neue Version erstellt.
  • Anders sieht es bei Last-Modified aus.
  • Diese Angabe findet sich zwar selten explizit in HTML-Dokumenten, jedoch trägt jedes Dokument als Datei einen Zeitstempel,
  • Dieser wird vomServer dann als Last-Modified-Header mitgeliefert.
  • Die Proxy-Server wenden damit ein einfaches Verfahren ein, um die Lebensdauer eines Dokumentes zu „erraten“.
  • Dabei wird zugrunde gelegt, daß die Wahrscheinlichkeit recht gering ist, daß ein recht altes Dokument in den nächsten Stunden geändert wird.
  • Bei einem Dokument, welches dagegen erst vor kurzem geändert wurde, ist die Möglichkeit einer baldigen Aktualisierung eher vorhanden.
  • Sofern ein Objekt keinen Expires-Header aufweist, erzeugt der Proxy-Server mit Hilfe des Last-Modified-Headers ein künstliches Verfallsdatum.
  • Dazu bestimmt er das Alter der Datei und schlägt einen Prozentsatz dazu, der bei der Konfiguration des Proxy-Servers eingetragen wird *(Direktive refresh_pattern)
  • Es holt frühestens nach Ablauf dieser Zeit von sich aus das Dokument erneut vom Server.
  • Ist beispielsweise ein Dokument zum Zeitpunkt der ersten Anfrage des Proxies bereits 150 Tage alt
  • Und der Prozentsatz aus der Konfiguration ist 20%,
  • So vergehen weitere 30 Tage, bis der Proxy-Server eine erneute Anfrage an den Originalserver stellt.

Hierarchisches Caching

  • Bei einigen Proxy-Servern ist es möglich, die Größe des Caches anzugeben, welcher im Hauptspeicher des Rechners liegt.
  • Übertragene Objekte werden dort eine gewisse Zeit gehalten, um schnellere Antwortzeiten zu erreichen,
  • Falls ein Objekt innerhalb kurzer Zeit von zwei verschiedenen Clients angefordert wird.
  • Dabei kann meist über den Parameter TTL (Time-to-Live) die Zeitdauer angegeben werden, die ein Objekt maximal in diesem Cache gehalten wird.
  • Eine weitere Möglichkeit, die Performance zu erhöhen und geringere Antwortzeiten zu erhalten, ist das hierarchische Caching.
  • Banal gesagt setzt man einen Proxy für den Proxy ein.
  • Dadurch kann die Trefferquote auf Objekte nochmals verbessert werden.
  • Dies macht besonders deshalb Sinn, da die Datenmengen immer größer werden und es immer wieder zu Engpässen kommt.
  • Das hierarchische Caching führt dabei zu einer Entlastung.
  • Damit die Proxy-Caches miteinander kommunizieren können, wurde ein spezielles Protokoll entwickelt, das ICP (Internet Caching Protocol).
  • Dabei schicken Proxy-Caches für das gewünschte Objekt Anfragen an benachbarte und in der Hierarchie höher stehende Proxy-Caches.
  • Ist das Objekt in einem dieser Caches vorhanden, wird es übertragen, andernfalls wird es vom Originalserver geholt.
  • Da das ICP auf UDP basiert, ist es sehr schnell und bedeutet somit einen vertretbaren Performanceverlust, der durch eine erhöhte Trefferquote mehr als ausgeglichen wird.
Squid3.jpg


Begriffe

Neighbours Dies sind alle Proxies, die ein Proxy kennt und mit denen er kommuniziert.
Siblings Die Geschwisterproxies. Sie liegen mit dem Proxy-Server auf einer Ebene. Siblings liefern in der Regel nur Objekte, die sie selbst im Cache haben,
Parents Übergeordnete Proxies. Sie liefern Objekte die sie selbst im Cache haben und leiten Anfragen an den Originalserver weiter.

Funktionsbeschreibung

  • Squid, der Internet Object Cache, ist jedoch mehr als ein einfacher Cache-Proxy.
  • Durch die Unterstützung von Neighbor-Caches, die entweder als parent oder sibling verwendet werden, kann man einen Cache-Verbund aufbauen, der einen hohen Prozentsatz von Anfragen beantworten kann, ohne langwierige Internet-Zugriffe zu erfordern.
  • Dieses Verfahren verwenden zum Beispiel einige der großen Internet-Provider (wie ECRC in München), um den Datentransfer wenn möglich auf der eigenen Netzwerkstruktur abzuwickeln und damit Kosten für externe Zugriffe zu umgehen.

Die Arbeitsweise von Squid ist einfach

  • Eine Anfrage eines Clients wird zuerst auf die Zugriffsberechtigung untersucht, so kann man z.B. gewissen Rechnern einen Zugriff auf den Proxy ganz verbieten (siehe Konfiguration).
  • Es wird versucht, die gewünschten Daten im lokalen Cache zu finden. Sollte dies fehlschlagen, werden andere Proxies im Cache-Verbund (sofern vorhanden), abgefragt.
  • Sind die Daten vorhanden, wird ihre Aktualität geprüft. Sind die Daten veraltet, werden neue in den Cache geholt und an den Client weitergegeben.
  • Bei aktuellen Daten wird das Neuladen übersprungen.
  • Sind die Daten nicht vorhanden, werden sie in den Cache geladen und an den Client weiter-gereicht.
  • Wie lange Daten im Cache verbleiben, ist abhängig von der Konfiguration (siehe dort)
  • Eine Beschreibung der internen Abläufe wurde im Sinne der Übersichtlichkeit weggelassen.