2016-04-16 3 views
2

Basierend auf dieser link, ich verstehe, dass Hotkey-Fehler passiert, wenn es zu viele gleichzeitige Operation Anforderungen für den gleichen Schlüssel gibt.Aerospike Hotkey Fehler

Mein aktuelles Szenario:

Ich habe einen Datensatz, der in all 5-10 Sekunden-Intervall aktualisiert wird erhalten, und ich werde rund 20 Maschinen mit jeweils 10K Abfragen pro Sekunde hat versucht, diesen Rekord

    zu lesen
  • Frage 1: Hotkey-Fehler wird nur auftreten, wenn es gleichzeitige Update-Transaktionen gibt oder es auch für gleichzeitige Lesevorgänge auftreten kann?
  • Frage 2: Das oben erwähnte transaction-pending-Limit ist es pro Knoten im Cluster oder für das gesamte Cluster-Limit?
  • Frage 3: Basierend auf meiner Lektüre sollten wir die Transaktionsbegrenzung nicht erhöhen, da dies Auswirkungen auf die Leistung hat. Können Sie mir einige Vergleichszahlen nennen? Und was ist der maximale Wert, der für das Limit "transaction pending-limit" verwendet werden kann?
  • Frage 4: Gibt es eine Problemumgehung für mein Szenario, ohne die Leistung zu beeinflussen, außer den Datensatz auf dem Server zwischenzuspeichern?

Antwort

5

1- Beide liest/aktualisiert.

2- Pro Knoten. Alle Transaktionen gehen zum Knoten, der die Hauptpartition für diesen Datensatz für die Aktualisierung enthält, und zum Lesen wird auch der Knoten mit der Hauptpartition für diesen Datensatz aufgerufen, es sei denn, Sie haben eine Client-Richtlinie, die auch vom Knoten mit der Replikpartition liest .

3- Schwer zu Zahlen geben. Dies führt zu mehr Clientverbindungen zu den Knoten, auf denen sich der Hotkey befindet, was wiederum die Leistung je nach Konfiguration beeinträchtigen kann.

4- Am einfachsten ist, wenn es der Anwendungsfall zulässt, die Read Replica-Clientrichtlinie zu verwenden, um die Lesevorgänge zwischen Master- und Replikatpartitionen zu verringern. Andernfalls erstellen Sie mehrere Schlüssel.

1

Basierend auf Ihren Fragedetails, sagen Sie, dass Sie 20 Server haben, die jeweils den gleichen Datensatz 10k Mal pro Sekunde suchen?

Wir haben die transaction-pending-limit auf 0 eingestellt, um das Limit für ausstehende Operationen zu entfernen, und konnten ungefähr 30k Operationen/Sek. Auf demselben In-Memory-Schlüssel ausführen. Wenn Sie 200 KB pro Sekunde verwenden möchten, können Sie einen Cluster mit mehreren Knoten verwenden und Read-from-Replica-Einstellungen verwenden, um den Durchsatz zu erhalten.

Wenn sich der Datensatz jedoch nur alle 5-10 Sekunden ändert, dann lesen Sie den Datensatz einmal pro Sekunde und speichern Sie das Ergebnis in Ihrer Anwendung zwischen. Auch wenn es sich um unterschiedliche Schlüssel handelt, wird durch intelligentes Caching in Ihrer App der Betrieb und der Netzwerkverkehr erheblich reduziert und das System wird wesentlich besser skaliert. Dies ist die beste Option.

+1

Ja Caching-Option ist da, Aber ich möchte verwenden, wenn ich keine andere Alternative habe, dachte ich, ist es möglich, einige Konfigurationsänderungen auf Aerospike zu machen, um diesen Hot Key Fehler zu beheben – Raghu

+1

@ Raghu Caching ist das Beste Option, keine Alternative. Dies ist die richtige Anwendungsarchitektur. Warum würden Sie 200.000 Abfragen/Sek. Durchführen, wenn Sie stattdessen 20/Sek. Ausführen können und dasselbe Ergebnis mit weniger Ressourcen und schnellerer Leistung erzielen? –