View a markdown version of this page

Problemas de conexão com o Amazon DocumentDB - Amazon DocumentDB

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Problemas de conexão com o Amazon DocumentDB

Identificação - Identifique o problema

Causas comuns

Os problemas de conexão geralmente se originam de três áreas principais:

O esgotamento do pool de conexões ocorre quando um aplicativo atinge o máximo permitido de conexões com o Amazon DocumentDB, seja por meio dos limites do pool de conexões do lado do cliente ou dos limites da instância do lado do servidor. Essa condição leva à degradação do desempenho do aplicativo, aos tempos limite e a possíveis falhas à medida que novas solicitações de conexão são enfileiradas ou rejeitadas.

A sobrecarga de autenticação ocorre quando o Amazon DocumentDB recebe solicitações de autenticação simultâneas excessivas, especialmente ao processar mais de 1.000 novas conexões em um curto período de tempo. Durante a manutenção da autenticação, o Amazon DocumentDB mantém um bloqueio exclusivo no mapa de sessões, fazendo com que as tentativas subsequentes de autenticação fiquem em fila até que a manutenção seja concluída.

Os problemas de configuração no Amazon DocumentDB geralmente resultam de configurações incorretas nas configurações de rede, segurança e cliente. Isso inclui itens como configurações incorretas do grupo de segurança, configuração incorreta da VPC SSL/TLS ou problemas com certificados. Compreender a configuração adequada é essencial para manter o acesso seguro e confiável ao banco de dados.

Diagnosticar - Encontre a causa raiz

Pools de conexão

O pool de conexões é inicializado ao criar uma MongoClient instância. Cada pool mantém conexões com base em dois parâmetros principais:

min PoolSize - Número mínimo de conexões mantidas

max PoolSize - Máximo de conexões permitidas

Quando uma solicitação precisa de uma conexão:

  1. O pool verifica as conexões ociosas disponíveis

  2. Se nenhum existir e o tamanho do pool for < máximoPoolSize, ele cria uma nova conexão

  3. Se no máximoPoolSize, a solicitação entrará em uma fila de espera

  4. Se a fila estiver cheia ou o tempo limite for atingido, ela será lançada MongoWaitQueueFullException

O comportamento da fila de espera é tratado por meio destes parâmetros:

wait QueueTimeout MS - Tempo máximo de espera para conexão

esperar QueueSize - Máximo de solicitações em fila

Aqui está um exemplo de uma abordagem problemática para se conectar ao Amazon DocumentDB, em que um novo pool é criado a cada vez:

for(Request request : requests) { MongoClient client = MongoClients.create(settings); // Process request client.close(); }

CloudWatch As métricas críticas a serem monitoradas são:

  • DatabaseConnections- O número de conexões (ativas e ociosas) abertas em uma instância obtida com uma frequência de 1 minuto.

  • DatabaseConnectionsMax- O número máximo de conexões de banco de dados abertas (ativas e ociosas) em uma instância em um período de 1 minuto.

  • DatabaseConnectionsLimit- O número máximo de conexões simultâneas de banco de dados (ativas e ociosas) permitidas em uma instância a qualquer momento.

  • LowMemNumOperationsThrottled- O número de solicitações que são limitadas devido à pouca memória disponível em um período de 1 minuto.

Consulte Cotas e limites para ver os limites por classe de instância.

Os sinais de alerta comuns de problemas no pool de conexões no nível do aplicativo incluem:

  • Aumento dos tempos de aquisição de conexão

  • Aumento do tamanho da fila de espera

  • Número crescente de exceções de tempo limite

Sobrecarga de autenticação

A conexão com o Amazon DocumentDB segue um fluxo semelhante ao abaixo:

Solicitação de conexão → SSL Handshake → Autenticação → Criação de sessão → Conexão pronta

Ao processar mais de 1.000 novas conexões, solicitações de conexão adicionais entrarão em uma fila para autenticação após concluir o handshake SSL. O tempo médio de conexão do seu aplicativo aumentará durante esses eventos de sobrecarga.

CloudWatch As métricas críticas a serem monitoradas são:

  • DatabaseConnections- O número de conexões (ativas e ociosas) abertas em uma instância obtida com uma frequência de 1 minuto.

  • DatabaseConnectionsMax- O número máximo de conexões de banco de dados abertas (ativas e ociosas) em uma instância em um período de 1 minuto.

  • DatabaseConnectionsLimit- O número máximo de conexões simultâneas de banco de dados (ativas e ociosas) permitidas em uma instância a qualquer momento.

Problemas de configuração

O problema de configuração mais comum é causado ao tentar se conectar a um endpoint privado do cluster Amazon DocumentDB a partir de um ambiente sem acesso ao ambiente de rede privada. O Amazon DocumentDB é apenas uma nuvem privada virtual (VPC) e não oferece suporte a endpoints públicos no momento. Você não pode se conectar diretamente ao seu cluster Amazon DocumentDB a partir do seu laptop ou ambiente de desenvolvimento local fora da sua VPC.

Isso se manifestará em erros como os abaixo:

Error: couldn't connect to server... Failed to connect to... exception: connect failed connection attempt failed

Configurações incorretas do grupo de segurança também podem causar falhas na conexão. Por padrão, um cluster Amazon DocumentDB escuta conexões na porta TCP 27017. Seu aplicativo falhará se tentar se conectar a uma porta diferente daquela com a qual o cluster foi implantado ou se o aplicativo não estiver coberto na configuração do grupo de segurança de entrada do cluster.

O gerenciamento incorreto de certificados também pode causar problemas de conexão. Por padrão, a criptografia em trânsito é ativada para clusters recém-criados do Amazon DocumentDB. Quando a criptografia em trânsito está habilitada, conexões seguras usando TLS são necessárias para se conectar ao cluster usando o certificado global-bundle.pem. Se você tentar usar o certificado incorreto, você receberá erros como:

unable to get local issuer certificate

Se você tentar se conectar a um cluster com o TLS ativado sem especificar os parâmetros do TLS, você receberá erros como:

Server selection timed out after 30000 ms

Resolver - Corrija o problema

Pools de conexão: revise o pool de conexões implementando ou ajustando os tamanhos do pool de acordo com os requisitos da carga de trabalho. As configurações ideais do pool dependem da carga de trabalho e dos requisitos. Você deve manter um mínimo PoolSize para que as conexões principais estejam prontas e disponíveis, e um máximo WaitTime curto o suficiente para falhar rapidamente se o pool estiver esgotado.

Aqui está um exemplo de como reutilizar um único pool sem criar um novo a cada vez:

MongoClient client = MongoClients.create(settings); for(Request request : requests) { // Process request }

Sobrecarga de autenticação: gerencie a autenticação implementando um aumento gradual da conexão e limitando novas conexões a 1.000 por vez. Use o pool de conexões para reutilizar conexões autenticadas de forma eficaz. Para evitar sobrecarregar o cluster Amazon DocumentDB com conexões, implemente uma estratégia de aumento de conexão.

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; } } }

Você também pode definir as configurações do pool de conexões para limitar o número total de conexões permitidas.

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();

Problemas de configuração: garanta que seu aplicativo tenha acesso à VPC e à sub-rede privadas em que seus recursos do Amazon DocumentDB estão localizados. Se estiver usando o emparelhamento de VPC, consulte o guia do desenvolvedor Solucionar problemas de uma conexão de emparelhamento de VPC para obter mais informações. Você também pode ler o artigo do Knowledge Center Como soluciono problemas de conectividade da Internet com instâncias do Amazon EC2 dentro da minha VPC? .

Para a configuração do grupo de segurança, você deve incluir uma regra de entrada no seu grupo de segurança do Amazon DocumentDB para permitir conexões do seu aplicativo.

{ "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 o cluster estiver configurado com criptografia TLS, baixe o certificado TLS para o Amazon Amazon DocumentDB chamado global-bundle.pem e use-o ao se conectar ao cluster.

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

Long-term Soluções

O escalonamento da instância pode ser necessário por meio da atualização para uma classe de instância maior ou da adição de réplicas de leitura para distribuir a carga da conexão. A implementação adequada do balanceamento de carga garante a utilização ideal dos recursos em todo o cluster.

As mudanças nos aplicativos devem se concentrar na implementação de gerenciamento robusto de conexões, monitoramento abrangente e adesão às melhores práticas de agrupamento de conexões. Isso inclui o tratamento adequado de erros e o gerenciamento do ciclo de vida da conexão.

As melhorias na arquitetura podem envolver a adoção do Amazon DocumentDB Serverless para cargas de trabalho variáveis, a implementação de uma lógica sofisticada de repetição e o design para tolerância a falhas. Considere reestruturar a arquitetura do aplicativo para lidar melhor com o gerenciamento de conexões.

Práticas recomendadas

Pools de conexão

Por meio do gerenciamento e monitoramento adequados do pool de conexões, os aplicativos podem manter a conectividade estável do banco de dados e, ao mesmo tempo, evitar cenários de exaustão que possam afetar a confiabilidade e o desempenho do sistema. Configure os tempos limite apropriados e dimensione seu pool com base nas características da sua carga de trabalho.

Exemplo de configuração do pool de conexões

MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> builder.maxSize(10)) .applyToConnectionPoolSettings(builder -> builder.maxWaitQueueSize(2)) .applyToConnectionPoolSettings(builder -> builder.maxConnectionIdleTime(10, TimeUnit.MINUTES)) .build();

Para obter mais informações, consulte: https://aws.amazon.com/blogs/database/building-resilient-applications-with-amazon-documentdb-with-mongodb-compatibility-part-1-client-configuration/

Sobrecarga de autenticação

Sempre implemente o pool de conexões com valores apropriados para os parâmetros com base na sua carga de trabalho. Use uma técnica de estabelecimento de conexão gradual e mantenha conexões persistentes, sempre que possível. Implemente a limpeza adequada da conexão para garantir que nenhum recurso ocioso seja desperdiçado.

Problemas de configuração

Certifique-se de ter configurado o roteamento adequado do seu aplicativo para os recursos do Amazon DocumentDB. Utilize o TLS para criptografia em trânsito e implemente o acesso com privilégios mínimos. Verifique suas credenciais do Amazon DocumentDB e valide os valores da cadeia de conexão.