Was ist die Latenz innerhalb eines Rechenzentrums? Ich frage dies unter der Annahme, dass es Größenordnungen von Unterschieden gibt

17

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.

Neeraj Murarka
quelle
1
Dies hängt auch von der Anzahl der Roundtrips pro Transaktion ab. Dies ist häufig das eigentliche Problem, das Sie in einer Folge von Abfragen serialisiert haben. Eine komplexere Abfrageschnittstelle, eine serverseitige Prozedur oder ein normaler Cache können die Auswirkungen verringern.
eckes

Antworten:

19

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.

Redis ist ein Open Source (BSD-lizenzierter) In-Memory-Datenstrukturspeicher, der als Datenbank-, Cache- und Nachrichtenbroker verwendet wird. - https://redis.io/

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.

ETL
quelle
Vielen Dank. Das ist in der Tat nützlich. Es gibt in der Tat viele kontextbezogene Abweichungen, die sich darauf auswirken. Wenn wir die hohe Auslastung für einen Moment ignorieren, ist die Netzwerklatenz tatsächlich der Engpass, sodass die zusätzliche Latenz von SSD gegenüber RAM nicht ausschlaggebend genug ist, um eine Rolle zu spielen. Wenn wir jedoch die hohe Auslastung berücksichtigen, beginnen sich die Latenzunterschiede der SSD zum RAM zu verstärken, und der RAM wird jetzt strahlen. Kommt es dann darauf an?
Neeraj Murarka
1
Es ist schwer, es auf einen einzigen Faktor schwerer 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
1
Beachten Sie außerdem, dass neben der Latenz noch viele andere Faktoren zu berücksichtigen sind, insbesondere, dass die meisten echten Dienste mehrere Instanzen des Serverprogramms auf verschiedenen Computern ausführen müssen, sodass "alles im RAM lokal" normalerweise überhaupt nicht praktikabel ist.
chrylis -on strike-
Aber eine 10g-Netzwerkverbindung ist Low-End. Meine Server sind mit 200gigabit (ja, 2x100g Links) mit meinem Backbone verbunden.
TomTom,
3

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.

Speicher ist teuer.

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.

John Mahowald
quelle
Können Sie bitte erläutern, wie Sie berechnet haben, dass jede dieser 5 API-Abfragen jeweils 50 ms dauert? Dies geschieht unter dem Deckmantel, dass die Anwendung die Datenbank aufruft, die Abfrage durchführt und die Ergebnismenge berechnet, anstatt nur einen Cache in der Stadt zu treffen, in dem zufällig die Abfragezeichenfolge selbst als Schlüssel zwischengespeichert wurde, und eine zwischengespeicherte Kopie dieses Ergebnisses zu haben einstellen?
Neeraj Murarka
1
Ich habe diese Zahlen erfunden, aber ja. Das Ausführen einer Abfrage und das erneute Berechnen eines Ergebnisses ist wahrscheinlich langsamer als das Abrufen dieses vorberechneten Ergebnisses. Implementierungen wie Redis sind aus Gründen der Einfachheit und Geschwindigkeit in der Regel im Arbeitsspeicher. Das Durchqueren eines IP-Netzwerks oder eines UNIX-Socket-Transports kann auch recht schnell sein. Trotzdem ist dieses Caching-Zeug nicht für jedes Design erforderlich.
John Mahowald
Verstanden. Ich glaube, ich verstehe mehr oder weniger. Es scheint, dass in vielen Fällen, aber nicht immer, sogar das Überqueren des Rechenzentrums zu einem nahe gelegenen Cache, der sich möglicherweise in demselben US-Bundesstaat (oder in derselben kanadischen Provinz usw.) befindet (möglicherweise ist Region eine gute Semantik), oft möglich ist Dies ist ein großer Vorteil gegenüber dem Versuch, den Wert algorithmisch aus seiner eigenen lokalen Datenbank neu zu berechnen, wenn dies tatsächlich zu einem Cache-Treffer führt. Andererseits bietet der Cache, der sich möglicherweise entfernt befindet, nicht viel Wert, da er sich im Arbeitsspeicher befindet. Es kann auch SSD-basiert sein.
Neeraj Murarka
1
Das entfernte Datencenter ist der schlimmste Fall. Idealerweise ist die Cache-Schicht weniger als 1 ms von den Clients entfernt. Möglicherweise dieselbe Verfügbarkeitszone oder sogar derselbe Host. Sie können bei Bedarf in einem dauerhaften Speicher zwischengespeichert werden. Alternativ können Sie diesen Solid-State-Speicher für die Primärdatenbank verwenden, alle Abfragen beschleunigen und möglicherweise keine Caching-Schicht benötigen. Es gibt mehrere mögliche Designs.
John Mahowald