Ottimizza le connessioni dei driver client per l'ambiente serverless - Amazon Keyspaces (per Apache Cassandra)

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Ottimizza le connessioni dei driver client per l'ambiente serverless

Per comunicare con Amazon Keyspaces, puoi utilizzare uno qualsiasi dei driver client Apache Cassandra esistenti di tua scelta. Poiché Amazon Keyspaces è un servizio serverless, ti consigliamo di ottimizzare la configurazione della connessione del driver client per le esigenze di throughput della tua applicazione. Questo argomento introduce le migliori pratiche, tra cui il calcolo del numero di connessioni richieste dall'applicazione, nonché il monitoraggio e la gestione degli errori delle connessioni.

Come funzionano le connessioni in Amazon Keyspaces

Questa sezione offre una panoramica di come funzionano le connessioni dei driver client in Amazon Keyspaces. Poiché una configurazione errata del driver client Cassandra può causare PerConnectionRequestExceeded eventi in Amazon Keyspaces, è necessario configurare la giusta quantità di connessioni nella configurazione del driver client per evitare questi e altri errori di connessione simili.

Durante la connessione ad Amazon Keyspaces, il driver richiede un endpoint seed per stabilire una connessione iniziale. Amazon Keyspaces utilizza DNS per instradare la connessione iniziale verso uno dei tanti endpoint disponibili. Gli endpoint sono collegati a sistemi di bilanciamento del carico di rete che a loro volta stabiliscono una connessione a uno dei gestori di richieste del parco macchine. Dopo aver stabilito la connessione iniziale, il driver client raccoglie informazioni su tutti gli endpoint disponibili dalla tabella. system.peers Con queste informazioni, il driver client può creare connessioni aggiuntive agli endpoint elencati. Il numero di connessioni che il driver client può creare è limitato dal numero di connessioni locali specificate nelle impostazioni del driver client. Per impostazione predefinita, la maggior parte dei driver client stabilisce una connessione per endpoint e stabilisce un pool di connessioni con Cassandra e bilancia il carico delle query su quel pool di connessioni. Sebbene sia possibile stabilire più connessioni allo stesso endpoint, tramite il sistema di bilanciamento del carico di rete queste possono essere collegate a molti gestori di richieste diversi. Quando ci si connette tramite l'endpoint pubblico, stabilendo una connessione a ciascuno dei nove endpoint elencati nella system.peers tabella si ottengono nove connessioni a diversi gestori di richieste.

Un diagramma che mostra come una connessione stabilita da un driver raggiunge prima l'endpoint del servizio Amazon Keyspaces, quindi continua verso un sistema di bilanciamento del carico e, dopo l'autenticazione e l'autorizzazione, la CQL richiesta raggiunge il livello di storage.

Come configurare le connessioni in Amazon Keyspaces

Amazon Keyspaces supporta fino a 3.000 CQL query per connessione al secondo. TCP Poiché non c'è limite al numero di connessioni che un driver può stabilire, consigliamo di indirizzare solo 500 CQL richieste al secondo per connessione per consentire sovraccarichi, picchi di traffico e un migliore bilanciamento del carico. Segui questi passaggi per assicurarti che la connessione del driver sia configurata correttamente per le esigenze dell'applicazione.

Aumenta il numero di connessioni per indirizzo IP che il driver mantiene nel suo pool di connessioni.

  • La maggior parte dei driver Cassandra stabilisce un pool di connessioni con Cassandra e bilancia il carico delle query su quel pool di connessioni. Il comportamento predefinito della maggior parte dei driver consiste nello stabilire una singola connessione a ciascun endpoint. Amazon Keyspaces espone nove indirizzi IP peer ai driver, quindi, in base al comportamento predefinito della maggior parte dei driver, si ottengono 9 connessioni. Amazon Keyspaces supporta fino a 3.000 CQL query per TCP connessione al secondo, pertanto il throughput massimo di CQL query di un driver che utilizza le impostazioni predefinite è di 27.000 query al secondo. CQL Se utilizzi le impostazioni predefinite del driver, una singola connessione potrebbe dover elaborare più del throughput massimo di 3.000 CQL query al secondo. CQL Ciò potrebbe causare eventi. PerConnectionRequestExceeded

  • Per evitare PerConnectionRequestExceeded eventi, è necessario configurare il driver in modo da creare connessioni aggiuntive per endpoint per distribuire il throughput.

  • Come best practice in Amazon Keyspaces, supponi che ogni connessione possa supportare 500 CQL query al secondo.

  • Ciò significa che per un'applicazione di produzione che deve supportare circa 27.000 CQL query al secondo distribuite sui nove endpoint disponibili, è necessario configurare sei connessioni per endpoint. Ciò garantisce che ogni connessione elabori non più di 500 richieste al secondo.

Calcola il numero di connessioni per indirizzo IP che devi configurare per il tuo driver in base alle esigenze dell'applicazione.

Per determinare il numero di connessioni da configurare per endpoint per l'applicazione, si consideri l'esempio seguente. Hai un'applicazione che deve supportare 20.000 CQL query al secondo costituite da 10.000 INSERTSELECT, 5.000 e 5.000 operazioni. DELETE L'applicazione Java è in esecuzione su tre istanze su Amazon Elastic Container Service (AmazonECS), dove ogni istanza stabilisce una singola sessione su Amazon Keyspaces. Il calcolo che puoi utilizzare per stimare quante connessioni devi configurare per il tuo driver utilizza il seguente input.

  1. Il numero di richieste al secondo che l'applicazione deve supportare.

  2. Il numero di istanze disponibili a cui viene sottratta una per tenere conto della manutenzione o dell'errore.

  3. Il numero di endpoint disponibili. Se ti connetti tramite endpoint pubblici, hai nove endpoint disponibili. Se utilizzi gli VPC endpoint, hai da due a cinque endpoint disponibili, a seconda della regione.

  4. Utilizza 500 CQL query al secondo per connessione come best practice per Amazon Keyspaces.

  5. Arrotonda il risultato.

In questo esempio, la formula ha il seguente aspetto.

20,000 CQL queries / (3 instances - 1 failure) / 9 public endpoints / 500 CQL queries per second = ROUND(2.22) = 3

In base a questo calcolo, è necessario specificare tre connessioni locali per endpoint nella configurazione del driver. Per le connessioni remote, configura solo una connessione per endpoint.

Come configurare la politica di riprova per le connessioni in Amazon Keyspaces

Quando configuri la politica di riprova per una connessione ad Amazon Keyspaces, ti consigliamo di implementare la politica di riprova di Amazon Keyspaces. AmazonKeyspacesExponentialRetryPolicy Questa politica di nuovi tentativi è più adatta a riprovare su connessioni diverse ad Amazon Keyspaces rispetto a quelle del driver. DefaultRetryPolicy

ConAmazonKeyspacesExponentialRetryPolicy, puoi configurare il numero di tentativi di nuovo tentativo per la connessione che soddisfi le tue esigenze. Per impostazione predefinita, il numero di tentativi di nuovo tentativo AmazonKeyspacesExponentialRetryPolicy è impostato su 3.

Un ulteriore vantaggio è che la politica di riprova di Amazon Keyspaces restituisce l'eccezione originale restituita dal servizio, il che indica il motivo per cui il tentativo di richiesta non è riuscito. La politica di riprova predefinita restituisce solo il messaggio genericoNoHostAvailableException, il che potrebbe nascondere informazioni sull'errore della richiesta.

Per configurare la politica di ripetizione delle richieste utilizzando ilAmazonKeyspacesExponentialRetryPolicy, si consiglia di configurare un numero limitato di tentativi e di gestire le eventuali eccezioni restituite nel codice dell'applicazione.

Per esempi di codice che implementano le politiche di ripetizione dei tentativi, consulta le politiche di riprova di Amazon Keyspaces su Github.

Come configurare le connessioni sugli VPC endpoint in Amazon Keyspaces

Quando ci si connette tramite VPC endpoint privati, molto probabilmente sono disponibili 3 endpoint. Il numero di VPC endpoint può variare per regione, in base al numero di zone di disponibilità e al numero di sottoreti assegnate. VPC La regione Stati Uniti orientali (Virginia settentrionale) ha cinque zone di disponibilità e puoi avere fino a cinque endpoint Amazon Keyspaces. La regione Stati Uniti occidentali (California settentrionale) ha due zone di disponibilità e puoi avere fino a due endpoint Amazon Keyspaces. Il numero di endpoint non influisce sulla scalabilità, ma aumenta il numero di connessioni da stabilire nella configurazione del driver. Analizza l'esempio seguente. La tua applicazione deve supportare 20.000 CQL query ed è in esecuzione su tre istanze su Amazon, ognuna delle ECS quali stabilisce una singola sessione su Amazon Keyspaces. L'unica differenza è il numero di endpoint disponibili nei diversi sistemi. Regioni AWS

Connessioni richieste nella regione Stati Uniti orientali (Virginia settentrionale):

20,000 CQL queries / (3 instances - 1 failure) / 5 private VPC endpoints / 500 CQL queries per second = 4 local connections

Connessioni richieste nella regione Stati Uniti occidentali (California settentrionale):

20,000 CQL queries / (3 instances - 1 failure) / 2 private VPC endpoints / 500 CQL queries per second = 10 local connections
Importante

Quando si utilizzano VPC endpoint privati, sono necessarie autorizzazioni aggiuntive per Amazon Keyspaces per rilevare dinamicamente gli VPC endpoint disponibili e popolare la tabella. system.peers Per ulteriori informazioni, consulta Inserimento delle voci della system.peers tabella con informazioni sugli endpoint VPC dell'interfaccia.

Quando si accede ad Amazon Keyspaces tramite un VPC endpoint privato utilizzando un altro Account AWS, è probabile che venga visualizzato un solo endpoint Amazon Keyspaces. Anche in questo caso ciò non influisce sulla portata del throughput possibile verso Amazon Keyspaces, ma potrebbe richiedere un aumento del numero di connessioni nella configurazione del driver. Questo esempio mostra lo stesso calcolo per un singolo endpoint disponibile.

20,000 CQL queries / (3 instances - 1 failure) / 1 private VPC endpoints / 500 CQL queries per second = 20 local connections

Per ulteriori informazioni sull'accesso tra account ad Amazon Keyspaces tramite un account VPC condiviso, consulta. Configura l'accesso tra account ad Amazon Keyspaces VPC utilizzando gli endpoint in un ambiente condiviso VPC

Come monitorare le connessioni in Amazon Keyspaces

Per identificare il numero di endpoint a cui è connessa l'applicazione, è possibile registrare il numero di peer rilevati nella system.peers tabella. L'esempio seguente è un esempio di codice Java che stampa il numero di peer dopo che la connessione è stata stabilita.

ResultSet result = session.execute(new SimpleStatement("SELECT * FROM system.peers")); logger.info("number of Amazon Keyspaces endpoints:" + result.all().stream().count());
Nota

La CQL console o la AWS console non vengono distribuite all'interno di un endpoint pubblico VPC e quindi utilizzano l'endpoint pubblico. Di conseguenza, l'esecuzione della system.peers query da applicazioni situate all'esterno di VPCE spesso dà come risultato 9 peer. Può anche essere utile stampare gli indirizzi IP di ciascun peer.

Puoi anche osservare il numero di peer quando usi un VPC endpoint configurando i parametri di VPCE Amazon CloudWatch . In CloudWatch, puoi vedere il numero di connessioni stabilite all'endpoint. VPC I driver Cassandra stabiliscono una connessione per ciascun endpoint per inviare CQL query e una connessione di controllo per raccogliere informazioni sulla tabella di sistema. L'immagine seguente mostra i CloudWatch parametri degli VPC endpoint dopo la connessione ad Amazon Keyspaces con 1 connessione configurata nelle impostazioni del driver. La metrica mostra sei connessioni attive costituite da una connessione di controllo e cinque connessioni (1 per endpoint nelle zone di disponibilità).

Una schermata che mostra le metriche su una dashboard di Cloudwatch per le connessioni che attraversano un endpoint. VPC Le metriche utilizzate sono e. ActiveConnections BytesProcessed

Per iniziare a monitorare il numero di connessioni utilizzando un CloudWatch grafico, puoi distribuire questo AWS CloudFormation modello disponibile GitHub nell'archivio dei modelli di Amazon Keyspaces.

Come gestire gli errori di connessione in Amazon Keyspaces

Quando si supera la quota di 3.000 richieste per connessione, Amazon Keyspaces restituisce un PerConnectionRequestExceeded evento e il driver Cassandra riceve un'eccezione or. WriteTimeout ReadTimeout Dovresti riprovare questa eccezione con un backoff esponenziale nella tua politica sui tentativi di riprova di Cassandra o nella tua applicazione. È necessario fornire un backoff esponenziale per evitare di inviare richieste aggiuntive.

La politica di riprova predefinita tenta di accedere al piano di try next host interrogazione. Poiché Amazon Keyspaces può avere da uno a tre endpoint disponibili durante la connessione all'VPCendpoint, è possibile visualizzare anche le eccezioni aggiuntive WriteTimeout e le ReadTimeout eccezioni NoHostAvailableException nei log delle applicazioni. Puoi utilizzare le politiche di riprova fornite da Amazon Keyspaces, che riprovano sullo stesso endpoint ma su connessioni diverse.

Puoi trovare esempi di politiche di ripetizione esponenziale per Java nel repository di esempi di codice GitHub Java di Amazon Keyspaces. Puoi trovare esempi di linguaggio aggiuntivi su Github nel repository degli esempi di codice di Amazon Keyspaces.