Ich versuche etwas herauszufinden, auf das ich einfach keine gute Antwort finden kann.
Wenn ich einen REDIS-Cache (oder einen externen In-Memory-Cache) in einem Rechenzentrum und einen Anwendungsserver in demselben Rechenzentrum angegeben habe, wie schnell ist die Netzwerkverbindung (Latenz, Durchsatz) zum Lesen von Daten? zwischen diesen beiden Maschinen?
Ist die "Netzwerkgeschwindigkeit" beispielsweise immer noch mindestens eine Größenordnung höher als die Geschwindigkeit des Arbeitsspeichers, der meine Daten auf REDIS aus dem Cache sucht?
Meine ultimative Frage ist, ob dies alles in REDIS gespeichert ist und tatsächlich ein Dienstprogramm bereitstellt. Im Gegensatz dazu, wenn REDIS dies alles stattdessen auf eine SSD zwischenspeichert? Speicher ist teuer. Wenn das Netzwerk in der Tat kein Engpass innerhalb des Rechenzentrums ist, hat der Speicher Wert. Ansonsten nicht.
Ich denke, meine allgemeine Frage ist, obgleich die Unbekannten in Rechenzentren und die Unfähigkeit zur Verallgemeinerung sowie die Abweichungen groß genug sind, um zwischen der Speicherlatenz in einem Computersystem und sogar den besten Netzwerken innerhalb eines DC zu sprechen, die der Speicher hat Reduzierte Latenzen sorgen nicht für eine signifikante Leistungsverbesserung? Ich verstehe, dass es viele Variablen gibt, aber wie nah ist es? Ist es so nah, dass diese Variablen eine Rolle spielen? Nehmen Sie zum Beispiel eine hyperbolische Haltung ein, ein Bandlaufwerk ist WEGWEISEND langsamer als ein Netzwerk, daher ist Band nicht ideal für einen Cache.
Antworten:
Es gibt verschiedene Versionen der "Latenzdiagramme, die jeder kennen sollte", wie zum Beispiel:
Die Sache ist, dass es in Wirklichkeit mehr als nur Latenz gibt. Es ist eine Kombination von Faktoren.
Wie hoch ist die Netzwerklatenz in einem Rechenzentrum? Latenz Nun, ich würde sagen, es ist "immer" unter 1 ms. Ist es schneller als RAM? Ist es in der Nähe von RAM? Ich glaube nicht.
Aber die Frage bleibt, ist es relevant. Ist das das Datum, das Sie wissen müssen? Ihre Frage ergibt für mich einen Sinn. Da alles mit Kosten verbunden ist, sollten Sie mehr RAM benötigen, damit alle Daten im RAM verbleiben können, oder es ist in Ordnung, von Zeit zu Zeit Daten von der Festplatte zu lesen.
Ihre "Annahme" ist, dass, wenn die Netzwerklatenz höher (langsamer) als die Geschwindigkeit der SSD ist, Sie nicht alle Daten im RAM haben, da Sie die langsame im Netzwerk haben werden.
Und es scheint so. Sie müssen jedoch auch die Parallelität berücksichtigen. Wenn Sie 1.000 Anforderungen für die Daten gleichzeitig erhalten, kann der Datenträger 1.000 gleichzeitige Anforderungen ausführen? Natürlich nicht. Wie lange wird es dauern, diese 1.000 Anfragen zu bearbeiten? Im Vergleich zu RAM?
Es ist schwer, es auf einen einzigen Faktor wie schwere Lasten zurückzuführen. Aber ja, wenn Sie nur eine Operation ausführen, ist die Latenz des Netzwerks so hoch, dass Sie den Unterschied zwischen SSD und RAM wahrscheinlich nicht bemerken werden.
So wie es bis zum Erscheinen einer 12-Gbit / s-Festplatte auf dem Markt war, würde eine 10-Gbit / s-Netzwerkverbindung nicht durch einen einzelnen Stream überlastet, da die Festplatte der Engpass war.
Denken Sie jedoch daran, dass Ihre Festplatte viele andere Aufgaben übernimmt, dass Ihr Prozess nicht der einzige Prozess auf dem Computer ist, dass Ihr Netzwerk möglicherweise andere Aufgaben übernimmt usw.
Außerdem bedeuten nicht alle Festplattenaktivitäten Netzwerkverkehr. Die Datenbankabfrage, die von einer Anwendung an den Datenbankserver gesendet wird, ist nur ein sehr geringer Netzwerkverkehr. Die Antwort vom Datenbankserver kann sehr klein (eine einzelne Zahl) oder sehr groß (tausend Zeilen mit mehreren Feldern) sein. Um den Vorgang auszuführen, muss ein Server (Datenbankserver oder nicht) möglicherweise mehrere Festplattensuchen, -lesen und -schreiben ausführen, sendet jedoch nur ein sehr kleines Stück über das Netzwerk zurück. Es ist definitiv kein 1: 1-Netzwerk-Festplatten-RAM.
Bisher habe ich einige Details Ihrer Frage vermieden - insbesondere den Redis-Teil.
OK, das bedeutet, dass sich alles im Speicher befindet. Entschuldigung, dieses schnelle SSD-Laufwerk hilft Ihnen hier nicht weiter. Redis kann Daten auf der Festplatte persistieren, so dass sie nach einem Neustart in den RAM geladen werden können. Das bedeutet nur, dass Sie nach einem Neustart keine Daten "verlieren" oder einen kalten Cache neu füllen müssen. In diesem Fall müssen Sie also den Arbeitsspeicher verwenden, egal was passiert. Sie müssen über genügend RAM verfügen, um Ihren Datensatz aufnehmen zu können. Nicht genug RAM und ich vermute, dass Ihr Betriebssystem verwendet wird
swap
- wahrscheinlich keine gute Idee.quelle
In Computersystemen gibt es viele Cache-Schichten. Das Einfügen einer in die Anwendungsebene kann hilfreich sein, da API- und Datenbankabfragen zwischengespeichert werden. Und möglicherweise temporäre Daten wie Benutzersitzungen.
Datenspeicher wie Redis bieten einen solchen Dienst über ein Netzwerk (schnell) oder einen UNIX-Socket (sogar schneller) an, ähnlich wie Sie eine Datenbank verwenden würden.
Sie müssen die tatsächliche Leistung Ihrer Anwendung messen, aber lassen Sie uns ein Beispiel erstellen. Angenommen, eine allgemeine Benutzeranforderung führt 5 API-Abfragen aus, die jeweils 50 ms dauern. 250 ms sind vom Benutzer feststellbare Latenzen. Im Gegensatz zum Cachen der Ergebnisse. Selbst wenn sich der Cache in einer anderen Verfügbarkeitszone in der Stadt befindet (nicht optimal), betragen die Treffer wahrscheinlich höchstens 10 ms. Das wäre eine 5-fache Beschleunigung.
In Wirklichkeit haben die Datenbank- und Speichersysteme auch ihre eigenen Caches. In der Regel ist es jedoch schneller, ein vorabgerufenes Ergebnis zu erhalten, als die Datenbankmodul- und Speichersystemebenen erneut zu durchlaufen. Außerdem kann die Caching-Schicht die dahinter stehende Datenbank erheblich entlasten.
Ein Beispiel für einen solchen Cache in der Produktion finden Sie im Blog der Stack Overflow-Infrastruktur zur Architektur . Hunderttausende von HTTP-Anfragen, die Milliarden von Redis-Treffern generieren, sind von großer Bedeutung.
DRAM ist bei Zugriffszeiten von 100 ns ungefähr 100-mal schneller als permanenter Solid-State-Speicher. Es ist relativ günstig für diese Leistung. Für viele Anwendungen sorgt etwas mehr RAM für wertvolle Geschwindigkeit und Reaktionszeit.
quelle