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 consentito ad Amazon DocumentDB, tramite i limiti del pool di connessioni lato client o i limiti delle istanze lato server. Questa condizione porta a un peggioramento delle prestazioni dell'applicazione, a timeout e a potenziali errori quando le nuove richieste di connessione vengono messe in coda o rifiutate.
Il sovraccarico di autenticazione si verifica quando Amazon DocumentDB riceve richieste di autenticazione simultanee eccessive, in particolare quando elabora 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 come impostazioni errate dei gruppi di sicurezza, configurazione VPC non corretta SSL/TLS o problemi relativi ai certificati. Comprendere la corretta configurazione è essenziale per mantenere un accesso sicuro e affidabile al database.
Diagnosi: individua la causa principale
Pool di connessione
Il pool di connessioni si inizializza 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 è < maxPoolSize, crea una nuova connessione
-
Se è al massimoPoolSize, la richiesta entra in una coda di attesa
-
Se la coda è piena o viene raggiunto il timeout, 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 ogni volta viene creato un nuovo pool:
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 acquisita 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.
Vedi Quote e limiti per i limiti per classe di istanza.
I segnali di allarme più comuni relativi ai problemi relativi al 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 al timeout
Sovraccarico di autenticazione
La connessione ad Amazon DocumentDB segue un flusso simile al seguente:
Richiesta di connessione → Handshake SSL → Autenticazione → Creazione sessione → Connessione pronta
Durante l'elaborazione di oltre 1.000 nuove connessioni, le richieste di connessione aggiuntive entreranno in una coda per l'autenticazione dopo aver completato l'handshake SSL. I tempi medi di connessione dall'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 acquisita 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 è disponibile solo su cloud privato virtuale (VPC) e attualmente non supporta endpoint pubblici. Non puoi connetterti direttamente al tuo cluster Amazon DocumentDB dal tuo laptop o ambiente di sviluppo locale al di fuori del 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
Le configurazioni errate dei gruppi di sicurezza possono anche causare errori di connessione. Per impostazione predefinita, un cluster Amazon DocumentDB ascolta le connessioni sulla porta TCP 27017. L'applicazione fallirà se tenta di connettersi a una porta diversa da quella con cui è stato distribuito il cluster o se l'applicazione non è inclusa nella configurazione del gruppo di sicurezza in ingresso per il cluster.
Una gestione errata dei certificati può anche 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: risolvi il problema
Pool di connessioni: rivedi il pool di connessioni implementando o modificando le dimensioni del pool in base ai requisiti del carico di lavoro. Le configurazioni ottimali dei pool dipendono dal carico di lavoro e dai requisiti. È necessario mantenere un minimo in PoolSize modo 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 di autenticazione: gestisci l'autenticazione implementando un aumento graduale delle connessioni e limitando le nuove connessioni a 1.000 alla volta. Utilizza il pool di connessioni per riutilizzare efficacemente le connessioni autenticate. Per evitare di sovraccaricare il cluster Amazon DocumentDB di connessioni, implementa una strategia di potenziamento della connessione.
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 di Amazon DocumentDB. Se utilizzi il peering VPC, consulta la guida per sviluppatori Risoluzione dei problemi di una connessione peering VPC 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
Per la configurazione del gruppo di sicurezza, è necessario includere una regola di ingresso nel gruppo di sicurezza Amazon DocumentDB per consentire le connessioni dall'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 la 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 mediante 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 l'utilizzo ottimale delle risorse in tutto il cluster.
Le modifiche alle applicazioni devono concentrarsi sull'implementazione di una solida gestione delle connessioni, sul monitoraggio completo e sul rispetto delle migliori pratiche di pool di connessioni. Ciò include la corretta gestione degli errori e la gestione del ciclo di vita della connessione.
I miglioramenti dell'architettura potrebbero comportare l'adozione di Amazon DocumentDB Serverless per carichi di lavoro variabili, l'implementazione di una sofisticata logica di ripetizione e la progettazione per la tolleranza agli errori. Prendi in considerazione la possibilità di ristrutturare l'architettura dell'applicazione 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, evitando al contempo 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, vedere: https://aws.amazon.com/blogs/database/building-resilient-applications-with-amazon-documentdb-with-mongodb-compatibility-part-1-client-configuration/
Sovraccarico di autenticazione
Implementa sempre il pool di connessioni con valori appropriati per i parametri in base al carico di lavoro. Utilizzate una tecnica di creazione graduale delle connessioni e mantenete connessioni persistenti, 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 dall'applicazione alle risorse di Amazon DocumentDB. Utilizza TLS per la crittografia in transito e implementa l'accesso con privilegi minimi. Verifica le credenziali di Amazon DocumentDB e convalida i valori delle stringhe di connessione.