13.10    Cache-Konfiguration

Neben den Objekten und Regeln stellt die korrekte Cache-Konfiguration den ambitionierten Web-Proxy-Administrator vor eine große Herausforderung. Ein falsch dimensionierter Cache kann die Performance Ihres Web-Proxys sehr stark beeinflussen. In diesem Abschnitt wollen wir Ihnen ein paar Grundregeln mit an die Hand geben.

13.10.1    Cache-Arten: »Hauptspeicher« und »Festplatten«

Der Squid unterscheidet zwei Arten von Caches: zum einen den Festplatten-Cache, der durchaus einen Umfang von mehreren Gigabyte haben kann, und zum anderen den flüchtigen Cache im Hauptspeicher. Generell arbeitet der Squid so, dass neue oder stark frequentierte Objekte im Hauptspeicher-Cache vorgehalten werden, sodass eine schnelle Auslieferung garantiert ist – diese Cache-Objekte werden auch als In-Transit bezeichnet. Alle Objekte, die sich gerade nicht In-Transit befinden, können daher in den Festplatten-Cache ausgelagert werden. Die Bezeichnung In-Transit ist streng genommen inkorrekt, da im Hauptspeicher-Cache sowohl In-Transit-Objekte (Objekte, die sich gerade in der Zustellung befinden) als auch Hot Objects (Objekte, die oft abgefragt werden) und Negativ-Cached Objects (negative Cache-Objekte, zum Beispiel Fehlermeldungen) vorliegen. Letztere werden aber von In-Transit-Objekten verdrängt, falls dies notwendig wird.

Bei Zugriffen auf Webseiten wird jeweils geprüft, ob sich das abgefragte Objekt in einem der Caches befindet und gegebenenfalls ob dieses noch gültig ist. Anschließend wird das Objekt entweder direkt aus dem Cache ausgeliefert oder neu abgefragt und erneut im Cache abgelegt.

13.10.2    Hauptspeicher-Cache

Die Größe des Hauptspeicher-Caches wird über den Parameter cache_mem definiert. Es hat sich als gute Regel etabliert, den cache_mem mit der Hälfte des Ihnen zur Verfügung stehenden Hauptspeichers zu belegen. Falls Sie feststellen, dass die übrigen Prozesse auf dem System weniger speicherhungrig sind, können Sie den Wert erhöhen.

[ ! ]  »cache_mem« =! Maximum

Die Programmierer des Squid stellen deutlich klar, dass der dort angegebene Wert nicht den maximal vom Squid genutzten Hauptspeicher darstellt! Zum einen, da der Wert nur den Cache im Hauptspeicher angibt und der Prozess durchaus auch andere Daten im Hauptspeicher vorhalten muss, und zum anderen, da der angegebene Wert auch kurzzeitig überschritten werden kann. Planen Sie also einen entsprechenden Puffer ein, denn nichts verlangsamt Ihr System mehr als die Auslagerung des Hauptspeichers auf die Festplatte (Swapping).

Für einen Server mit 8 GB Hauptspeicher sollte der Parameter dann wie folgt gesetzt sein:

cache_mem 4096 MB

Listing 13.60    Größe des Hauptspeicher-Caches definieren

Dies ist aber nicht der Weisheit letzter Schluss, sondern nur nur ein möglicher Startwert. Wenn Sie einen (oder mehrere) Festplatten-Caches einsetzen wollen, richtet sich die maximale Größe des Hauptspeicher-Caches nach den eingerichteten Festplatten"=Caches.

[✓]  Im Unterabschnitt »Größenberechnung« des Abschnitts 13.10.3, »Festplatten-Cache«, gehen wir näher auf die korrekte Berechnung ein.

13.10.3    Festplatten-Cache

Der Festplatten-Cache stellt den Löwenanteil des Caches dar. In ihm werden alle Objekte abgelegt, die über einen entsprechend langen Gültigkeitszeitraum verfügen. Trotz der stetig steigenden Bandbreiten ist es sinnvoll, einen großen Web-Proxy-Cache vorzuhalten, da nichts schneller ist als die lokale Auslieferung.

Der Festplatten-Cache wird über den Parameter cache_dir eingerichtet. Im Squid ist es möglich, mehr als einen Festplatten-Cache anzulegen: So können Sie zum Beispiel auf einem System mit mehreren Festplatten pro Festplatte einen eigenen Cache anlegen. Die Syntax des Parameters cache_dir sieht für die Methode aufs wie folgt aus:

cache_dir <METHOD> <DIRECTORY> <SIZE> <L1> <L2>

Listing 13.61    Syntax: »cache_dir« für die Methode »aufs«

Dabei haben die einzelnen Platzhalter folgende Bedeutungen:

[+]  Es empfiehlt sich, für einen Festplatten-Cache stets eine eigene Festplatte zu verwenden! Dies hat den großen Vorteil, dass sich die Zugriffszeiten auf die Inhalte nicht durch das System oder andere Dienste verringern. Am besten ist selbstverständlich ein Cache auf einem Solid-State-Drive (SSD), das über ein Hardware-RAID auf mehrere Festplatten verteilt ist.

[ ! ]  Besonderheiten der Formatierung: »Inodes«

Bedenken Sie, dass in Ihren Festplatten-Cache viele kleine Dateien geschrieben werden. Daher ist es notwendig, dass das Filesystem eine entsprechend große Anzahl von Inodes zur Verfügung stellt. Für einen Festplatten-Cache auf dem Device sdb1 mit einem Ext4-Filesystem müsste die Formatierung dann mit mkfs.ext4 -N 53772288 /dev/sdb1 erfolgen. Durch den Parameter -N wird die Anzahl der Inodes angegeben.

Größenberechnung

Damit Ihr Cache Ihnen nicht die Festplatte zu 100 % auslastet oder aufgrund des zu geringen Hauptspeichers mehr Verwaltungsaufwand als Nutzen bringt, muss er korrekt eingerichtet werden. Zusätzlich besteht die Gefahr, dass Ihr Web-Proxy nicht über genügend Hauptspeicher verfügt. Die korrekten Berechnungen des eingesetzen Hauptspeicher- und FestplattenCaches bedingen sich gegenseitig. Beginnen wir mit der Berechnung des FestplattenCaches.

Ein Festplatten-Cache mit der Methode aufs erwartet die Optionen Größe und Anzahl der Verzeichnisse der ersten Ebene und die Anzahl der Verzeichnisse der zweiten Ebene. Um diese Werte korrekt zu bestimmen, gibt es eine Faustformel:

<Cache-Grö"se in KB> / ( <L1> x <L2> x <Durchschnittliche Objektgrö"se in KB> ) ~= 200

Listing 13.62    Faustformel: Festplatten-Cache

In Pseudocode bedeutet dies: »Die Größe des Caches in Kilobyte geteilt durch die Multiplikation der Anzahl der Verzeichnisse der ersten Ebene, der Anzahl der Verzeichnisse der zweiten Ebene und der durchschnittlichen Objektgröße in Kilobyte sollte in etwa 200 ergeben.«

Zugegeben: Dies klingt komplex, ist aber in der Anwendung einfacher als gedacht. Der Hintergedanke dieser Formel besteht darin, dass pro Verzeichnis der zweiten Ebene nicht mehr als 200 Objekte gespeichert werden sollen, da dies sonst ineffektiv werden würde. Ohne vorherige Kenntnis der durchschnittlichen Objektgröße können wir den Wert 16 KB verwenden.

Anhand dieser Formel aus Listing 13.62 kann die maximale Größe des Festplatten-Caches ermittelt werden. Dabei ist aber darauf zu achten, dass Sie nicht einfach die maximale Größe Ihrer Festplatte verwenden können: Auch wenn Sie eine 1 TB große Festplatte extra für den Cache abgestellt haben, ist es nicht automatisch sinnvoll, auch einen 1 TB großen Cache anzulegen. Wie bereits angedeutet wurde, bedingen sich die Größe des Festplatten-Caches und die des Hauptspeicher-Caches. Da ein Festplatten-Cache auch verwaltet werden möchte, gilt der Grundsatz »10 MB Hauptspeicher pro 1 GB an Festplatten-Cache«. Zusätzlich benötigt der Squid noch eine Hauptspeicherreserve, damit der Prozess selbst auch noch Luft zum Atmen hat.

Bei einem Server mit 8 GB Hauptspeicher, von denen 4 GB dem Hauptspeicher-Cache (cache_mem) zugewiesen wurden, stehen noch ca. 4 GB zur Verfügung. Die Hälfte davon sollte für das Betriebssystem und andere Dienste freigelassen werden. Daher stehen für den Festplatten-Cache noch ca. 2 GB zur Verfügung. Da pro Gigabyte an Festplatten-Cache ca. 10 MB an Hauptspeicher benötigt werden, ergibt sich daraus eine maximale Größe des Festplatten-Caches von 204,8 GB (2048 MB/10 MB). Um einen entsprechenden Puffer zu haben, sollten Sie den Festplatten-Cache also nicht größer als 200 GB gestalten.

In der squid.conf könnte diese Konfiguration dann wie folgt aussehen, wobei sich die Werte für L1 und L2 aus der Formel 204800 × 1024 / (64 × 1024 × 16) ergeben:

cache_mem 4096 MB
cache_dir aufs /var/spool/squid 204800 64 16

Listing 13.63    Cache-Konfiguration mit 8 GB Hauptspeicher

Anlegen

Damit der Squid den Festplatten-Cache verwendet, muss dieser zunächst angelegt werden. Dafür müssen Sie den Dienst stoppen und mit dem Befehl squid -z die Verzeichnisse vom Squid erzeugen lassen.

[ ! ]  Achten Sie darauf, dass der Benutzer, unter dem der Squid läuft – standardmäßig proxy oder squid –, auch das Recht besitzt, auf das Verzeichnis zuzugreifen, in dem sich der Cache befinden soll.

Anschließend können Sie den Dienst neu starten. Der Cache wird dann sukzessive vom Squid gefüllt werden.

13.10.4    Tuning

Wie bereits erörtert wurde, ist nichts schneller als die lokale Zustellung. In der Standardeinstellung lässt der Squid keine Objekte im Hauptspeicher, die größer sind als 512 KB, und keine Objekte im Festplatten-Cache, die größer sind als 4096 KB. Selbstverständlich können Sie diese Werte an Ihre Bedürfnisse anpassen.

[+]  Beachten Sie aber, dass dies Auswirkungen auf die mögliche Nutzung des Caches hat! Wenn Sie lieber viele kleine Dateien schnell ausliefern und somit eine größere Trefferanzahl (auch Hit Ratio genannt) erlangen wollen, sollten Sie die Werte kleiner lassen. Möchten Sie hingegen Bandbreite sparen, können Sie diese Werte auch höher konfigurieren.

Die maximale Größe von Objekten im Hauptspeicher wird über den Parameter maximum_object_size_in_memory gesteuert. Die maximale Größe der Objekte im FestplattenCache wird über den Parameter maximum_object_size gesteuert.