View a markdown version of this page

Optimieren Sie die Client-Treiberverbindungen für die serverlose Umgebung - Amazon Keyspaces (für Apache Cassandra)

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.

So funktionieren Verbindungen in Amazon Keyspaces

Dieser Abschnitt gibt einen Überblick darüber, wie Client-Treiberverbindungen in Amazon Keyspaces funktionieren. Weil eine Fehlkonfiguration des Cassandra-Client-Treibers dazu führen kann PerConnectionRequestExceeded Bei Ereignissen in Amazon Keyspaces 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 von system.peers Tabelle. 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, stellen Sie eine Verbindung zu jedem der neun Endpunkte her, die in der system.peers Die Tabelle führt zu neun Verbindungen zu verschiedenen Anforderungshandlern.

Ein Diagramm, das zeigt, wie eine von einem Treiber hergestellte Verbindung zuerst den Endpunkt des Amazon Keyspaces-Service erreicht, dann zu einem Load Balancer weitergeleitet wird und nach der Authentifizierung und Autorisierung die CQL-Anfrage die Speicherebene erreicht.

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 Targeting zu verwenden 500 CQL-Anfragen pro Sekunde pro Verbindung um Overhead, Verkehrsstaus und einen besseren Lastenausgleich 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 dazu führen PerConnectionRequestExceeded Ereignisse.

  • Um zu vermeiden PerConnectionRequestExceeded Ereignisse müssen Sie den Treiber so konfigurieren, dass er zusätzliche Verbindungen pro Endpunkt herstellt, um den Durchsatz zu verteilen.

  • Gehen Sie bei Amazon Keyspaces als bewährte Methode davon aus, dass jede Verbindung Folgendes unterstützt 500 CQL-Abfragen pro Sekunde.

  • 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.

Sehen Sie sich das folgende Beispiel an, um die Anzahl der Verbindungen zu ermitteln, die Sie pro Endpunkt für Ihre Anwendung konfigurieren müssen. Sie haben eine Anwendung, die 20.000 CQL-Abfragen pro Sekunde unterstützen muss, bestehend aus 10.000 INSERT, 5.000 SELECT, und 5.000 DELETE Operationen. 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.

  1. Die Anzahl der Anfragen pro Sekunde, die Ihre Anwendung unterstützen muss.

  2. Die Anzahl der verfügbaren Instances, wobei aufgrund von Wartungs- oder Ausfällen eine Instanz abgezogen wird.

  3. 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.

  4. Verwenden Sie als bewährte Methode für Amazon Keyspaces 500 CQL-Abfragen pro Sekunde und Verbindung.

  5. 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 dem 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 AmazonKeyspacesExponentialRetryPolicy ist auf 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 das generische Objekt zurück NoHostAvailableException, wodurch möglicherweise Einblicke in den Anforderungsfehler verborgen werden.

Um die Richtlinie für die Wiederholung von Anfragen zu konfigurieren, verwenden Sie das AmazonKeyspacesExponentialRetryPolicy, wir empfehlen, dass Sie eine kleine Anzahl von Wiederholungsversuchen konfigurieren und alle zurückgegebenen Ausnahmen in Ihrem Anwendungscode behandeln.

Codebeispiele zur Implementierung von Wiederholungsrichtlinien finden Sie unter Richtlinien für Wiederholungsversuche 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

Bei der Verwendung von privaten VPC-Endpunkten sind zusätzliche Berechtigungen erforderlich, damit Amazon Keyspaces die verfügbaren VPC-Endpunkte dynamisch ermitteln und mit Daten füllen kann system.peers Tabelle. Weitere Informationen finden Sie unter Auffüllen von system.peers Tabelleneinträgen mit VPC-Endpunktinformationen der Schnittstelle.

Beim Zugriff auf Amazon Keyspaces über einen privaten VPC-Endpunkt mit einem anderen AWS-Konto, es ist wahrscheinlich, dass Sie nur einen einzigen Amazon Keyspaces-Endpunkt sehen. 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. 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 Konsolen werden nicht innerhalb einer VPC bereitgestellt und verwenden daher den öffentlichen Endpunkt. Infolgedessen wird das Ausführen von system.peers Abfragen von Anwendungen außerhalb des VPCE führen 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 VPCE Amazon einrichten CloudWatch Metriken. In CloudWatch, Sie können die Anzahl der Verbindungen sehen, 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. Das Bild unten zeigt den VPC-Endpunkt CloudWatch Metriken 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 den Availability Zones).

Ein Screenshot, der Metriken auf einem Cloudwatch-Dashboard für Verbindungen zeigt, die über einen VPC-Endpunkt laufen. Die verwendeten Metriken sind ActiveConnections und BytesProcessed.

Um mit der Überwachung der Anzahl der Verbindungen mit einem zu beginnen CloudWatch Diagramm, Sie können das bereitstellen CloudFormation Vorlage verfügbar auf GitHub in der Amazon Keyspaces-Vorlage Repositorium.

Wie gehe ich mit Verbindungsfehlern in Amazon Keyspaces um

Wenn das Kontingent von 3.000 Anfragen pro Verbindung überschritten wird, gibt Amazon Keyspaces eine PerConnectionRequestExceededEreignis und der Cassandra-Treiber erhält eine WriteTimeout oder ReadTimeout 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 Folgendes try next host im Abfrageplan. Da Amazon Keyspaces beim Herstellen einer Verbindung zum VPC-Endpunkt ein bis drei verfügbare Endpunkte haben kann, sehen Sie möglicherweise auch NoHostAvailableException zusätzlich zu WriteTimeout und ReadTimeout Ausnahmen in Ihren Anwendungsprotokollen. Sie können die von Amazon Keyspaces bereitgestellten Wiederholungsrichtlinien verwenden, die es auf demselben Endpunkt, aber über verschiedene Verbindungen hinweg, erneut versuchen.

Beispiele für exponentielle Wiederholungsrichtlinien für Java finden Sie unter GitHub in der Java-Codebeispiele für Amazon Keyspaces Repositorium. Weitere Sprachbeispiele finden Sie auf Github im Codebeispiele für Amazon Keyspaces Repositorium.