Automatische Verwaltung der Durchsatzkapazität mit DynamoDB-Auto-Scaling
Viele Datenbank-Workloads sind zyklischer Natur, während andere sich nur schwer vorhersagen lassen. Nehmen wir als Beispiel eine Social-Networking-App, bei der die meisten Benutzer tagsüber aktiv sind. Die Datenbank muss in der Lage sein, die Aktivitäten am Tag zu verarbeiten, während in der Nacht nicht so viel Durchsatz erforderlich ist. Ein weiteres Beispiel wäre eine neue Mobile-Gaming-App, die sich unerwartet schnell großer Beliebtheit erfreut. Wenn das Spiel jedoch zu beliebt wird, kann dies dazu führen, dass die verfügbaren Datenbankressourcen überschritten werden und sich dies negativ auf die Leistung und Kundenzufriedenheit auswirkt. Diese Arten von Workloads erfordern häufig manuelle Eingriffe, um die Datenbankressourcen nach oben oder unten zu skalieren, um sie an die jeweiligen Nutzungsschwankungen anzupassen.
Amazon DynamoDB-Auto-Scaling verwendet den AWS-Application-Auto-Scaling-Service, um die bereitgestellte Durchsatzkapazität in Ihrem Namen als Reaktion auf tatsächliche Datenverkehrsmuster dynamisch anzupassen. Auf diese Weise kann eine Tabelle oder ein globaler sekundärer Index (GSI) die bereitgestellte Lese- und Schreibkapazität erhöhen, um einen plötzlichen Anstieg des Datenverkehrs ohne Drosselung zu bewältigen. Wenn der Workload abnimmt, senkt Application Auto Scaling Auto Scaling den Durchsatz, sodass Sie für ungenutzte Kapazität nicht zahlen müssen.
Anmerkung
Wenn Sie die AWS-Managementkonsole zum Erstellen einer Tabelle oder eines globalen sekundären Indexes verwenden, ist die automatische DynamoDB-Skalierung standardmäßig aktiviert. Sie können Ihre Auto Scaling-Einstellungen jederzeit ändern. Weitere Informationen finden Sie unter Verwenden von AWS-Managementkonsole mit DynamoDB-Auto-Scaling.
Wenn Sie eine Tabelle oder ein globales Tabellenreplikat löschen, werden nicht automatisch zugeordnete skalierbare Ziele, Skalierungsrichtlinien oder CloudWatch-Alarme entfernt.
Mit Application Auto Scaling erstellen Sie eine Skalierungsrichtlinie für eine Tabelle oder einen globalen sekundären Index. Die Skalierungsrichtlinie gibt an, ob die Lese- oder Schreibkapazität (oder beides) sowie die Einstellungen für die minimalen und maximalen bereitgestellten Kapazitätseinheiten für die Tabelle oder den Index skaliert werden sollen.
Die Skalierungsrichtlinie enthält außerdem eine Zielauslastung, d. h. den zu einem bestimmten Zeitpunkt verbrauchten bereitgestellten Durchsatz in Prozent. Application Auto Scaling verwendet einen Zielverfolgungsalgorithmus, um den bereitgestellten Durchsatz der Tabelle (oder des Indexes) als Reaktion auf die tatsächlichen Workloads nach oben oder unten anzupassen, sodass die tatsächliche Kapazitätsauslastung bei oder in der Nähe Ihrer Zielauslastung bleibt.
DynamoDB-Ausgaben verbrauchten den bereitgestellten Durchsatz für Zeiträume von einer Minute. Auto Scaling wird ausgelöst, wenn Ihre verbrauchte Kapazität für zwei aufeinanderfolgende Minuten die konfigurierte Zielauslastung überschreitet. Bei CloudWatch-Alarmen kann es zu einer kurzen Verzögerung von bis zu einigen Minuten kommen, bevor Auto Scaling ausgelöst wird. Diese Verzögerung gewährleistet eine genaue Auswertung der CloudWatch-Metriken. Wenn die Spitzen des verbrauchten Durchsatzes in Abständen von mehr als einer Minute auftreten, wird Auto Scaling möglicherweise nicht ausgelöst. In ähnlicher Weise kann es zu einer Herunterskalierung kommen, wenn 15 aufeinanderfolgende Datenpunkte unter der Zielauslastung liegen. In beiden Fällen wird nach dem Auslösen von Auto Scaling die UpdateTable-API aufgerufen. Die Aktualisierung der bereitgestellten Kapazität für die Tabelle oder den Index kann dann einige Minuten dauern. Während dieses Zeitraums werden alle Anforderungen gedrosselt, die die zuvor bereitgestellte Kapazität der Tabellen überschreiten.
Wichtig
Sie können die Anzahl der Datenpunkte, die verletzt werden müssen, um den zugrunde liegenden Alarm auszulösen, nicht anpassen (obwohl sich die aktuelle Anzahl künftig ändern könnte).
Sie können die Zielauslastungswerte von Auto Scaling auf 20 bis 90 % für Ihre Lese- und Schreibkapazität festlegen.
Anmerkung
Zusätzlich zu den Tabellen unterstützt DynamoDB-Auto-Scaling auch globale sekundäre Indizes. Jeder globale sekundäre Index verfügt über eine eigene bereitgestellte Durchsatzkapazität, unabhängig von der seiner Basistabelle. Wenn Sie eine Skalierungsrichtlinie für einen globalen sekundären Index erstellen, passt Application Auto Scaling die Einstellungen für den bereitgestellten Durchsatz für den Index an, um sicherzustellen, dass die tatsächliche Auslastung auf oder in der Nähe des gewünschten Auslastungsverhältnisses bleibt.
Funktionsweise von DynamoDB-Auto-Scaling
Anmerkung
Informationen für einen schnellen Einstieg in DynamoDB-Auto-Scaling finden Sie unter Verwenden von AWS-Managementkonsole mit DynamoDB-Auto-Scaling.
Die folgende Abbildung bietet einen allgemeinen Überblick darüber, wie DynamoDB-Auto-Scaling die Durchsatzkapazität für eine Tabelle verwaltet:
Die folgenden Schritte fassen den Prozess der automatischen Skalierung zusammen, wie in der vorherigen Abbildung gezeigt:
-
Sie erstellen eine Application-Auto-Scaling-Richtlinie für die DynamoDB-Tabelle.
-
DynamoDB veröffentlicht Metriken der verbrauchten Kapazität in Amazon CloudWatch.
-
Wenn die verbrauchte Kapazität der Tabelle für einen bestimmten Zeitraum Ihre Zielauslastung überschreitet (oder unter das Ziel fällt), löst Amazon CloudWatch einen Alarm aus. Sie können den Alarm in der Konsole anzeigen und Benachrichtigungen über Amazon Simple Notification Service (Amazon SNS) erhalten.
-
Der CloudWatch-Alarm ruft Application Auto Scaling auf, um Ihre Skalierungsrichtlinie auszuwerten.
-
Application Auto Scaling gibt eine
UpdateTable-Anforderung aus, um den bereitgestellten Durchsatz der Tabelle anzupassen. -
DynamoDB verarbeitet die
UpdateTable-Anforderung und erhöht (bzw. senkt) die bereitgestellte Durchsatzkapazität der Tabelle dynamisch, sodass sie sich der Zielauslastung nähert.
Wir wollen die Funktionsweise von DynamoDB-Auto-Scaling anhand einer Beispieltabelle namens ProductCatalog erläutern. In die Tabelle werden selten Daten massenweise geladen, es erfolgt also nicht sehr viel Schreibaktivität. Es gibt jedoch ein hohes Maß an Leseaktivität, die im Laufe der Zeit variiert. Durch Überwachung der Amazon-CloudWatch-Metriken für ProductCatalog erfahren Sie, dass die Tabelle 1.200 Lesekapazitätseinheiten benötigt (um zu verhindern, dass DynamoDB Leseanforderungen drosselt, wenn die Aktivitäten Spitzenwerte erreichen). Sie stellen außerdem fest, dass ProductCatalog mindestens 150 Lesekapazitätseinheiten erfordert, wenn der Leseverkehr am niedrigsten ist. Weitere Informationen zur Vermeidung einer Drosselung finden Sie unter Beheben von Drosselungsereignissen in Amazon DynamoDB.
Angesichts der Spanne von 150 bis 1.200 Lesekapazitätseinheiten entscheiden Sie, dass eine Zielauslastung von 70 Prozent für die Tabelle ProductCatalog angemessen wäre. Die Zielauslastung ist das Verhältnis der verbrauchten Kapazitätseinheiten zu den bereitgestellten Kapazitätseinheiten in Prozent. Application Auto Scaling verwendet einen eigenen Ziel-Tracking-Algorithmus, um sicherzustellen, dass die bereitgestellte Lesekapazität von ProductCatalog wie erforderlich angepasst wird, damit die Auslastung nahezu 70 Prozent beträgt.
Anmerkung
DynamoDB Auto Scaling ändert die Einstellungen für den bereitgestellten Durchsatz nur, wenn die tatsächliche Workload über einen anhaltenden Zeitraum von mehreren Minuten erhöht oder niedrig bleibt. Der Ziel-Tracking-Algorithmus von Application Auto Scaling versucht, dafür zu sorgen, dass die Zielauslastung langfristig Ihrem gewählten Wert nahezu entspricht.
Plötzliche Aktivitätsspitzen werden von der integrierten Burst-Kapazität der Tabelle bewältigt. Weitere Informationen finden Sie unter Burst-Kapazität.
Um DynamoDB-Auto-Scaling für die Tabelle ProductCatalog zu aktivieren, erstellen Sie eine Skalierungsrichtlinie. Diese Richtlinie legt Folgendes fest:
-
Die Tabelle oder der globale sekundäre Index, die Sie verwalten möchten
-
Den Kapazitätstyp, der verwaltet werden soll (Lese- oder Schreibkapazität)
-
Die Ober- und Untergrenze für die bereitgestellten Durchsatzeinstellungen
-
Ihre Zielauslastung
Wenn Sie eine Skalierungsrichtlinie erstellen, erstellt Application Auto Scaling ein Paar Amazon-CloudWatch-Alarme in Ihrem Namen. Jedes Paar stellt die Ober- und Untergrenze für Ihren bereitgestellten Durchsatz dar. Die CloudWatch-Alarme werden ausgelöst, wenn die tatsächliche Nutzung der Tabelle während eines anhaltenden Zeitraums von Ihrer Zielauslastung abweicht.
Wenn einer der CloudWatch-Alarme ausgelöst wird, sendet Amazon SNS eine Benachrichtigung (sofern Sie diese Funktion aktiviert haben). Der CloudWatch-Alarm ruft dann Application Auto Scaling auf, der wiederum DynamoDB benachrichtigt, um die bereitgestellte Kapazität der Tabelle ProductCatalog nach oben bzw. unten anzupassen.
Während eines Skalierungsereignisses wird AWS Config pro aufgezeichnetem Konfigurationselement abgerechnet. Wenn ein Skalierungsereignis eintritt, werden vier CloudWatch-Alarme für jedes Lese- und Schreibereignis beim Auto Scaling erstellt: ProvisionedCapacity-Alarme: ProvisionedCapacityLow, ProvisionedCapacityHigh und ConsumedCapacity-Alarme: AlarmHigh, AlarmLow. Das bedeutet insgesamt acht Alarme. Daher zeichnet AWS Config acht Konfigurationselemente für jedes Skalierungsereignis auf.
Anmerkung
Sie können die DynamoDB-Skalierung auch so planen, dass sie zu bestimmten Zeiten erfolgt. Erfahren Sie hier mehr über die grundlegenden Schritte.
Nutzungshinweise
Bevor Sie DynamoDB-Auto-Scaling verwenden, beachten Sie Folgendes:
-
Bei DynamoDB-Auto-Scaling kann die Lese- bzw. Schreibkapazität in Übereinstimmung mit Ihrer Auto-Scaling-Richtlinie so oft wie nötig erhöht werden. Alle DynamoDB-Kontingente bleiben in Kraft, wie unter Kontingente in Amazon DynamoDB beschrieben.
-
DynamoDB-Auto-Scaling hindert Sie nicht daran, die Einstellungen für den bereitgestellten Durchsatz manuell zu ändern. Die manuellen Anpassungen haben keinerlei Auswirkungen auf bestehende CloudWatch-Alarme, die sich auf DynamoDB-Auto-Scaling beziehen.
-
Wenn Sie die automatische DynamoDB-Skalierung für eine Tabelle aktivieren, die über einen oder mehrere globale sekundäre Indizes verfügt, wird dringend empfohlen, die automatische Skalierung auch einheitlich auf diese Indexe anzuwenden. Dies trägt dazu bei, eine bessere Leistung beim Schreiben und Lesen von Tabellen zu gewährleisten und eine Drosselung zu vermeiden. Sie können Auto Scaling aktivieren, indem Sie Apply same settings to global secondary indexes (Die gleichen Einstellungen für globale sekundäre Indizes anwenden) in der AWS-Managementkonsole auswählen. Weitere Informationen finden Sie unter Aktivieren von DynamoDB-Auto-Scaling in bestehenden Tabellen.
-
Wenn Sie eine Tabelle oder ein globales Tabellenreplikat löschen, werden nicht automatisch zugeordnete skalierbare Ziele, Skalierungsrichtlinien oder CloudWatch-Alarme entfernt.
-
Beim Erstellen einer GSI für eine vorhandene Tabelle ist Auto Scaling für die GSI nicht aktiviert. Sie müssen die Kapazität während der Erstellung der GSI manuell verwalten. Sobald der Backfill auf der GSI abgeschlossen ist und sie den aktiven Status erreicht, funktioniert Auto Scaling wie gewohnt.