Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Instanzspezifische Leistungs- und Ressourcenüberwachung
Die Überwachung auf Instanzebene ist entscheidend, um Verbindungsverzerrungen, Workload- und Datenverzerrungen zu verstehen und zu verstehen, wann Router oder Split-Shards hinzugefügt werden müssen, um einen höheren Durchsatz bei gleichbleibender Latenz zu erreichen.
-Übersicht
Wenn Ihre Anwendung eine Anfrage gegen ausgibt, durchläuft diese Anfrage ein ausgeklügeltes verteiltes System, bevor Ergebnisse zurückgegeben werden. Eine scheinbar einfache SELECT Anweisung kann mehrere Datenbankinstanzen betreffen, von denen jede eine unterschiedliche Rolle bei der Verarbeitung Ihrer Anfrage spielt. Das Verständnis dieser Entwicklung — und der Instanzen, die sie ermöglichen — verändert die Art und Weise, wie Sie Anwendungen entwerfen, Überwachungsdaten interpretieren und Leistungsprobleme diagnostizieren.
Dieser Leitfaden bietet tiefe technische Einblicke in die Instance-Architektur:
Unbegrenzter Architektur-Refresher, Router und Shards
Wann und wie können Sie die einzelnen Instance-Typen skalieren, um Ihre Leistungs- und Kapazitätsanforderungen zu erfüllen
Wie können Sie die Leistung auf Instanzebene überwachen, Fehler beheben und optimieren
Bewährte Methoden für das Anwendungsdesign, das die verteilte Architektur effektiv nutzt
Grundlagen der Instanzarchitektur
erreicht horizontale Skalierbarkeit durch funktionale Trennung zwischen zwei spezialisierten Instance-Typen:
Router-Instanzen stellen die Orchestrierungsebene bereit — sie akzeptieren Client-Verbindungen, analysieren Abfragen, koordinieren verteilte Operationen und aggregieren Ergebnisse. Router sind zustandslos, d. h. sie speichern keine Daten und können ohne Datenmigration hinzugefügt oder entfernt werden.
Shard-Instanzen stellen die Daten- und Rechenebene bereit — sie speichern Tabellendaten, führen Abfragen anhand lokaler Daten aus und wickeln Transaktionen ab. Shards sind statusbehaftet und besitzen jeweils eine bestimmte Teilmenge Ihrer Daten, die durch konsistentes Hashing bestimmt wird.
Diese Trennung ermöglicht es, Verbindungsverarbeitung, Abfragekoordination und Datenspeicherung unabhängig von Ihren Workload-Merkmalen zu skalieren.
Vergleich von Router und Shard
| Merkmal | Router-Instanzen | Shard-Instanzen |
|---|---|---|
| Primäre Rolle | Koordination und Verteilung von Abfragen | Datenspeicherung und Ausführung von Abfragen |
| Status | Staatenlos (keine Datenspeicherung) | Zuständig (besitzt Daten) |
| Skalierbarkeit | Sofort hinzufügen/entfernen | Erfordert einen Datenausgleich |
| Fokus auf Ressourcen | CPU für die Koordination; moderater Arbeitsspeicher | CPU für Abfragen; hoher Arbeitsspeicher für den Cache |
| Trigger für Skalierung | Hohe Verbindungsanzahl, verteilte TXN-Rate | Hoher CPU-, Datenvolumen- und Abfragedurchsatz |
Überwachung der Instance-Leistung
Für einen effektiven Betrieb ist es entscheidend, die Leistung auf Instanzebene zu verstehen. Die instanzspezifische Überwachung deckt die Verteilungsmuster auf, die sich auf die Leistung auswirken: Verbindungsverzerrungen, Workload-Verzerrungen und Datenverzerrungen.
Erkennung von Verzerrungen
Bei einer idealen Bereitstellung verteilen sich Arbeitslast und Ressourcen gleichmäßig auf die Instanzen. In der Praxis kommt es bei Anwendungen häufig zu Verzerrungen, d. h. einer ungleichmäßigen Verteilung, wodurch die Last auf bestimmte Instanzen konzentriert wird.
Es gibt drei Arten von Verzerrungen, die überwacht werden müssen:
Verbindungsverzerrung: Ungleichmäßige Verteilung der Client-Verbindungen auf die Router
Verzerrung der Arbeitslast: Ungleichmäßige Abfragelast zwischen verschiedenen Shards aufgrund von Hot-Shard-Keys
Datenverzerrung: Ungleichmäßiges Datenvolumen zwischen verschiedenen Shards aufgrund der Häufigkeit von Shard-Schlüsseln
Lastverteilung mit Database Insights
Die schnellste Methode zur Beurteilung des Zustands auf Instanzebene ist die Lastverteilungsansicht von Database Insights, die einen sofortigen Überblick darüber bietet, wie sich Active Sessions auf die Instances verteilen.
So greifen Sie auf Load Distribution zu:
Navigieren Sie zu RDS Console → Your Limitless Cluster
Wählen Sie den Tab „Performance Insights“
Klicken Sie auf den Abschnitt „Lastverteilung“
Fehlerfreies Muster: Die Last ist relativ gleichmäßig auf die Instanzen verteilt
Router weisen möglicherweise einen etwas höheren AAS als Shards auf (Koordinationsaufwand)
Die AAS-Werte der Shards, die nicht mehr als 20% voneinander abweichen, deuten auf ein ausgewogenes Verhältnis hin
Bezüglich des Musters: Signifikante Konzentration auf bestimmte Fälle
Ein Router mit > 70% der Routerlast → Verbindungsverzerrung
Ein Shard mit > 50% der Shard-Last → Arbeitslast oder Datenversatz
Große Varianz zwischen Shards → Untersuchen Sie die Verteilung der Shard-Schlüssel
CloudWatch Metriken
CloudWatch Bietet für tiefere Analysen, die über Database Insights hinausgehen, instanzspezifische Metriken, die Muster der Ressourcennutzung aufzeigen.
Die ServerlessDatabaseCapacity Metrik mit Dimension DBShardGroupInstance zeigt den ACU-Verbrauch pro Instanz und bietet so den direktesten Überblick über die Ressourcennutzung.
Wann sollte Folgendes untersucht werden:
ACU-Varianz des Routers > 30% → Verbindungsverzerrung oder gemeinsame Workload-Konzentration
ACU-Varianz der Shared > 40% → Daten- oder Workload-Verzerrung
Jede Instanz hat konstant die maximale ACU → Kapazitätsbeschränkung
Router-Überwachung und Fehlerbehebung
Bei Routern können Leistungsprobleme hauptsächlich auf zwei Ursachen zurückzuführen sein: ungleichmäßige Verbindungsverteilung und Workload-Konzentration auf mehrere Shards.
Ungleichmäßig verteilte Sitzungen
Symptom: Ein Router verarbeitet einen unverhältnismäßigen Anteil an Verbindungen
Hauptursache: DNS-Caching führt dazu, dass mehrere Verbindungsanfragen auf denselben Router-Endpunkt aufgelöst werden.
Am häufigsten bei:
Benchmarking mit Tools wie pgbench
Initialisierung des Verbindungspools (viele Verbindungen wurden schnell hergestellt)
Der Anwendungsserver wird neu gestartet
Abhilfemaßnahmen
Stellen Sie sicher, dass Sie den in der Konsole angegebenen Limitless-Endpunkt verwenden
Manuelles Balancing: Extrahieren Sie Router-Endpunkte und verbinden Sie verschiedene Anwendungen mit verschiedenen Routern
Verwenden Sie für libpq-Anwendungen die Funktion
LOADBALANCEHOSTSVerwenden Sie für JDBC-Anwendungen das Limitless Connection Plugin
Verwenden Sie einen NLB, um Sitzungen und Verteilungen zu verwalten
Shard-Überwachung und Fehlerbehebung
Bei Shards treten Leistungsprobleme auf, die hauptsächlich auf drei Ursachen zurückzuführen sind: Ressourcenengpässe, Datenverzerrungen und Workload-Verzerrungen.
Nutzung von Shard-Ressourcen
Ein Shard mit beliebten Shard-Schlüsseln wird mehr Daten und eine höhere Arbeitslast haben. Dies äußert sich in einer Ressourcenauslastung, d. h. die Instanz wird mehr verbrauchen. ACUs
Strategien zur Problembehebung:
Überprüfen Sie die Auswahl der Shard-Schlüssel erneut: Überprüfen Sie die Kardinalität und die Zugriffsmuster der Shard-Schlüssel. Ziehen Sie zur besseren Verteilung zusammengesetzte Shard-Schlüssel in Betracht.
Teilen Sie den Shard auf: Verteilen Sie die Last auf mehrere Shard-Instanzen
Wann sollten Shards aufgeteilt werden:
Ein einzelner Shard liegt konstant bei einer maximalen ACU von > 80%
Der Abfragedurchsatz ist durch die Kapazität eines einzelnen Shards begrenzt
Shard-Datenvolumen
Verwenden Sie SQL-Funktionen, um Datenmengen abzufragen:
SELECT subcluster_id, subcluster_type, pg_size_pretty(db_size) FROM rds_aurora.limitless_stat_database_size('postgres_limitless') ORDER BY 1;
So zeigen Sie Daten pro Tabelle und pro Shard an:
SELECT * FROM rds_aurora.limitless_stat_relation_sizes('public', 'table_name');
Behebung einer ungleichmäßigen Auslastung
Wenn sich die Arbeitslast oder der Datenversatz auf bestimmte Shards konzentriert, wird durch die Aufteilung der Shards die Last auf mehrere Instanzen umverteilt.
Wichtige Überlegungen:
Welche Shard-Tasten verschoben werden sollen, kann nicht gesteuert werden
Es gibt keine Möglichkeit, einen Split rückgängig zu machen, ohne einen manuellen Snapshot wiederherzustellen, der vor dem Split erstellt wurde
Alle Instanzen, einschließlich eines neuen Shards, verbrauchen im Leerlauf mindestens die ACU der Instanz
Das Aufteilen von Shards ermöglicht eine weitere Skalierung, und aufeinanderfolgende Shard-Splits sind der Weg zu höherem Durchsatz und weiterer Skalierung bei gleichzeitiger Beibehaltung einer niedrigen Latenz.
Einschränkungen
Seien Sie sich dieser betrieblichen Einschränkungen bewusst:
Einschränkungen des Routers:
Router können nicht entfernt werden — Einmal hinzugefügt, verbleiben Router im Cluster
Planen Sie das Hinzufügen von Routern sorgfältig, um unnötige Grundkosten zu vermeiden
Einschränkungen bei Shards:
Shards können nicht zusammengeführt werden — Shard-Splits sind unidirektionale Operationen
Einzige Wiederherstellungsoption: Wiederherstellung aus einem Snapshot, der vor dem Teilen erstellt wurde
Strategien zur Schadensbegrenzung:
Beginnen Sie mit der Mindestanzahl brauchbarer Instanzen
Fügen Sie die Kapazität nach Bedarf schrittweise hinzu
Machen Sie Schnappschüsse, bevor größere Topologieänderungen vorgenommen werden
Überwachen Sie die Basiskosten, wenn der Cluster wächst