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 es sich bei Amazon Keyspaces um einen serverlosen Service handelt, empfehlen wir Ihnen, die Verbindungskonfiguration Ihres Client-Treibers für die Durchsatzanforderungen Ihrer Anwendung zu optimieren. 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. Da eine Fehlkonfiguration des Cassandra-Clienttreibers 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 mit 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-Loadbalancern 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 Clienttreiber herstellen kann, ist durch die Anzahl der lokalen Verbindungen begrenzt, die in den Einstellungen des Clienttreibers angegeben ist. Standardmäßig stellen die meisten Clienttreiber 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 Request-Handlern verbunden sein. Wenn Sie eine Verbindung über den öffentlichen Endpunkt herstellen, führt der Aufbau einer Verbindung zu jedem der neun in der system.peers Tabelle aufgeführten Endpunkte zu neun Verbindungen zu unterschiedlichen Request-Handlern.

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

So konfigurieren Sie 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 und Verbindung anzuvisieren, um Overhead, Traffic-Bursts und einen besseren Lastenausgleich zu berücksichtigen. Gehen Sie wie folgt vor, um sicherzustellen, dass die Treiberverbindung 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 Treibern neun Peer-IP-Adressen zur Verfügung. Basierend auf dem Standardverhalten der meisten Treiber führt dies zu 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 mit den Standardeinstellungen 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 PerConnectionRequestExceeded Ereignisse zu vermeiden, müssen Sie den Treiber so konfigurieren, dass zusätzliche Verbindungen pro Endpunkt hergestellt werden, um den Durchsatz zu verteilen.

  • Als bewährte Methode in Amazon Keyspaces wird davon ausgegangen, dass jede Verbindung 500 CQL-Abfragen pro Sekunde unterstützen kann.

  • Das bedeutet, dass Sie für eine Produktionsanwendung, die schätzungsweise 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.

Betrachten Sie das folgende Beispiel, 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, 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.

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

  2. Die Anzahl der verfügbaren Instances, wobei eine Instanz abgezogen wird, um Wartungs- oder Ausfallzeiten zu berücksichtigen.

  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 Endpunkte zur Verfügung.

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

  5. Runden Sie das Ergebnis zusammen.

In diesem 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. Für Remoteverbindungen konfigurieren Sie nur eine Verbindung pro Endpunkt.

So konfigurieren Sie 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 einrichten 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 zu Amazon Keyspaces einrichtet. Der einzige Unterschied besteht darin, wie viele Endpunkte in den verschiedenen verfügbar sind. AWS-Regionen

In der Region USA Ost (Nord-Virginia) sind 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 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 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, ist es wahrscheinlich AWS-Konto, 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 erforderlich sein, dass Sie die Anzahl der Verbindungen in Ihrer Treiberkonfiguration erhöhen. 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 über eine gemeinsam genutzte VPC finden Sie unter. Konfigurieren Sie den kontoübergreifenden Zugriff mithilfe von VPC-Endpunkten in einer gemeinsam genutzten VPC

So überwachen Sie 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. Wenn die system.peers Abfrage von Anwendungen aus ausgeführt wird, die sich außerhalb des VPCE befinden, führt dies daher 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. In 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. Das Bild 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 allen 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 mithilfe eines CloudWatch Diagramms zu beginnen, können Sie diese AWS CloudFormation Vorlage bereitstellen, die GitHub im Amazon Keyspaces-Vorlagen-Repository verfügbar ist.

So behandeln Sie Verbindungsfehler in Amazon Keyspaces

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 OR-Ausnahme. Sie sollten diese Ausnahme mit exponentiellem Backoff in Ihrer Cassandra-Wiederholungsrichtlinie oder in Ihrer Anwendung erneut versuchen. Sie sollten einen exponentiellen Backoff angeben, um zu vermeiden, dass zusätzliche Anfragen gesendet werden.

Die standardmäßige Wiederholungsrichtlinie versucht, dies try next host im Abfrageplan zu tun. Da Amazon Keyspaces beim Herstellen einer Verbindung zum VPC-Endpunkt über ein bis drei verfügbare Endpunkte verfügen kann, werden NoHostAvailableException in Ihren Anwendungsprotokollen möglicherweise auch die ReadTimeout Ausnahmen zusätzlich zu den WriteTimeout und angezeigt. Sie können die von Amazon Keyspaces bereitgestellten Wiederholungsrichtlinien verwenden, die es auf demselben Endpunkt, aber über verschiedene Verbindungen hinweg wiederholen.

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