18 Tipps zur Konfiguration des Nginx-Proxy-Cache, die Betreiber kennen müssen (welche kennen Sie?)

18 Tipps zur Konfiguration des Nginx-Proxy-Cache, die Betreiber kennen müssen (welche kennen Sie?)

Wir alle wissen, dass die Leistung von Anwendungen und Websites ein entscheidender Faktor für ihren Erfolg ist. Es ist jedoch nicht immer klar, wie Sie die Leistung Ihrer App oder Website verbessern können. Codequalität und Infrastruktur sind natürlich von entscheidender Bedeutung, aber in vielen Fällen können Sie das Endbenutzererlebnis Ihrer Anwendung erheblich verbessern, indem Sie sich auf einige sehr grundlegende Techniken zur Anwendungsbereitstellung konzentrieren.

Ein Beispiel ist die Implementierung und Optimierung des Caching in einem Anwendungsstapel. Die in diesem Tutorial vorgestellten Techniken können sowohl Anfängern als auch fortgeschrittenen Benutzern helfen, die in Nginx enthaltenen Funktionen zum Zwischenspeichern von Inhalten zu nutzen, um eine bessere Leistung zu erzielen.

Überblick

Ein Inhaltscache befindet sich zwischen dem Client und dem Ursprungsserver (Upstream) und speichert eine Kopie aller Inhalte, die er sieht. Wenn ein Client Inhalte anfordert, die bereits im Cache gespeichert sind, gibt er die Inhalte direkt zurück, ohne Kontakt mit dem Ursprungsserver aufzunehmen. Dies verbessert die Leistung, da der Inhalt näher am Client zwischengespeichert wird, und ermöglicht eine effizientere Nutzung der Anwendungsserver, da diese die Seite nicht jedes Mal von Grund auf neu generieren müssen.

Zwischen dem Webbrowser und dem Anwendungsserver können mehrere Caches vorhanden sein: der Browser-Cache des Clients, Zwischen-Caches, Content Delivery Networks (CDNs) und Load Balancer oder Reverse-Proxys, die dem Anwendungsserver vorgeschaltet sind. Sogar auf der Ebene des Reverse-Proxys/Load Balancers kann die Leistung durch Caching erheblich verbessert werden.

Hier ist ein Beispiel. Meine Site verwendet Next.js Server-Port-Rendering. Da die Serverleistung relativ schlecht ist, kann man natürlich nicht erwarten, dass sie für einen 5-Dollar-Server so gut ist. Es ist schon sehr bemerkenswert, dass es verwendet werden kann. Es ist gut genug, um auf dieses LAN zugreifen zu können. Erwarten Sie nicht zu viel.

Das Öffnen der Seite dauert jedes Mal etwa 7 Sekunden, einschließlich Netzwerklatenz. Wenn ich jedoch direkt beim Server (127.0.0.1) eine Anfrage stelle, dauert es fast 5 Sekunden. Wenn man dann die Zeit zum Abrufen der Daten aus der Datenbank ausschließt, dauert das Rendern auf der Serverseite 4,5 Sekunden, was zu langsam ist. Im Moment ist Caching die schnellste Lösung, die mir einfällt, aber das Hinzufügen von Caching dort ist, gemessen an der Zeit jedes Schritts, der schnellste Weg, das Problem zu lösen.

Nginx wird häufig als Reverse-Proxy oder Load Balancer in einem Anwendungsstapel eingesetzt und verfügt über einen vollständigen Satz an Caching-Funktionen. Im Folgenden besprechen wir, wie man das grundlegende Caching mit Nginx konfiguriert.

Einrichten und Konfigurieren des grundlegenden Cachings

Zum Aktivieren des grundlegenden Caching sind nur zwei Anweisungen erforderlich: proxy_cache_path und proxy_cache.

Die Direktive „proxy_cache_path“ legt den Pfad und die Konfiguration des Caches fest und die Direktive „proxy_cache“ wird verwendet, um ihn zu aktivieren.

proxy_cache_path /Pfad/zum/Cache levels=1:2 keys_zone=my_cache:10m max_size=10g 
         inaktiv=60 m use_temp_path=aus; 
 
 
Server { 
  # ... 
  Standort / { 
    Proxy-Cache mein_Cache; 
    Proxy-Passwort http://mein_Upstream; 
  } 
}

Die Parameter der Direktive „proxy_cache_path“ definieren die folgenden Einstellungen:

Das zwischengespeicherte lokale Festplattenverzeichnis heißt /Pfad/zum/Cache/.

  • Ebenen: Richten Sie unter /Pfad/zum/Cache/ eine zweistufige Verzeichnishierarchie ein. Eine große Anzahl von Dateien in einem einzigen Verzeichnis kann den Dateizugriff verlangsamen. Daher empfehlen wir für die meisten Bereitstellungen eine zweistufige Verzeichnishierarchie. Wenn „Levels“ diesen Parameter nicht enthält, platziert Nginx alle Dateien im selben Verzeichnis.
  • keys_zone legt die gemeinsam genutzte Speicherzone fest, die zum Speichern von Cache-Schlüsseln und Metadaten verwendet wird, z. B. zur Verwendung mit Timern. Wenn eine Kopie des Schlüssels im Speicher vorhanden ist, kann Nginx schnell feststellen, ob es sich bei der Anforderung um einen Treffer oder einen Fehlschlag handelt, ohne auf die Festplatte zugreifen zu müssen. Dadurch wird die Prüfung erheblich beschleunigt. In einem 1-MB-Bereich können Daten für etwa 8.000 Schlüssel gespeichert werden. Der im Beispiel konfigurierte 10-MB-Bereich kann also Daten für etwa 80.000 Schlüssel speichern.
  • max_size legt eine Obergrenze für die Cachegröße fest (in diesem Fall 10 Gigabyte). Dies ist optional. Wenn Sie keinen Wert angeben, kann der Cache so erweitert werden, dass der gesamte verfügbare Speicherplatz genutzt wird. Wenn die Cachegröße das Limit erreicht, entfernt ein Prozess namens Cache Manager die zuletzt verwendeten Cachedateien, um die Größe wieder unter das Limit zu bringen.
  • inaktiv Gibt an, wie lange ein Element im Cache verbleiben kann, ohne dass darauf zugegriffen wird. In diesem Beispiel entfernt der Cache Manager-Prozess automatisch Dateien aus dem Cache, die 60 Minuten lang nicht angefordert wurden, unabhängig davon, ob sie abgelaufen sind. Der Standardwert beträgt 10 Minuten (10 m). Inaktiver Inhalt unterscheidet sich von abgelaufenem Inhalt. Nginx löscht Cache-Header, die abgelaufene Inhalte definieren (wie z. B. Cache-Control: max-age=120), nicht automatisch. Abgelaufene (veraltete) Inhalte werden nur gelöscht, wenn über einen angegebenen Zeitraum nicht darauf zugegriffen wurde. Wenn auf veraltete Inhalte zugegriffen wird, aktualisiert Nginx diese vom Ursprungsserver und setzt den Inaktivitätstimer zurück.
  • Nginx schreibt Dateien, die für den Cache bestimmt sind, zunächst in einen temporären Speicherbereich. Die Anweisung use_temp_path=off weist NGINX an, sie in dasselbe Verzeichnis zu schreiben, das zwischengespeichert wird. Wir empfehlen, diesen Parameter auf „Aus“ zu setzen, um unnötiges Kopieren von Daten zwischen Dateisystemen zu vermeiden. use_temp_path wurde in Nginx 1.7.10 eingeführt.

Schließlich aktiviert die Direktive „proxy_cache“ das Caching für alle Inhalte, die mit der URL des übergeordneten Standortblocks (/ im Beispiel) übereinstimmen. Sie können auch eine Proxy_Cache-Direktive in einen Serverblock aufnehmen. Sie gilt für alle Blöcke des Servers, die keine eigenen Standortdirektiven haben.

Zwischengespeicherte Inhalte bereitstellen, wenn der Upstream-Server ausgefallen ist()

Eine leistungsstarke Funktion der Inhaltszwischenspeicherung von Nginx besteht darin, dass Nginx so konfiguriert werden kann, dass zwischengespeicherte Inhalte aus dem Cache bereitgestellt werden, wenn vom Ursprungsserver keine neuen Inhalte abgerufen werden können. Dies kann passieren, wenn alle Ursprungsserver, die eine Ressource zwischenspeichern, ausgefallen oder vorübergehend belegt sind.

Anstatt den Fehler an den Client weiterzugeben, stellt Nginx die veraltete Version der Datei aus dem Cache bereit. Dies bietet zusätzliche Fehlertoleranz für Nginx-Proxy-Server und gewährleistet Betriebszeit im Falle von Serverausfällen oder Verkehrsspitzen. Um diese Funktion zu aktivieren, fügen Sie die Direktive proxy_cache_use_stale ein:

Standort / { 
  # ... 
  proxy_cache_use_stale Fehler Timeout http_500 http_502 http_503 http_504; 
}

Wenn Nginx bei dieser Beispielkonfiguration einen Fehler, eine Zeitüberschreitung oder einen der angegebenen 5xx-Fehler vom Ursprungsserver empfängt und eine veraltete Version der angeforderten Datei in seinem Cache hat, liefert es die veraltete Datei, anstatt den Fehler an den Client weiterzuleiten.

So verbessern Sie die Cache-Leistung

Nginx verfügt über eine Vielzahl optionaler Einstellungen, mit denen die Leistung des Caches optimiert werden kann. Hier ist ein Beispiel für die Aktivierung einiger davon:

proxy_cache_path /Pfad/zum/Cache levels=1:2 keys_zone=my_cache:10m max_size=10g 
         inaktiv=60 m use_temp_path=aus; 
 
 
Server { 
  # ... 
  Standort / { 
    Proxy-Cache mein_Cache; 
    proxy_cache_revalidate ein; 
    Proxy_Cache_Min.-Verwendung: 3; 
    proxy_cache_use_stale Fehler Timeout Aktualisierung http_500 http_502 
               http_503 http_504; 
    proxy_cache_background_update ein; 
    proxy_cache_lock aktiviert; 
 
 
    Proxy-Passwort http://mein_Upstream; 
  } 
}

Diese Anweisungen konfigurieren die folgenden Verhaltensweisen:

  • proxy_cache_revalidate weist Nginx an, bei Verwendung bedingter GET-Anfragen den Inhalt vom Ursprungsserver zu aktualisieren. Wenn ein Client zwischengespeicherten, aber abgelaufenen Inhalt anfordert, wie im Cache-Control-Header definiert, schließt Nginx das Feld „If-Modified-Since“ in den Header der GET-Anforderung ein und sendet es an den Ursprungsserver. Denn der Server weiß nur, ob das gesamte Element seit dem im Header „Last-Modified“ aufgezeichneten Zeitpunkt geändert wurde, der an die Datei angehängt wurde, als Nginx sie ursprünglich zwischengespeichert hat.
  • proxy_cache_min_uses legt fest, wie oft ein Client eine Anfrage stellen muss, bevor Nginx sie zwischenspeichert. Dies ist nützlich, wenn der Cache ständig voll wird, da dadurch sichergestellt wird, dass nur die am häufigsten aufgerufenen Elemente zum Cache hinzugefügt werden. Standardmäßig ist proxy_cache_min_uses auf 1 eingestellt.
  • Der Aktualisierungsparameter der Direktive proxy_cache_use_stale in Kombination mit der aktivierten Direktive proxy_cache_background_update weist Nginx an, veraltete Inhalte bereitzustellen, wenn ein Client ein Element anfordert, das abgelaufen ist oder vom Ursprungsserver aktualisiert wird. Alle Updates werden im Hintergrund durchgeführt. Bis die aktualisierte Datei vollständig heruntergeladen ist, wird für alle Anforderungen die veraltete Datei zurückgegeben.
  • Wenn proxy_cache_lock aktiviert ist und mehrere Clients eine Datei anfordern, die sich nicht im Cache befindet (MISS), wird nur die erste dieser Anforderungen über den Ursprungsserver geleitet. Die restlichen Anfragen warten auf die Erfüllung dieser Anfrage und holen dann die Datei aus dem Cache. Wenn proxy_cache_lock nicht aktiviert ist, werden alle Anfragen, die zu einem Cache-Fehler führen, direkt an den Ursprungsserver gesendet.

Aufteilen des Cache auf mehrere Festplatten

Wenn Sie über mehrere Festplatten verfügen, können Sie den Cache mit Nginx zwischen ihnen aufteilen. Das folgende Beispiel verteilt die Clients basierend auf der Anforderungs-URI gleichmäßig auf zwei Festplatten:

proxy_cache_path /Pfad/zu/hdd1 levels=1:2 keys_zone=my_cache_hdd1:10m 
         max_size=10g inaktiv=60m use_temp_path=aus; 
proxy_cache_path /Pfad/zu/hdd2 levels=1:2 keys_zone=my_cache_hdd2:10m 
         max_size=10g inaktiv=60m use_temp_path=aus; 
 
 
split_clients $request_uri $my_cache { 
       50 % „my_cache_hdd1“; 
       50 % „my_cache_hdd2“; 
} 
 
 
Server { 
  # ... 
  Standort / { 
    Proxy-Cache $mein_Cache; 
    Proxy-Passwort http://mein_Upstream; 
  } 
}

Die beiden proxy_cache_path-Direktiven definieren zwei Caches (my_cache_hdd1 und my_cache_hdd2) auf zwei verschiedenen Festplatten.

Der Konfigurationsblock split_clients gibt an, dass die Hälfte der Anfragen (also 50 %) in my_cache_hdd1 und die andere Hälfte in my_cache_hdd2 zwischengespeichert wird. Welcher Cache verwendet wird, wird für jede Anfrage anhand eines Hashs der Variable „$request_uri“ (der Anfrage-URI) bestimmt, mit dem Ergebnis, dass Anfragen für eine bestimmte URI immer im selben Cache zwischengespeichert werden.

Bitte beachten Sie, dass diese Methode kein Ersatz für eine RAID-Festplattenkonfiguration ist. Wenn ein Festplattenfehler auftritt, kann dies zu unvorhersehbarem Systemverhalten führen. Unter anderem kann es vorkommen, dass Benutzern bei Anfragen an die ausgefallene Festplatte ein 500-Antwortcode angezeigt wird. Eine ordnungsgemäße RAID-Laufwerkkonfiguration kann Laufwerksausfälle bewältigen.

So erkennen Sie den Nginx-Cache

Sie können die Variable $upstream_cache_status zur Erkennung zum Antwortheader hinzufügen

add_header X-Cache-Status $upstream_cache_status;

Dieses Beispiel fügt der Antwort an den Client den HTTP-Header „X-Cache-Status“ hinzu. Folgendes sind die möglichen Werte für $upstream_cache_status:

  • MISS – Die Antwort wurde nicht im Cache gefunden, daher wurde die Antwort vom Ursprungsserver abgerufen. Die Antwort wird dann zwischengespeichert.
  • BYPASS - die Antwort wurde vom Ursprungsserver abgerufen, anstatt aus dem Cache bereitgestellt zu werden, da die Anforderung der Anweisung proxy_cache_bypass entsprach.
  • ABGELAUFEN – Der Eintrag im Cache ist abgelaufen. Die Antwort enthält den neuen Inhalt vom Ursprungsserver.
  • STALE – Der Inhalt ist veraltet, weil der Ursprungsserver nicht richtig antwortet, aber proxy_cache_use_stale konfiguriert ist.
  • AKTUALISIERUNG – Der Inhalt ist veraltet, da der Eintrag derzeit als Antwort auf eine vorherige Anforderung aktualisiert wird und die Aktualisierung proxy_cache_use_stale konfiguriert ist.
  • NEU VALIDIERT – die Direktive proxy_cache_revalidate wird aktiviert und Nginx überprüft über (If-Modified-Since oder If-None-Match), ob der aktuell zwischengespeicherte Inhalt noch gültig ist.
  • HIT – die Antwort kam direkt aus einem gültigen Cache

So bestimmt Nginx, ob eine Antwort zwischengespeichert werden soll

Standardmäßig respektiert Nginx den Cache-Control-Header des Ursprungsservers. Es werden keine Antworten zwischengespeichert, bei denen Cache-Control im Antwortheader auf „Private“, „No-Cache“ oder „No-Store“ oder „Set-Cookie“ eingestellt ist. Nginx speichert nur GET- und HEAD-Clientanforderungen im Cache. Sie können diese Standardeinstellungen wie in den Antworten unten beschrieben überschreiben.

Wenn „Proxy_Buffering“ deaktiviert ist, speichert Nginx die Antworten nicht im Cache. Ein Die Standardeinstellung.

Kann Nginx Cache-Control ignorieren

Verwenden Sie die Direktive proxy_ignore_headers, um Cache-Control zu ignorieren

Standort /Bilder/ { 
  Proxy-Cache mein_Cache; 
  proxy_ignore_headers Cache-Steuerung; 
  proxy_cache_valid alle 30 m; 
  # ... 
}

Nginx ignoriert Cache-Control-Header für alles unter /images/. Diese Anweisung erzwingt den Ablauf zwischengespeicherter Daten, was erforderlich ist, wenn der Header ignoriert wird. Nginx speichert keine Dateien im Cache, die nicht abgelaufen sind.

Kann Nginx Set-Cookie ignorieren

Verwenden Sie die Direktive proxy_ignore_headers.

So cachen Sie POST-Anfragen in Nginx

Verwenden Sie die Direktive proxy_cache_methods:

Proxy_Cache_Methoden: Kopf-Beitrag abrufen;

Dieses Beispiel aktiviert die Zwischenspeicherung für POST-Anfragen.

Wie Nginx dynamische Inhalte zwischenspeichert, sofern der Cache-Control-Header dies zulässt. Durch das Zwischenspeichern dynamischer Inhalte, selbst für einen kurzen Zeitraum, kann die Belastung der Ursprungsserver und Datenbanken verringert werden. Dadurch verbessert sich die Zeit bis zum ersten Byte, da die Seite nicht für jede Anforderung neu generiert werden muss.

So deaktivieren Sie den Nginx-Cache

Die Direktive proxy_cache_bypass

Standort / { 
  Proxy-Cache-Bypass $cookie_nocache $arg_nocache; 
  # ... 
}

Diese Anweisung definiert die Anforderungstypen, für die Nginx sofort Inhalte vom Ursprungsserver anfordern soll, anstatt zuerst zu versuchen, sie im Cache zu finden. Dies wird manchmal als „Loch in den Cache schlagen“ bezeichnet.

Welchen Cache-Schlüssel verwendet Nginx?

Die Standardform des von Nginx generierten Schlüssels sieht aus wie der MD5-Hash der folgenden Nginx-Variable: $scheme$proxy_host$request_uri; der tatsächlich verwendete Algorithmus ist etwas komplizierter.

proxy_cache_path /Pfad/zum/Cache levels=1:2 keys_zone=my_cache:10m max_size=10g 
         inaktiv=60 m use_temp_path=aus; 
 
 
Server { 
  # ... 
  Standort / { 
    Proxy-Cache mein_Cache; 
    Proxy-Passwort http://mein_Upstream; 
  } 
}

Für diese Beispielkonfiguration wird der Cache-Schlüssel http://www.example.org/my_image.jpg als md5("http://my_upstream:80/my_image.jpg") berechnet.

Beachten Sie, dass die Variable „proxy_host“ für den Hashwert und nicht für den tatsächlichen Hostnamen (www.example.com) verwendet wird. „proxy_host“ wird als Name und Port des Proxyservers definiert, der in der Direktive „proxy_pass“ angegeben ist.

Um die als Grundlage für den Schlüssel verwendete Variable zu ändern, verwenden Sie die Direktive proxy_cache_key.

Verwenden eines Cookies als Teil meines Cache-Schlüssels

Der Cache-Schlüssel kann mit einem beliebigen Wert konfiguriert werden, zum Beispiel:

Proxy-Cache-Schlüssel $Proxy-Host$Request-URI$Cookie-Jessionid;

Dieses Beispiel integriert den Wert des JSESSIONID-Cookies in den Cache-Schlüssel. Elemente mit derselben URI, aber unterschiedlichen JSESSIONID-Werten werden separat als eindeutige Elemente zwischengespeichert.

Nginx verwendet den ETag-Header

In Nginx 1.7.3 und höher unterstützt der ETag-Header vollständig If-None-Match.

Wie Nginx Bytebereichsanforderungen verarbeitet

Wenn die Datei im Cache neu ist, berücksichtigt Nginx die Bytebereichsanforderung und stellt dem Client nur die angegebenen Bytes des Elements zur Verfügung. Wenn die Datei nicht zwischengespeichert ist oder veraltet ist, lädt Nginx die gesamte Datei vom Ursprungsserver herunter.

Wenn die Anforderung einen einzelnen Bytebereich betrifft, sendet Nginx diesen Bereich an den Client, sobald es ihn im Download-Stream findet. Wenn die Anforderung mehrere Bytebereiche in derselben Datei angibt, liefert Nginx dem Client die gesamte Datei, wenn der Download abgeschlossen ist.

Sobald der Download abgeschlossen ist, verschiebt Nginx die gesamte Ressource in den Cache, sodass alle zukünftigen Bytebereichsanforderungen, unabhängig davon, ob es sich um einen einzelnen Bereich oder mehrere Bereiche handelt, sofort aus dem Cache erfüllt werden.

Beachten Sie, dass der Upstream-Server Bytebereichsanforderungen unterstützen muss, damit Nginx Bytebereichsanforderungen an diesen Upstream-Server unterstützen kann.

Wie Nginx den Pragma-Header verarbeitet

Der Header Pragma:no-cache wird vom Client hinzugefügt, um Inhalte anzufordern, die alle Zwischencaches umgehen und direkt an den Ursprungsserver gehen. Standardmäßig unterstützt Nginx den Pragma-Header nicht, aber Sie können diese Funktionalität mit der Direktive proxy_cache_bypass konfigurieren:

Standort /Bilder/ { 
  Proxy-Cache mein_Cache; 
  Proxy_Cache_Bypass $http_pragma; 
  # ... 
}

Unterstützt Nginx die Header stale-while-revalidate und stale-if-error und erweiterte Cache-Control

Unterstützt in Nginx 1.11.10 und höher. Was diese Erweiterungen bewirken:

Erweiterung des Cache-Control-HTTP-Headers, um die Verwendung einer veralteten zwischengespeicherten Antwort zu ermöglichen, wenn diese gerade aktualisiert wird. Die Stale-if-Error-Erweiterung des Cache-Control-HTTP-Headers ermöglicht die Verwendung einer veralteten zwischengespeicherten Antwort, wenn ein Fehler auftritt. Diese Header haben eine niedrigere Priorität als die oben beschriebene Direktive „proxy_cache_use_stale“.

Unterstützt Nginx Vary-Header?

Der Vary-Header wird in Nginx 1.7.7 und höher unterstützt.

abschließend

An diesem Punkt sollten Sie ein gutes Verständnis davon haben, wie der Nginx-Proxy-Cache funktioniert und wie Sie ihn richtig konfigurieren. Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Nginx Reverse-Proxy und Cache und Cache-Löschmethode
  • So verwenden Sie Nginx als Proxy-Cache

<<:  Verwenden von React+Redux zum Implementieren der Zählerfunktion und aufgetretene Probleme

>>:  Beispielcode für das Testskript für Indizes und Sperren auf den Isolationsebenen RR und RC

Artikel empfehlen

Detaillierte Erklärung der atomaren DDL-Syntax von MySQL 8.0

Inhaltsverzeichnis 01 Einführung in Atomic DDL 02...

Über Zabbix Admin-Login vergessen Passwort zurücksetzen

Das Problem beim Zurücksetzen des Passworts für d...

So erhalten und verwenden Sie die Zeit im Linux-System

Es gibt zwei Arten von Linux-Systemzeiten. (1) Ka...

Unterschied zwischen src- und href-Attributen

Es besteht ein Unterschied zwischen src und href ...

Installationsprozess des mysql5.6.8-Quellcodes

Kernel: [root@opop ~]# cat /etc/centos-release Ce...

So installieren Sie Babel mit NPM in VSCode

Vorwort Im vorherigen Artikel wurde die Installat...

Prozessanalyse von reservierten Wortanweisungen in Dockerfile

Inhaltsverzeichnis 1. Was ist Dockerfile? 2. Anal...

Der Unterschied zwischen JS-Pre-Parsing und Variablen-Promotion im Web-Interview

Inhaltsverzeichnis Was ist eine Voranalyse? Der U...

Axios storniert wiederholte Anfragen

Inhaltsverzeichnis Vorwort 1. So stornieren Sie e...

Was ist ZFS? Gründe für die Verwendung von ZFS und seine Funktionen

Geschichte von ZFS Das Z-Dateisystem (ZFS) wurde ...