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.
Optimieren Sie die Client-Treiberverbindungen für die serverlose Umgebung
Für die Kommunikation mit Amazon Keyspaces können Sie einen der vorhandenen Apache Cassandra-Client-Treiber Ihrer Wahl verwenden. Da Amazon Keyspaces ein serverloser Dienst ist, empfehlen wir Ihnen, die Verbindungskonfiguration Ihres Client-Treibers an die Durchsatzanforderungen Ihrer Anwendung anzupassen. In diesem Thema werden bewährte Methoden vorgestellt, darunter die Berechnung, wie viele Verbindungen Ihre Anwendung benötigt, sowie die Überwachung und Fehlerbehandlung von Verbindungen.
Themen
So funktionieren Verbindungen in Amazon Keyspaces
Dieser Abschnitt gibt einen Überblick darüber, wie Client-Treiberverbindungen in Amazon Keyspaces funktionieren. Da eine Fehlkonfiguration des Cassandra-Client-Treibers zu PerConnectionRequestExceeded Ereignissen in Amazon Keyspaces führen kann, ist die Konfiguration der richtigen Anzahl von Verbindungen in der Client-Treiberkonfiguration erforderlich, um diese und ähnliche Verbindungsfehler zu vermeiden.
Bei der Verbindung zu Amazon Keyspaces benötigt der Treiber einen Seed-Endpunkt, um eine erste Verbindung herzustellen. Amazon Keyspaces verwendet DNS, um die erste Verbindung zu einem der vielen verfügbaren Endpunkte weiterzuleiten. Die Endpunkte sind mit Netzwerk-Load-Balancern verbunden, die wiederum eine Verbindung zu einem der Request-Handler in der Flotte herstellen. Nachdem die erste Verbindung hergestellt wurde, sammelt der Client-Treiber Informationen über alle verfügbaren Endpunkte aus der Tabelle. system.peers Mit diesen Informationen kann der Client-Treiber zusätzliche Verbindungen zu den aufgelisteten Endpunkten herstellen. Die Anzahl der Verbindungen, die der Client-Treiber herstellen kann, ist durch die Anzahl der lokalen Verbindungen begrenzt, die in den Client-Treibereinstellungen angegeben sind. Standardmäßig stellen die meisten Client-Treiber eine Verbindung pro Endpunkt her und richten einen Verbindungspool zu Cassandra ein und verteilen Abfragen über diesen Verbindungspool. Obwohl mehrere Verbindungen zu demselben Endpunkt hergestellt werden können, können sie hinter dem Network Load Balancer mit vielen verschiedenen Anforderungshandlern verbunden sein. Wenn Sie eine Verbindung über den öffentlichen Endpunkt herstellen, führt das Herstellen einer Verbindung zu jedem der neun in der system.peers Tabelle aufgeführten Endpunkte zu neun Verbindungen zu verschiedenen Anforderungshandlern.
Wie konfiguriert man Verbindungen in Amazon Keyspaces
Amazon Keyspaces unterstützt bis zu 3.000 CQL-Abfragen pro TCP-Verbindung pro Sekunde. Da die Anzahl der Verbindungen, die ein Treiber herstellen kann, unbegrenzt ist, empfehlen wir, nur 500 CQL-Anfragen pro Sekunde pro Verbindung anzustreben, um Overhead, Datenverkehrsspitzen und einen besseren Lastausgleich zu berücksichtigen. Gehen Sie wie folgt vor, um sicherzustellen, dass die Verbindung Ihres Treibers korrekt für die Anforderungen Ihrer Anwendung konfiguriert ist.
Erhöhen Sie die Anzahl der Verbindungen pro IP-Adresse, die Ihr Treiber in seinem Verbindungspool verwaltet.
-
Die meisten Cassandra-Treiber richten einen Verbindungspool zu Cassandra ein und verteilen Abfragen über diesen Verbindungspool. Das Standardverhalten der meisten Treiber besteht darin, eine einzige Verbindung zu jedem Endpunkt herzustellen. Amazon Keyspaces stellt den Treibern neun Peer-IP-Adressen zur Verfügung. Basierend auf dem Standardverhalten der meisten Treiber ergibt dies also 9 Verbindungen. Amazon Keyspaces unterstützt bis zu 3.000 CQL-Abfragen pro TCP-Verbindung pro Sekunde. Daher beträgt der maximale CQL-Abfragedurchsatz eines Treibers, der die Standardeinstellungen verwendet, 27.000 CQL-Abfragen pro Sekunde. Wenn Sie die Standardeinstellungen des Treibers verwenden, muss eine einzelne Verbindung möglicherweise mehr als den maximalen CQL-Abfragedurchsatz von 3.000 CQL-Abfragen pro Sekunde verarbeiten. Dies könnte zu Ereignissen führen.
PerConnectionRequestExceeded Um
PerConnectionRequestExceededEreignisse zu vermeiden, müssen Sie den Treiber so konfigurieren, dass er zusätzliche Verbindungen pro Endpunkt herstellt, um den Durchsatz zu verteilen.Gehen Sie als bewährte Methode in Amazon Keyspaces davon aus, dass jede Verbindung 500 CQL-Abfragen pro Sekunde unterstützen kann.
Das bedeutet, dass Sie für eine Produktionsanwendung, die geschätzte 27.000 CQL-Abfragen pro Sekunde, verteilt auf die neun verfügbaren Endpunkte, unterstützen muss, sechs Verbindungen pro Endpunkt konfigurieren müssen. Dadurch wird sichergestellt, dass jede Verbindung nicht mehr als 500 Anfragen pro Sekunde verarbeitet.
Berechnen Sie die Anzahl der Verbindungen pro IP-Adresse, die Sie für Ihren Treiber konfigurieren müssen, basierend auf den Anforderungen Ihrer Anwendung.
Um die Anzahl der Verbindungen zu ermitteln, die Sie pro Endpunkt für Ihre Anwendung konfigurieren müssen, betrachten Sie das folgende Beispiel. Sie haben eine Anwendung, die 20.000 CQL-Abfragen pro Sekunde unterstützen muss, die aus 10.000 INSERTSELECT, 5.000 und 5.000 DELETE Vorgängen bestehen. Die Java-Anwendung wird auf drei Instances auf Amazon Elastic Container Service (Amazon ECS) ausgeführt, wobei jede Instance eine einzelne Sitzung mit Amazon Keyspaces einrichtet. Die Berechnung, mit der Sie abschätzen können, wie viele Verbindungen Sie für Ihren Treiber konfigurieren müssen, verwendet die folgende Eingabe.
Die Anzahl der Anfragen pro Sekunde, die Ihre Anwendung unterstützen muss.
Die Anzahl der verfügbaren Instances, wobei aufgrund von Wartungs- oder Ausfällen eine Instanz abgezogen wird.
Die Anzahl der verfügbaren Endpunkte. Wenn Sie eine Verbindung über öffentliche Endpunkte herstellen, stehen Ihnen neun Endpunkte zur Verfügung. Wenn Sie VPC-Endpunkte verwenden, stehen Ihnen je nach Region zwischen zwei und fünf Endpoints zur Verfügung.
Verwenden Sie als bewährte Methode für Amazon Keyspaces 500 CQL-Abfragen pro Sekunde und Verbindung.
Runden Sie das Ergebnis auf.
Für dieses Beispiel sieht die Formel so aus.
20,000 CQL queries / (3 instances - 1 failure) / 9 public endpoints / 500 CQL queries per second = ROUND(2.22) = 3
Basierend auf dieser Berechnung müssen Sie in der Treiberkonfiguration drei lokale Verbindungen pro Endpunkt angeben. Konfigurieren Sie für Remoteverbindungen nur eine Verbindung pro Endpunkt.
Wie konfiguriere ich die Wiederholungsrichtlinie für Verbindungen in Amazon Keyspaces
Bei der Konfiguration der Wiederholungsrichtlinie für eine Verbindung zu Amazon Keyspaces empfehlen wir Ihnen, die Amazon Keyspaces-Wiederholungsrichtlinie zu implementieren. AmazonKeyspacesExponentialRetryPolicy Diese Wiederholungsrichtlinie eignet sich besser für Wiederholungsversuche über andere Verbindungen zu Amazon Keyspaces als die des Treibers. DefaultRetryPolicy
Mit der AmazonKeyspacesExponentialRetryPolicy können Sie die Anzahl der Wiederholungsversuche für die Verbindung konfigurieren, die Ihren Anforderungen entspricht. Standardmäßig ist die Anzahl der Wiederholungsversuche für den auf AmazonKeyspacesExponentialRetryPolicy 3 festgelegt.
Ein weiterer Vorteil besteht darin, dass die Amazon Keyspaces-Wiederholungsrichtlinie die ursprüngliche vom Service zurückgegebene Ausnahme zurückgibt, die angibt, warum der Anforderungsversuch fehlgeschlagen ist. Die standardmäßige Wiederholungsrichtlinie gibt nur die generische Version zurückNoHostAvailableException, wodurch möglicherweise Erkenntnisse über den Fehler der Anfrage verborgen bleiben.
Um die Richtlinie zur Wiederholung von Anfragen mithilfe von zu konfigurierenAmazonKeyspacesExponentialRetryPolicy, empfehlen wir Ihnen, eine kleine Anzahl von Wiederholungsversuchen zu konfigurieren und alle zurückgegebenen Ausnahmen in Ihrem Anwendungscode zu behandeln.
Codebeispiele zur Implementierung von Wiederholungsrichtlinien finden Sie in den Wiederholungsrichtlinien von Amazon Keyspaces auf Github.
Wie konfiguriert man Verbindungen über VPC-Endpunkte in Amazon Keyspaces
Wenn Sie eine Verbindung über private VPC-Endpunkte herstellen, stehen Ihnen höchstwahrscheinlich 3 Endpunkte zur Verfügung. Die Anzahl der VPC-Endpunkte kann je nach Region unterschiedlich sein, basierend auf der Anzahl der Availability Zones und der Anzahl der Subnetze in der zugewiesenen VPC. Die Region USA Ost (Nord-Virginia) hat fünf Availability Zones und Sie können bis zu fünf Amazon Keyspaces-Endpunkte haben. Die Region USA West (Nordkalifornien) hat zwei Availability Zones und Sie können bis zu zwei Amazon Keyspaces-Endpunkte haben. Die Anzahl der Endpunkte hat keinen Einfluss auf die Skalierung, erhöht jedoch die Anzahl der Verbindungen, die Sie in der Treiberkonfiguration herstellen müssen. Betrachten Sie das folgende Beispiel. Ihre Anwendung muss 20.000 CQL-Abfragen unterstützen und wird auf drei Instances auf Amazon ECS ausgeführt, wobei jede Instance eine einzelne Sitzung mit Amazon Keyspaces einrichtet. Der einzige Unterschied besteht darin, wie viele Endpunkte in den verschiedenen Geräten verfügbar sind. AWS-Regionen
In der Region USA Ost (Nord-Virginia) sind folgende Verbindungen erforderlich:
20,000 CQL queries / (3 instances - 1 failure) / 5 private VPC endpoints / 500 CQL queries per second = 4 local connections
In der Region USA West (Nordkalifornien) sind folgende Verbindungen erforderlich:
20,000 CQL queries / (3 instances - 1 failure) / 2 private VPC endpoints / 500 CQL queries per second = 10 local connections
Wichtig
Wenn Sie private VPC-Endpunkte verwenden, sind zusätzliche Berechtigungen erforderlich, damit Amazon Keyspaces die verfügbaren VPC-Endpunkte dynamisch ermitteln und die Tabelle auffüllen kann. system.peers Weitere Informationen finden Sie unter Auffüllen von system.peers Tabelleneinträgen mit VPC-Endpunktinformationen der Schnittstelle.
Wenn Sie über einen privaten VPC-Endpunkt mit einem anderen auf Amazon Keyspaces zugreifen AWS-Konto, sehen Sie wahrscheinlich nur einen einzigen Amazon Keyspaces-Endpunkt. Auch dies hat keinen Einfluss auf den Umfang des möglichen Durchsatzes zu Amazon Keyspaces, aber es kann sein, dass Sie die Anzahl der Verbindungen in Ihrer Treiberkonfiguration erhöhen müssen. Dieses Beispiel zeigt dieselbe Berechnung für einen einzelnen verfügbaren Endpunkt.
20,000 CQL queries / (3 instances - 1 failure) / 1 private VPC endpoints / 500 CQL queries per second = 20 local connections
Weitere Informationen zum kontoübergreifenden Zugriff auf Amazon Keyspaces mithilfe einer gemeinsam genutzten VPC finden Sie unter. Konfigurieren Sie den kontoübergreifenden Zugriff auf Amazon Keyspaces mithilfe von VPC-Endpunkten in einer gemeinsam genutzten VPC
Wie überwacht man Verbindungen in Amazon Keyspaces
Um die Anzahl der Endpunkte zu ermitteln, mit denen Ihre Anwendung verbunden ist, können Sie die Anzahl der erkannten Peers in der system.peers Tabelle protokollieren. Das folgende Beispiel ist ein Beispiel für Java-Code, der die Anzahl der Peers ausgibt, nachdem die Verbindung hergestellt wurde.
ResultSet result = session.execute(new SimpleStatement("SELECT * FROM system.peers")); logger.info("number of Amazon Keyspaces endpoints:" + result.all().stream().count());
Anmerkung
Die CQL-Konsole oder AWS -Konsole werden nicht in einer VPC bereitgestellt und verwenden daher den öffentlichen Endpunkt. Daher führt die Ausführung der system.peers Abfrage von Anwendungen außerhalb des VPCE häufig zu 9 Peers. Es kann auch hilfreich sein, die IP-Adressen der einzelnen Peers auszudrucken.
Sie können auch die Anzahl der Peers beobachten, wenn Sie einen VPC-Endpunkt verwenden, indem Sie CloudWatch VPCE-Amazon-Metriken einrichten. Unter können Sie die Anzahl der Verbindungen sehen CloudWatch, die zum VPC-Endpunkt hergestellt wurden. Die Cassandra-Treiber stellen für jeden Endpunkt eine Verbindung her, um CQL-Abfragen zu senden, und eine Kontrollverbindung, um Systemtabelleninformationen zu sammeln. Die Abbildung unten zeigt die CloudWatch VPC-Endpunktmetriken nach dem Herstellen einer Verbindung zu Amazon Keyspaces mit einer in den Treibereinstellungen konfigurierten Verbindung. Die Metrik zeigt sechs aktive Verbindungen, bestehend aus einer Kontrollverbindung und fünf Verbindungen (eine pro Endpunkt in Availability Zones).
Um mit der Überwachung der Anzahl der Verbindungen mithilfe eines CloudWatch Diagramms zu beginnen, können Sie diese CloudFormation Vorlage bereitstellen, die GitHub im Amazon
Wie gehe ich mit Verbindungsfehlern in Amazon Keyspaces um
Wenn das Kontingent von 3.000 Anfragen pro Verbindung überschritten wird, gibt Amazon Keyspaces ein PerConnectionRequestExceeded Ereignis zurück und der Cassandra-Treiber erhält eine WriteTimeout ReadTimeout ODER-Ausnahme. Sie sollten diese Ausnahme mit exponentiellem Backoff in Ihrer Cassandra-Wiederholungsrichtlinie oder in Ihrer Anwendung wiederholen. Sie sollten einen exponentiellen Backoff angeben, um zu vermeiden, dass zusätzliche Anfragen gesendet werden.
Die Standardrichtlinie für Wiederholungsversuche versucht, dies try next host im Abfrageplan zu tun. Da Amazon Keyspaces beim Herstellen einer Verbindung zum VPC-Endpunkt möglicherweise über ein bis drei verfügbare Endpunkte verfügen, können Sie NoHostAvailableException in Ihren Anwendungsprotokollen auch die zusätzlichen ReadTimeout Ausnahmen WriteTimeout und die Ausnahmen sehen. Sie können die von Amazon Keyspaces bereitgestellten Wiederholungsrichtlinien verwenden, die auf demselben Endpunkt, aber über verschiedene Verbindungen hinweg, erneut versuchen.
Beispiele für exponentielle Wiederholungsrichtlinien für Java finden Sie GitHub im Amazon Keyspaces-Repository für Java-Codebeispiele.