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à.
Problemi di connessione con Amazon DocumentDB
Identificazione: individua il problema
Cause comuni
I problemi di connessione derivano in genere da tre aree principali:
L'esaurimento del pool di connessioni si verifica quando un'applicazione raggiunge il numero massimo di connessioni consentite ad Amazon DocumentDB, attraverso i limiti del pool di connessioni lato client o i limiti delle istanze lato server. Questa condizione comporta un peggioramento delle prestazioni dell'applicazione, timeout e potenziali errori in quanto le nuove richieste di connessione vengono messe in coda o rifiutate.
Il sovraccarico dell'autenticazione si verifica quando Amazon DocumentDB riceve un numero eccessivo di richieste di autenticazione simultanee, in particolare quando si elaborano più di 1.000 nuove connessioni in un breve periodo di tempo. Durante la manutenzione dell'autenticazione, Amazon DocumentDB mantiene un blocco esclusivo sulla mappa delle sessioni, facendo sì che i successivi tentativi di autenticazione restino in coda fino al completamento della manutenzione.
I problemi di configurazione in Amazon DocumentDB spesso derivano da configurazioni errate nelle impostazioni di rete, sicurezza e client. Ciò include elementi quali impostazioni errate dei gruppi di sicurezza, configurazione VPC errata o problemi relativi ai certificati. SSL/TLS Comprendere la corretta configurazione è essenziale per mantenere un accesso sicuro e affidabile al database.
Diagnosi: individuazione della causa principale
Pool di connessione
Il pool di connessioni viene inizializzato durante la creazione di un' MongoClient istanza. Ogni pool mantiene le connessioni in base a due parametri chiave:
min PoolSize - Numero minimo di connessioni mantenute
max PoolSize - Numero massimo di connessioni consentite
Quando una richiesta richiede una connessione:
-
Il pool verifica le connessioni inattive disponibili
-
Se non ne esiste nessuna e la dimensione del pool è inferiore a quella massimaPoolSize, crea una nuova connessione
-
Se è al massimoPoolSize, la richiesta entra in una coda di attesa
-
Se la coda è piena o il timeout è scaduto, viene generata MongoWaitQueueFullException
Il comportamento della coda di attesa viene gestito tramite questi parametri:
wait QueueTimeout MS - Tempo massimo di attesa per la connessione
wait QueueSize - Numero massimo di richieste in coda
Ecco un esempio di approccio problematico per la connessione ad Amazon DocumentDB in cui viene creato un nuovo pool ogni volta:
for(Request request : requests) { MongoClient client = MongoClients.create(settings); // Process request client.close(); }
CloudWatch Le metriche critiche da monitorare sono:
-
DatabaseConnections- Il numero di connessioni (attive e inattive) aperte su un'istanza eseguita con una frequenza di 1 minuto. -
DatabaseConnectionsMax- Il numero massimo di connessioni al database aperte (attive e inattive) su un'istanza in un periodo di 1 minuto. -
DatabaseConnectionsLimit- Il numero massimo di connessioni simultanee al database (attive e inattive) consentite su un'istanza in un dato momento. -
LowMemNumOperationsThrottled- Il numero di richieste che vengono limitate a causa della scarsa memoria disponibile in un periodo di 1 minuto.
Per le quote per classe di istanza, vedere. Quote delle istanze
I segnali di allarme più comuni relativi ai problemi del pool di connessioni a livello di applicazione includono:
-
Aumento dei tempi di acquisizione delle connessioni
-
Aumento delle dimensioni della coda di attesa
-
Numero crescente di eccezioni di timeout
Sovraccarico di autenticazione
La connessione ad Amazon DocumentDB segue un flusso simile al seguente:
Richiesta di connessione → Handshake SSL → Autenticazione → Creazione della sessione → Connessione pronta
Quando si elaborano più di 1.000 nuove connessioni, le richieste di connessione aggiuntive entreranno in coda per l'autenticazione dopo aver completato l'handshake SSL. I tempi medi di connessione dell'applicazione aumenteranno durante questi eventi di sovraccarico.
CloudWatch Le metriche critiche da monitorare sono:
-
DatabaseConnections- Il numero di connessioni (attive e inattive) aperte su un'istanza eseguita con una frequenza di 1 minuto. -
DatabaseConnectionsMax- Il numero massimo di connessioni al database aperte (attive e inattive) su un'istanza in un periodo di 1 minuto. -
DatabaseConnectionsLimit- Il numero massimo di connessioni simultanee al database (attive e inattive) consentite su un'istanza in un dato momento.
Problemi di configurazione
Il problema di configurazione più comune si verifica quando si tenta di connettersi a un endpoint privato del cluster Amazon DocumentDB da un ambiente senza accesso all'ambiente di rete privato. Amazon DocumentDB è solo un cloud privato virtuale (VPC) e attualmente non supporta endpoint pubblici. Non puoi connetterti direttamente al tuo cluster Amazon DocumentDB dal tuo laptop o da un ambiente di sviluppo locale esterno al tuo VPC.
Ciò si manifesterà in errori come i seguenti:
Error: couldn't connect to server... Failed to connect to... exception: connect failed connection attempt failed
Anche configurazioni errate dei gruppi di sicurezza possono causare errori di connessione. Per impostazione predefinita, un cluster Amazon DocumentDB ascolta le connessioni sulla porta TCP 27017. L'applicazione fallirà se si tenta di connettersi a una porta diversa da quella con cui è stato distribuito il cluster o se l'applicazione non è coperta dalla configurazione del gruppo di sicurezza di ingresso per il cluster.
Una gestione errata dei certificati può inoltre causare problemi di connessione. Per impostazione predefinita, la crittografia in transito è abilitata per i cluster Amazon DocumentDB appena creati. Quando la crittografia in transito è abilitata, sono necessarie connessioni sicure tramite TLS per connettersi al cluster utilizzando il certificato global-bundle.pem. Se tenti di utilizzare il certificato errato, riceverai errori come:
unable to get local issuer certificate
Se tenti di connetterti a un cluster con TLS abilitato senza specificare i parametri TLS, riceverai errori come:
Server selection timed out after 30000 ms
Risolvi: risolve il problema
Pool di connessioni: rivedi il pool di connessioni implementando o regolando le dimensioni del pool in base ai requisiti del carico di lavoro. Le configurazioni ottimali del pool dipendono dal carico di lavoro e dai requisiti. È necessario mantenere un valore minimo PoolSize tale che le connessioni principali siano pronte e disponibili e un valore massimo sufficientemente WaitTime breve da fallire rapidamente se il pool è esaurito.
Ecco un esempio di come riutilizzare un singolo pool senza crearne uno nuovo ogni volta:
MongoClient client = MongoClients.create(settings); for(Request request : requests) { // Process request }
Sovraccarico dell'autenticazione: gestisci l'autenticazione implementando un aumento graduale delle connessioni e limitando le nuove connessioni a 1.000 alla volta. Usa il pool di connessioni per riutilizzare efficacemente le connessioni autenticate. Per evitare di sovraccaricare il cluster Amazon DocumentDB di connessioni, implementa una strategia di aumento delle connessioni.
public class ConnectionManager { private static final int BATCH_SIZE = 100; private static final int DELAY_MS = 1000; public void establishConnections(int totalRequired) { int established = 0; while (established < totalRequired) { int batch = Math.min(BATCH_SIZE, totalRequired - established); createConnections(batch); Thread.sleep(DELAY_MS); established += batch; } } }
Puoi anche configurare le impostazioni del pool di connessioni per limitare il numero totale di connessioni consentite.
MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> { builder.maxSize(500) // Limit total connections .minSize(10) // Maintain base connections .maxConnectionLifeTime(3600000) // Rotate connections hourly }) .applyToServerSettings(builder -> { builder.heartbeatFrequency(10000) // Regular server checks }) .build();
Problemi di configurazione: assicurati che l'applicazione abbia accesso al VPC privato e alla sottorete in cui si trovano le risorse Amazon DocumentDB. Se utilizzi VPC Peering, consulta la guida per sviluppatori Troubleshoot a VPC peering connection per ulteriori informazioni. Puoi anche consultare l'articolo del Knowledge Center Come posso risolvere i problemi di connettività da Internet alle istanze Amazon EC2 all'interno del mio VPC?
Per la configurazione del gruppo di sicurezza, devi includere una regola di ingresso nel tuo gruppo di sicurezza Amazon DocumentDB per consentire le connessioni dalla tua applicazione.
{ "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 27017, "ToPort": 27017, "SourceSecurityGroupId": "<application-security-group>", "Description": "DocumentDB access from application tier" } ], "SecurityGroupEgress": [ { "IpProtocol": "-1", "FromPort": -1, "ToPort": -1, "CidrIp": "0.0.0.0/0" } ] }
Se il cluster è configurato con crittografia TLS, scarica il certificato TLS per Amazon DocumentDB denominato global-bundle.pem e utilizzalo per la connessione al cluster.
wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
Long-term Soluzioni
La scalabilità delle istanze può essere necessaria tramite l'aggiornamento a una classe di istanze più ampia o l'aggiunta di repliche di lettura per distribuire il carico di connessione. Una corretta implementazione del bilanciamento del carico garantisce un utilizzo ottimale delle risorse in tutto il cluster.
Le modifiche alle applicazioni dovrebbero concentrarsi sull'implementazione di una solida gestione delle connessioni, un monitoraggio completo e il rispetto delle migliori pratiche di pool di connessioni. Ciò include una corretta gestione degli errori e una gestione del ciclo di vita delle connessioni.
I miglioramenti dell'architettura potrebbero comportare l'adozione di Amazon DocumentDB Serverless per carichi di lavoro variabili, l'implementazione di una sofisticata logica di riprova e la progettazione in base alla tolleranza agli errori. Prendi in considerazione la possibilità di ristrutturare l'architettura delle applicazioni per gestire meglio la gestione delle connessioni.
Best practice
Pool di connessioni
Attraverso una corretta gestione e monitoraggio dei pool di connessioni, le applicazioni possono mantenere una connettività stabile del database prevenendo scenari di esaurimento che potrebbero influire sull'affidabilità e sulle prestazioni del sistema. Configura i timeout appropriati e ridimensiona il pool in base alle caratteristiche del carico di lavoro.
Esempio di impostazione del pool di connessioni
MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> builder.maxSize(10)) .applyToConnectionPoolSettings(builder -> builder.maxWaitQueueSize(2)) .applyToConnectionPoolSettings(builder -> builder.maxConnectionIdleTime(10, TimeUnit.MINUTES)) .build();
Per ulteriori informazioni, consulta Creazione di applicazioni resilienti con Amazon DocumentDB — Parte 1: Configurazione del client.
Sovraccarico di autenticazione
Implementa sempre il pool di connessioni con valori appropriati per i parametri in base al carico di lavoro. Utilizza una tecnica di creazione graduale delle connessioni e mantieni connessioni permanenti, ove possibile. Implementa una corretta pulizia della connessione per garantire che non vengano sprecate risorse inattive.
Problemi di configurazione
Assicurati di aver configurato il routing appropriato dalla tua applicazione alle risorse Amazon DocumentDB. Utilizza TLS per la crittografia in transito e implementa l'accesso con privilegi minimi. Verifica le tue credenziali Amazon DocumentDB e convalida i valori delle stringhe di connessione.