Wie kann ich Probleme mit hoher Latenz in DAX-Clustern (DynamoDB Accelerator) beheben?

Lesedauer: 5 Minute
0

Meine Lese- oder Schreibanforderungen in Amazon DynamoDB Accelerator (DAX) weisen eine hohe Latenz auf. Wie kann ich dies beheben?

Lösung

Es gibt mehrere Gründe, warum es bei Ihren Anfragen zu Latenzen kommen kann. Sehen Sie sich die folgenden potenziellen Probleme an, um Ihre Latenz zu beheben.

Der Cluster oder Knoten ist stark ausgelastet.

Latenz wird häufig durch einen Cluster oder Knoten verursacht, der einer hohen Belastung des DAX-Clusters ausgesetzt ist. Diese Latenz kann weiter verstärkt werden, wenn Sie Ihren Client für eine einzelne Knoten-URL anstelle der Cluster-URL konfiguriert haben. Wenn in diesem Fall bei hoher Last ein Problem auf dem Knoten auftritt, kommt es bei den Client-Anforderungen zu Latenz oder Drosselung.

Verwenden Sie horizontale oder vertikale Skalierung, um Latenz und Drosselung zu beheben, die durch eine hohe Belastung einzelner Cluster oder Knoten verursacht werden.

Fehlkonfiguration im DAX-Client

Wenn Sie den Parameter withMinIdleConnectionSize senken, erhöht sich wahrscheinlich die Latenz im DAX-Cluster. Dieser Parameter legt die Mindestanzahl von inaktiven Verbindungen mit dem DAX-Cluster fest. Für jede Anforderung verwendet der Client eine verfügbare inaktive Verbindung. Wenn keine Verbindung verfügbar ist, baut der Client eine neue auf. Wenn der Parameter beispielsweise auf 20 gesetzt ist, gibt es mindestens 20 inaktive Verbindungen mit dem DAX-Cluster.

Der Client unterhält einen Verbindungspool. Wenn eine Anwendung einen API-Aufruf an DynamoDB oder DAX tätigt, least der Client eine Verbindung aus dem Verbindungspool. Dann führt der Client den API-Aufruf durch und gibt die Verbindung zum Pool zurück. Der Verbindungspool hat jedoch eine Obergrenze. Wenn Sie eine große Anzahl von API-Aufrufen an DAX gleichzeitig tätigen, überschreiten diese möglicherweise das Limit des Verbindungspools. In diesem Fall müssen einige Anfragen warten, bis andere Anfragen abgeschlossen sind, bevor sie Leases aus dem Verbindungspool erhalten. Dies führt dazu, dass Anfragen auf Verbindungspoolebene in die Warteschlange gestellt werden. Infolgedessen erhöht sich die Latenzzeit der Anwendung.

Passen Sie daher die Parameter setMinIdleConnectionSize, getMinIdleConnectionSize und withMinIdleConnectionSize an, um periodische Datenverkehrsspitzen in Ihrer Anwendung zu verringern. Diese Parameter spielen eine Schlüsselrolle bei der Latenz eines DAX-Clusters. Konfigurieren Sie sie für Ihre API-Aufrufe, sodass DAX eine angemessene Anzahl von Verbindungen im Leerlauf verwendet, ohne dass neue Verbindungen erneut hergestellt werden müssen.

Fehlende Elemente im Cache

Wenn bei einer Leseanforderung ein Element fehlt, sendet DAX die Anforderung an DynamoDB. DynamoDB verarbeitet die Anforderungen mit eventuell konsistenten Lesevorgängen und gibt die Elemente dann an DAX zurück. DAX speichert sie im Element-Cache und gibt sie dann an die Anwendung zurück. Eine Latenz in der zugrunde liegenden DynamoDB-Tabelle kann zu einer Latenz bei der Anforderung führen.

Cache-Fehler treten häufig aus zwei Gründen auf:

1.    Stark konsistente Lesevorgänge: Stark konsistente Lesevorgänge für dasselbe Element werden von DAX nicht zwischengespeichert. Dies führt zu einem Cache-Fehler, da die Einträge DAX umgehen und aus der DynamoDB-Tabelle selbst abgerufen werden. Sie können letzendlich konsistente Lesevorgänge verwenden, um dieses Problem zu lösen. Beachten Sie jedoch, dass DynamoDB zuerst die Daten lesen muss, damit die Daten zwischengespeichert werden.

2.    Bereinigungsrichtlinie in DAX: Abgefragte Daten, die bereits aus dem Cache entfernt wurden, führen zu einem Fehler. DAX verwendet drei verschiedene Werte, um Cache-Bereinigungen zu bestimmen:

  • DAX-Cluster verwenden einen LRU-Algorithmus (Least Recently Used), um Elemente zu priorisieren. Elemente mit der niedrigsten Priorität werden gelöscht, wenn der Cache voll ist.
  • DAX verwendet einen Time-to-Live-Wert (TTL) für den Zeitraum, in dem Elemente im Cache verfügbar sind. Nachdem der TTL-Wert eines Elements überschritten wurde, wird das Objekt entfernt.
    Hinweis: Wenn Sie den TTL-Standardwert von fünf Minuten verwenden, überprüfen Sie, ob Sie die Daten nach der TTL-Zeit abfragen.
  • DAX verwendet die Write-Through-Funktion, um ältere Werte zu entfernen, wenn neue Werte geschrieben werden. Dies erleichtert es, den DAX-Elemente-Cache mithilfe eines einzelnen API-Aufrufs mit dem zugrundeliegenden Datenspeicher konsistent zu halten.

Informationen zur Erweiterung des TTL-Werts Ihrer Elemente finden Sie unter TTL-Einstellungen konfigurieren.
Hinweis: Sie können eine Parametergruppe nicht ändern, während sie in einer laufenden DAX-Instance verwendet wird.

Cache-Fehler können auch auftreten, wenn Wartungspatching auf einen DAX-Cluster angewendet wird. Verwenden Sie mehrere Knotencluster, um diese Ausfallzeiten zu reduzieren.

Wartungsfenster

Während des wöchentlichen Wartungsfensters kann es zu Latenzen kommen, insbesondere wenn es Software-Upgrades, Patches oder Systemänderungen an den Clusterknoten gibt. In den meisten Fällen werden Anfragen von anderen verfügbaren Knoten, die nicht gewartet werden, erfolgreich bearbeitet. Bei einem Cluster mit einer hohen Anzahl von Anfragen während intensiver Wartungsarbeiten kann es zu Ausfällen kommen.

Um die Wahrscheinlichkeit von Latenz oder Ausfällen zu verringern, konfigurieren Sie das Wartungsfenster auf Ihre Zeiten außerhalb der Spitzenzeiten. Dadurch kann der Cluster in einer Phase geringerer Anforderungslast aktualisiert werden.

Latenz in der DynamoDB-Tabelle

Bei Schreiboperationen werden Daten zuerst in die DynamoDB-Tabelle und dann in den DAX-Cluster geschrieben. Der Vorgang ist nur erfolgreich, wenn die Daten erfolgreich sowohl in die Tabelle als auch in DAX geschrieben wurden. Eine Latenz in der zugrunde liegenden DynamoDB-Tabelle kann zu einer Latenz bei der Anforderung führen. Informationen zur Reduzierung dieser Latenz finden Sie unter Wie kann ich Probleme mit hoher Latenz in einer Amazon-DynamoDB-Tabelle beheben?

Weitere Informationen zur Konfiguration von DynamoDB an die Latenzanforderungen Ihrer Anwendung finden Sie unter Optimieren der HTTP-Anforderungseinstellungen des AWS-Java-SDK für latenzsensitive Amazon-DynamoDB-Anwendungen.

Timeout-Periode anfordern

Der Parameter setIdleConnectionTimeout bestimmt die Timeout-Periode für inaktive Verbindungen, und setConnectTimeout bestimmt die Timeout-Periode für Verbindungen mit dem DAX-Cluster. Diese beiden Parameter befassen sich mit Timeouts der Verbindungspools, die sich auf die Latenz Ihres Clusters auswirken können.

Konfigurieren Sie das Anforderungs-Timeout für Verbindungen mit dem DAX-Cluster, indem Sie den Parameter setRequestTimeout anpassen. Weitere Informationen finden Sie unter setRequestTimeout in der DAX-Dokumentation.

Es ist auch eine bewährte Methode, exponentielle Backoff-Wiederholungen zu verwenden, um Anforderungsfehler und auch die Betriebskosten zu reduzieren.

Hinweis: DAX unterstützt die Latenz des Clusters in CloudWatch Metrics nicht.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren