forcechemtech.com

  

Beste Artikel:

  
Main / Htcacheclean wie man grundlegend

Htcacheclean wie man grundlegend

Verfügbare Sprachen: Hier wird beschrieben, wie Sie die Caching-Funktionen des Apache HTTP-Servers verwenden, um die Web- und Proxy-Bereitstellung zu beschleunigen und gleichzeitig häufige Probleme und Fehlkonfigurationen zu vermeiden. Der Apache HTTP-Server bietet eine Reihe von Caching-Funktionen, mit denen die Leistung des Servers auf verschiedene Weise verbessert werden kann.

Wenn der Inhalt zu alt ist, der älter als seine Frische-Lebensdauer ist, gilt er als veraltet. Ein HTTP-Cache sollte den Ursprungsserver kontaktieren und prüfen, ob der Inhalt noch aktuell ist, bevor veraltete Inhalte an einen Client gesendet werden. Der Ursprungsserver antwortet entweder mit Ersatzinhalten, wenn diese noch nicht gültig sind, oder im Idealfall antwortet der Ursprungsserver mit einem Code, um dem Cache mitzuteilen, dass der Inhalt noch aktuell ist, ohne dass der Inhalt erneut generiert oder gesendet werden muss.

Der Inhalt wird wieder frisch und der Zyklus geht weiter. Das HTTP-Protokoll ermöglicht es dem Cache, unter bestimmten Umständen veraltete Daten bereitzustellen, z. B. wenn ein Versuch, die Daten mit einem Ursprungsserver zu aktualisieren, mit einem 5xx-Fehler fehlgeschlagen ist oder wenn eine andere Anforderung bereits den angegebenen Eintrag aktualisiert. In diesen Fällen wird der Antwort ein Warnheader hinzugefügt. Diese Phase findet sehr früh während der Anforderungsverarbeitung statt, unmittelbar nachdem die Anforderung analysiert wurde.

Wenn der Inhalt im Cache gefunden wird, wird er sofort bereitgestellt und fast die gesamte Anforderungsverarbeitung wird umgangen. In diesem Szenario verhält sich der Cache so, als wäre er an der Vorderseite des Servers "angeschraubt" worden.

Dieser Modus bietet die beste Leistung, da der Großteil der Serververarbeitung umgangen wird. Dieser Modus umgeht jedoch auch die Authentifizierungs- und Autorisierungsphasen der Serververarbeitung. Daher sollte dieser Modus sorgfältig ausgewählt werden, wenn dies wichtig ist. Diese Phase erfolgt spät in der Anforderungsverarbeitung, nachdem alle Anforderungsphasen abgeschlossen sind. In diesem Szenario verhält sich der Cache so, als wäre er auf der Rückseite des Servers "angeschraubt" worden. Dieser Modus bietet die größte Flexibilität, da das Potenzial für das Caching an einem genau kontrollierten Punkt in der Filterkette besteht und zwischengespeicherte Inhalte gefiltert oder personalisiert werden können, bevor sie an den Client gesendet werden.

Wenn festgestellt wird, dass der Inhalt zwischengespeichert werden kann, wird der Inhalt für die zukünftige Bereitstellung im Cache gespeichert, andernfalls wird der Inhalt ignoriert. Wenn der Ursprungsserver mit einer normalen Antwort antwortet, wird die normale Antwort zwischengespeichert und ersetzt den bereits zwischengespeicherten Inhalt. Wenn der Ursprungsserver mit einer 304 Not Modified-Antwort antwortet, wird der Inhalt erneut als frisch markiert und der zwischengespeicherte Inhalt wird vom Filter bereitgestellt, anstatt ihn zu speichern.

Wenn ein virtueller Host einem von vielen verschiedenen Server-Aliasen bekannt ist, kann das Verhältnis von Cache-Treffern erheblich verbessert werden, indem sichergestellt wird, dass UseCanonicalName auf Ein gesetzt ist. Dies liegt daran, dass der Hostname des virtuellen Hosts, der den Inhalt bereitstellt, im Cache-Schlüssel verwendet wird. Wenn die Einstellung Auf Virtuelle Hosts mit mehreren Servernamen oder Aliasnamen festgelegt ist, werden keine unterschiedlich zwischengespeicherten Entitäten erzeugt. Stattdessen wird der Inhalt gemäß dem kanonischen Hostnamen zwischengespeichert.

Gut geformter Inhalt, der zwischengespeichert werden soll, sollte eine explizite Aktualitätslebensdauer mit den Max-Age- oder S-Maxage-Feldern des Cache-Control-Headers oder durch Einfügen eines Expires-Headers deklarieren. Gleichzeitig kann die vom Ursprungsserver definierte Aktualitätslebensdauer von einem Client überschrieben werden, wenn der Client innerhalb der Anforderung seinen eigenen Cache-Control-Header anzeigt. In diesem Fall gewinnt die niedrigste Frische-Lebensdauer zwischen Anforderung und Antwort.

Wenn diese Frische-Lebensdauer in der Anforderung oder Antwort fehlt, wird eine Standard-Frische-Lebensdauer angewendet. Die Standardlebensdauer für die Aktualisierung von zwischengespeicherten Entitäten beträgt eine Stunde. Dies kann jedoch mithilfe der CacheDefaultExpire-Direktive leicht überschrieben werden. Die maximale Lebensdauer der Frische kann auch mithilfe von CacheMaxExpire gesteuert werden.

Wenn der Inhalt aus dem Cache abläuft und veraltet ist, anstatt die ursprüngliche Anforderung weiterzuleiten, ändert httpd die Anforderung, um sie stattdessen bedingt zu machen. Durch Ausführen einer dieser Aktionen wird die Anforderung an Bedingungen geknüpft. Wenn eine bedingte Anforderung von einem Ursprungsserver empfangen wird, sollte der Ursprungsserver prüfen, ob sich der ETag- oder der zuletzt geänderte Parameter je nach Anforderung geändert hat.

Wenn nicht, sollte der Ursprung mit einer knappen Antwort "304 Not Modified" antworten. Dies signalisiert dem Cache, dass der veraltete Inhalt noch frisch ist und für nachfolgende Anforderungen verwendet werden sollte, bis die neue Aktualitätslebensdauer des Inhalts wieder erreicht ist. Wenn sich der Inhalt geändert hat, wird der Inhalt so bereitgestellt, als ob die Anforderung zunächst nicht bedingt wäre.

Bedingte Anfragen bieten zwei Vorteile. Wenn eine solche Anforderung an den Ursprungsserver gestellt wird und der Inhalt vom Ursprung mit dem Inhalt im Cache übereinstimmt, kann dies zunächst einfach und ohne den Aufwand für die Übertragung der gesamten Ressource ermittelt werden. Zweitens wird ein gut gestalteter Ursprungsserver so konzipiert, dass die Erstellung von bedingten Anforderungen erheblich billiger ist als eine vollständige Antwort. Bei statischen Dateien ist in der Regel nur ein Aufruf von stat oder ein ähnlicher Systemaufruf erforderlich, um festzustellen, ob sich die Größe oder Änderungszeit der Datei geändert hat.

Daher können auch lokale Inhalte noch schneller aus dem Cache bereitgestellt werden, wenn sie nicht geändert wurden. Ursprungsserver sollten alle Anstrengungen unternehmen, um bedingte Anforderungen wie möglich zu unterstützen. Wenn jedoch bedingte Anforderungen nicht unterstützt werden, antwortet der Ursprung so, als ob die Anforderung nicht bedingt wäre, und der Cache reagiert so, als hätte sich der Inhalt geändert, und speichert den neuen Inhalt in den Cache. In diesem Fall verhält sich der Cache wie ein einfacher Cache mit zwei Status, in dem der Inhalt entweder frisch oder gelöscht ist.

Inhalte, die zeitkritisch sind oder abhängig von den Details der Anforderung variieren, die nicht von der HTTP-Aushandlung abgedeckt werden, sollten nicht zwischengespeichert werden. Dieser Inhalt sollte sich mithilfe des Cache-Control-Headers als nicht zwischenspeicherbar deklarieren. Wenn sich der Inhalt häufig ändert, ausgedrückt durch eine Aktualitätslebensdauer von Minuten oder Sekunden, kann der Inhalt weiterhin zwischengespeichert werden. Es ist jedoch äußerst wünschenswert, dass der Ursprungsserver bedingte Anforderungen korrekt unterstützt, um sicherzustellen, dass nicht regelmäßig vollständige Antworten generiert werden müssen .

Inhalte, die je nach vom Client bereitgestellten Anforderungsheadern variieren, können durch intelligente Verwendung des Vary-Antwortheaders zwischengespeichert werden. Wenn der Ursprungsserver so konzipiert ist, dass er basierend auf dem Wert der Header in der Anforderung mit unterschiedlichem Inhalt antwortet, z. B. um mehrere Sprachen unter derselben URL bereitzustellen, ermöglicht der HTTP-Caching-Mechanismus das Zwischenspeichern mehrerer Varianten derselben Seite unter derselben URL .

Dies geschieht, indem der Ursprungsserver einen Vary-Header hinzufügt, um anzugeben, welche Header von einem Cache berücksichtigt werden müssen, wenn festgestellt wird, ob zwei Varianten voneinander verschieden sind. Da die zwischengespeicherten Dateien lokal gespeichert sind, wird das speicherinterne Caching des Betriebssystems normalerweise auch auf deren Zugriff angewendet.

Obwohl die Dateien auf der Festplatte gespeichert sind, wird das Betriebssystem bei häufigem Zugriff wahrscheinlich sicherstellen, dass sie tatsächlich aus dem Speicher bereitgestellt werden. Dieser Hash enthält den Hostnamen, das Protokoll, den Port, den Pfad und alle CGI-Argumente für die URL sowie die vom Vary-Header definierten Elemente, um sicherzustellen, dass mehrere URLs nicht miteinander kollidieren.

Dieser Hash wird als Präfix für die Benennung der für diese URL spezifischen Dateien im Cache verwendet. Zunächst wird er jedoch gemäß den Anweisungen CacheDirLevels und CacheDirLength in Verzeichnisse aufgeteilt. CacheDirLevels gibt an, wie viele Ebenen des Unterverzeichnisses vorhanden sein sollen, und CacheDirLength gibt an, wie viele Zeichen sich in jedem Verzeichnis befinden sollen.

Das übergeordnete Ziel dieser Technik besteht darin, die Anzahl der Unterverzeichnisse oder Dateien zu verringern, die sich möglicherweise in einem bestimmten Verzeichnis befinden, da die meisten Dateisysteme mit zunehmender Anzahl langsamer werden. Mit der Einstellung "1" für CacheDirLength können maximal 64 Unterverzeichnisse auf einer bestimmten Ebene vorhanden sein. Sofern Sie keinen guten Grund haben, dies nicht zu tun, wird empfohlen, für CacheDirLength die Einstellung "1" zu verwenden.

Das Festlegen von CacheDirLevels hängt davon ab, wie viele Dateien voraussichtlich im Cache gespeichert werden. Mit der im obigen Beispiel verwendeten Einstellung "2" können letztendlich insgesamt 4096 Unterverzeichnisse erstellt werden. Bei 1 Million zwischengespeicherten Dateien entspricht dies ungefähr 245 zwischengespeicherten URLs pro Verzeichnis. Jede URL verwendet mindestens zwei Dateien im Cache-Speicher. Typischerweise gibt es ein ".

Bei Inhalten, die über den Header "Vary" ausgehandelt werden, wird ein ". Dieses Verzeichnis hat mehrere". Stattdessen wird mit httpd das Tool htcacheclean bereitgestellt, mit dem Sie den Cache regelmäßig bereinigen können. Das Bestimmen, wie häufig htcacheclean ausgeführt werden soll und welche Zielgröße für den Cache verwendet werden soll, ist etwas komplex. Zur Auswahl der optimalen Werte sind möglicherweise Versuche und Irrtümer erforderlich.

Es kann als persistenter Daemon oder regelmäßig von cron ausgeführt werden. Es wird auch empfohlen, für htcacheclean eine geeignete "nette" Ebene zu wählen, damit das Tool während der Ausführung des Servers keine übermäßige Festplatten-Io verursacht. Abbildung 1: Zusätzliche zwischengespeicherte Server können angegeben werden, indem sie an das Ende des CacheSocache-Memcaches angehängt werden: Beispiel: Der Apache-HTTP-Server bietet einen Cache für gemeinsam genutzte Objekte auf niedriger Ebene zum Zwischenspeichern von Informationen wie SSL-Sitzungen oder Authentifizierungsdaten innerhalb der Socache-Schnittstelle.

Auf Plattformen, auf denen ein Dateisystem möglicherweise langsam ist oder auf denen Dateihandles teuer sind, besteht die Möglichkeit, Dateien beim Start vorab in den Speicher zu laden. Auf Systemen, auf denen das Öffnen von Dateien langsam ist, besteht die Möglichkeit, die Datei beim Start zu öffnen und das Dateihandle zwischenzuspeichern. Diese Optionen können auf Systemen hilfreich sein, auf denen der Zugriff auf statische Dateien langsam ist. Das Öffnen einer Datei kann selbst zu Verzögerungen führen, insbesondere bei Netzwerkdateisystemen. Durch das Verwalten eines Caches mit offenen Dateideskriptoren für häufig bereitgestellte Dateien kann httpd diese Verzögerung vermeiden.

Derzeit bietet httpd eine Implementierung von File-Handle Caching. Anstatt den Dateiinhalt zwischenzuspeichern, verwaltet dieser Cache eine Tabelle mit offenen Dateideskriptoren. Dateien, die auf diese Weise zwischengespeichert werden sollen, werden in der Konfigurationsdatei mithilfe der CacheFile-Direktive angegeben. Die CacheFile-Direktive weist httpd an, die Datei beim Start zu öffnen und dieses Dateihandle für den nachfolgenden Zugriff auf diese Datei erneut zu verwenden. Wenn Sie eine große Anzahl von Dateien auf diese Weise zwischenspeichern möchten, müssen Sie sicherstellen, dass das Limit Ihres Betriebssystems für die Anzahl geöffneter Dateien entsprechend festgelegt ist.

Obwohl die Verwendung von CacheFile nicht dazu führt, dass der Dateiinhalt per se zwischengespeichert wird, bedeutet dies, dass diese Änderungen nicht übernommen werden, wenn sich die Datei ändert, während httpd ausgeführt wird. Die Datei wird konsistent so bereitgestellt, wie sie war, als httpd gestartet wurde. Wenn die Datei entfernt wird, während httpd ausgeführt wird, wird weiterhin ein geöffneter Dateideskriptor beibehalten und die Datei so bereitgestellt, wie sie beim Starten von httpd war.

Dies bedeutet normalerweise auch, dass, obwohl die Datei gelöscht wurde und nicht im Dateisystem angezeigt wird, zusätzlicher freier Speicherplatz erst wiederhergestellt wird, wenn httpd gestoppt und der Dateideskriptor geschlossen wird. Das direkte Bereitstellen aus dem Systemspeicher ist allgemein die schnellste Methode zum Bereitstellen von Inhalten. Das Lesen von Dateien von einem Festplattencontroller oder, noch schlimmer, von einem Remote-Netzwerk ist um Größenordnungen langsamer. Festplattencontroller beinhalten normalerweise physische Prozesse, und der Netzwerkzugriff wird durch Ihre verfügbare Bandbreite begrenzt.

Der Speicherzugriff kann dagegen nur Nanosekunden dauern. Systemspeicher ist jedoch nicht billig, Byte für Byte ist bei weitem die teuerste Art von Speicher, und es ist wichtig sicherzustellen, dass er effizient genutzt wird. Durch das Zwischenspeichern von Dateien im Speicher verringern Sie den auf dem System verfügbaren Speicher. Wie wir sehen werden, ist dies beim Zwischenspeichern von Betriebssystemen kein so großes Problem, aber wenn Sie das In-Memory-Caching von httpd verwenden, müssen Sie sicherstellen, dass Sie einem Cache nicht zu viel Speicher zuweisen.

Andernfalls muss das System den Speicher austauschen, was wahrscheinlich die Leistung beeinträchtigt. Fast alle modernen Betriebssysteme speichern Dateidaten im Speicher, der direkt vom Kernel verwaltet wird. Dies ist eine leistungsstarke Funktion, die zum größten Teil von Betriebssystemen richtig ausgeführt wird. Schauen wir uns beispielsweise unter Linux den Unterschied in der Zeit an, die zum ersten und zweiten Lesen einer Datei benötigt wird. Selbst für diese kleine Datei gibt es einen großen Unterschied in der Zeit, die zum Lesen der Datei benötigt wird.

Dies liegt daran, dass der Kernel den Dateiinhalt im Speicher zwischengespeichert hat. Indem Sie sicherstellen, dass auf Ihrem System "freier" Speicher vorhanden ist, können Sie sicherstellen, dass immer mehr Dateiinhalte in diesem Cache gespeichert werden.

(с) 2019 forcechemtech.com