Conceitos e terminologia do RDS Proxy - Amazon Relational Database Service

Conceitos e terminologia do RDS Proxy

É possível simplificar o gerenciamento das conexões das instâncias de banco de dados do Amazon RDS e de clusters de bancos de dados Amazon Aurora usando o RDS Proxy.

O proxy do RDS lida com o tráfego de rede entre o aplicativo cliente e o banco de dados. Ele faz isso de uma maneira ativa primeiro, entendendo o protocolo de banco de dados. Depois, ele ajusta seu comportamento com base nas operações SQL do aplicativo e nos conjuntos de resultados do banco de dados.

O proxy do RDS reduz a sobrecarga de memória e de CPU para gerenciamento de conexão no banco de dados. O banco de dados precisa de menos memória e recursos de CPU quando os aplicativos abrem muitas conexões simultâneas. Ele também não requer lógica em seus aplicativos para fechar e reabrir conexões que permanecem ociosas por um longo período. Da mesma forma, ele requer menos lógica nos aplicativos para restabelecer conexões em caso de um problema de banco de dados.

A infraestrutura do proxy do RDS é altamente disponível e implantada em várias zonas de disponibilidade (AZs). A computação, a memória e o armazenamento do proxy do RDS são independentes das instâncias de banco de dados do RDS e dos clusters de bancos de dados Aurora. Essa separação ajuda a reduzir a sobrecarga em seus servidores de banco de dados, para que eles possam dedicar seus recursos para atender às workloads do banco de dados. Os recursos de computação do proxy do RDS não têm servidor, realizando a escalabilidade automática com base na workload do banco de dados.

Visão geral dos conceitos do RDS Proxy

O proxy do RDS lida com a infraestrutura para executar o agrupamento de conexões e os outros recursos descritos nas seções a seguir. Os proxies estão representados no console do RDS na página Proxies.

Cada proxy lida com conexões a uma única instância de banco de dados do RDS ou cluster de bancos de dados Aurora. O proxy determina automaticamente a instância de gravador atual para as instâncias de banco de dados Multi-AZ do RDS e para os clusters provisionados do Aurora. Para clusters de vários mestres do Aurora, o proxy se conecta a uma das instâncias de gravador e usa as outras instâncias de gravador como destinos de standby a quente.

As conexões que um proxy mantém abertas e disponíveis para a sua aplicação de banco de dados usar compõem o grupo de conexões.

Por padrão, o proxy do RDS pode reutilizar uma conexão após cada transação em sua sessão. Essa reutilização em nível de transação é chamada de multiplexação. Quando o proxy do RDS remove temporariamente uma conexão do grupo de conexões para reutilizá-la, essa operação é chamada de empréstimo da conexão. Quando é seguro fazer isso, o proxy do RDS retorna essa conexão ao grupo de conexões.

Em alguns casos, o proxy do RDS não consegue ter certeza de que é seguro reutilizar uma conexão de banco de dados fora da sessão atual. Nesses casos, ele mantém a sessão na mesma conexão até que a sessão termine. Esse comportamento de fallback é chamado de fixação.

Um proxy tem um endpoint padrão. Você se conecta a esse endpoint ao trabalhar com uma instância de banco de dados do RDS ou com um cluster de bancos de dados Aurora, em vez de se conectar com o endpoint de leitura/gravação que se conecta diretamente à instância ou ao cluster. Os endpoints de finalidade especial de um cluster do Aurora permanecem disponíveis para uso. Para clusters de bancos de dados Aurora, você também pode criar endpoints adicionais de leitura/gravação e somente leitura. Para obter mais informações, consulte Visão geral dos endpoints de proxy.

Por exemplo, você ainda pode se conectar ao endpoint do cluster para conexões de leitura/gravação sem agrupamento de conexões. Você ainda pode se conectar ao endpoint de leitor para conexões somente leitura com balanceamento de carga. Você ainda pode se conectar aos endpoints da instância para diagnóstico e solução de problemas de instâncias de banco de dados específicas em um cluster do Aurora. Se estiver usando outros serviços da AWS, como o AWS Lambda para se conectar a bancos de dados do RDS, altere suas configurações de conexão para usar o endpoint do proxy. Por exemplo, você especifica o endpoint do proxy para permitir que as funções do Lambda acessem seu banco de dados enquanto aproveita a funcionalidade do RDS Proxy.

Cada proxy contém um grupo de destino. Esse grupo de destino incorpora a instância de banco de dados do RDS ou o cluster de bancos de dados Aurora ao qual o proxy pode se conectar. Para um cluster do Aurora, por padrão, o grupo de destino é associado a todas as instâncias de banco de dados nesse cluster. Dessa forma, o proxy pode se conectar a qualquer instância de bancos de dados Aurora promovida para ser a instância de gravação no cluster. A instância de banco de dados do RDS associada a um proxy, ou o cluster de bancos de dados Aurora e suas instâncias, são chamadas de destinos desse proxy. Por conveniência, quando você cria um proxy pelo console, o proxy do RDS também cria o grupo de destino correspondente e registra os destinos associados automaticamente.

Uma família de mecanismos é um conjunto relacionado de mecanismos de banco de dados que usam o mesmo protocolo de banco de dados. Escolha a família de mecanismos para cada proxy criado.

Agrupamento de conexões

Cada proxy executa o agrupamento de conexões para a instância de gravação de seu banco de dados do RDS ou do Aurora associado. O agrupamento de conexões é uma otimização que reduz a sobrecarga associada à abertura e ao fechamento de conexões e à manutenção de muitas conexões abertas simultaneamente. Essa sobrecarga inclui a memória necessária para lidar com cada nova conexão. Isso também envolve sobrecarga de CPU para fechar cada conexão e abrir uma nova, como handshaking TLS/SSL (Transport Layer Security/Secure Sockets Layer), autenticação, recursos de negociação e assim por diante. O agrupamento de conexões simplifica a lógica do aplicativo. Você não precisa escrever código de aplicativo para minimizar o número de conexões abertas simultâneas.

Cada proxy também executa a multiplexação de conexões, também conhecida como reutilização de conexões. Com a multiplexação, o proxy do RDS executa todas as operações para uma transação usando uma conexão de banco de dados subjacente e pode usar uma conexão diferente para a próxima transação. Você pode abrir muitas conexões simultâneas com o proxy, e o proxy mantém um número menor de conexões abertas com a instância ou o cluster de banco de dados. Isso minimiza ainda mais a sobrecarga na memória de conexões no servidor de banco de dados. Essa técnica também reduz a possibilidade de erros de “excesso de conexões”.

Segurança do RDS Proxy

O proxy do RDS usa os mecanismos de segurança do RDS existentes, como TLS/SSL e o AWS Identity and Access Management (IAM). Para obter informações gerais sobre esses recursos de segurança, consulte Segurança em Amazon RDS. Se você não estiver familiarizado com a forma como o RDS e o Aurora trabalham com autenticação, autorização e outras áreas de segurança, familiarize-se com a maneira como o RDS e o Aurora trabalham com essas áreas primeiro.

O proxy do RDS pode atuar como uma camada adicional de segurança entre aplicativos cliente e o banco de dados subjacente. Por exemplo, você pode se conectar ao proxy usando o TLS 1.2, mesmo que a instância de banco de dados subjacente ofereça suporte somente ao TLS 1.0 ou 1.1. Você pode se conectar ao proxy usando uma função do IAM, mesmo que o proxy se conecte ao banco de dados usando o método de autenticação nativa de usuário e senha. Usando essa técnica, você pode aplicar requisitos de autenticação fortes para aplicativos de banco de dados sem um esforço de migração dispendioso para as próprias instâncias de banco de dados.

Armazene as credenciais de banco de dados usadas pelo proxy do RDS no AWS Secrets Manager. Cada usuário de banco de dados da instância de banco de dados do RDS ou do cluster de bancos de dados Aurora acessado por um proxy deve ter um segredo correspondente no Secrets Manager. Também é possível configurar a autenticação do IAM para os usuários do RDS Proxy. Ao fazer isso, é possível aplicar a autenticação do IAM para acesso ao banco de dados mesmo que os bancos de dados usem autenticação nativa de senha. Recomendamos usar esses recursos de segurança em vez de incorporar credenciais de banco de dados no código do aplicativo.

Usar TLS/SSL com o RDS Proxy

Você pode se conectar ao proxy do RDS usando o protocolo TLS/SSL.

nota

O proxy do Amazon RDS usa certificados do AWS Certificate Manager (ACM). Se você usar o RDS Proxy, ao mudar o certificado TLS/SSL, não será necessário atualizar os aplicativos que usam conexões do RDS Proxy.

Para aplicar o TLS a todas as conexões entre o proxy e o banco de dados, é possível especificar uma configuração Exigir Transport Layer Security ao criar ou modificar um proxy.

O proxy do RDS também pode garantir que a sessão use TLS/SSL entre o cliente e o endpoint do RDS Proxy. Para que o proxy do RDS faça isso, especifique o requisito no lado do cliente. As variáveis de sessão SSL não são definidas para conexões SSL a um banco de dados usando o RDS Proxy.

  • Para o RDS for MySQL e Aurora MySQL, especifique o requisito no lado do cliente com o parâmetro --ssl-mode ao executar o comando mysql.

  • Para o PostgreSQL do Amazon RDS e o Aurora PostgreSQL, especifique sslmode=require como parte da string conninfo ao executar o comando psql.

O proxy do RDS é compatível com o protocolo TLS versão 1.0, 1.1 e 1.2. É possível se conectar ao proxy usando uma versão mais recente do TLS do que a usada no banco de dados subjacente.

Por padrão, os programas cliente estabelecem uma conexão criptografada com o RDS Proxy, com controle adicional disponível por meio da opção --ssl-mode. No lado do cliente, o proxy do RDS oferece suporte a todos os modos SSL.

Para o cliente, os modos SSL são os seguintes:

PREFERRED

O SSL é a primeira opção, mas não é obrigatória.

DISABLED

Nenhum SSL é permitido.

REQUIRED

Impor SSL.

VERIFY_CA

Impor SSL e verificar a autoridade de certificação (CA - certificate authority).

VERIFY_IDENTITY

Impor SSL e verificar a CA, além do nome de host da CA.

nota

Você pode usar o modo SSL VERIFY_IDENTITY ao se conectar ao endpoint de proxy padrão. Não é possível usar esse modo SSL quando se conecta aos limites de proxy criados por você.

Ao usar um cliente com --ssl-mode VERIFY_CA ou VERIFY_IDENTITY, especifique a opção --ssl-ca apontando para uma CA em formato .pem. Para o arquivo .pem a ser usado, baixe todos os PEMs de CA raiz de Amazon Trust Services e coloque-os em um único arquivo .pem.

O proxy do RDS usa certificados curinga, que se aplicam a um domínio e a seus subdomínios. No momento, se você usa o cliente mysql para se conectar ao modo SSL VERIFY_IDENTITY, é necessário usar o comando mysql compatível com MySQL 8.0.

Failover

O failover é um recurso de alta disponibilidade que substitui uma instância de banco de dados por outra quando a instância original fica indisponível. Um failover pode ocorrer devido a um problema com uma instância de banco de dados. Ele também pode fazer parte de procedimentos normais de manutenção, como durante uma atualização de banco de dados. O failover se aplica a instâncias de banco de dados do RDS em uma configuração Multi-AZ e a clusters de bancos de dados Aurora com uma ou mais instâncias de leitor além da instância de gravador.

A conexão por meio de um proxy torna seu aplicativo mais resiliente a failovers de banco de dados. Quando a instância de banco de dados original se torna indisponível, o proxy do RDS conecta-se ao banco de dados em espera sem eliminar as conexões de aplicativos ociosos. Isso ajuda a acelerar e simplificar o processo de failover. O resultado é um failover mais rápido que causa menos interrupções em seu aplicativo do que uma reinicialização típica ou problema de banco de dados.

Sem o RDS Proxy, um failover envolve uma breve interrupção. Durante a interrupção, você não pode executar operações de gravação nesse banco de dados. Todas as conexões de banco de dados existentes são interrompidas e seu aplicativo precisa reabri-las. O banco de dados se torna disponível para novas conexões e operações de gravação quando uma instância de banco de dados somente leitura é promovida para substituir a que não está disponível.

Durante os failovers de banco de dados, o proxy do RDS continua aceitando conexões no mesmo endereço IP e direciona conexões automaticamente para a nova instância de banco de dados primária. Os clientes que se conectam pelo proxy do RDS não são suscetíveis ao seguinte:

  • Atrasos de propagação do Domain Name System (DNS) no failover.

  • Cache DNS local.

  • Tempos limite de conexão.

  • Incerteza sobre qual instância de banco de dados é o gravador atual.

  • Espera pela resposta de uma consulta de um gravador anterior que ficou indisponível sem fechar conexões.

Para aplicativos que mantêm seu próprio grupo de conexões, passar pelo proxy do RDS significa que a maioria das conexões permanecem ativas durante failovers ou outras interrupções. Somente conexões que estão no meio de uma transação ou de uma instrução SQL são canceladas. O proxy do RDS aceita novas conexões imediatamente. Quando o gravador do banco de dados não estiver disponível, o proxy do RDS coloca as solicitações de entrada em fila.

Para aplicativos que não mantêm seus próprios grupos de conexão, o proxy do RDS oferece taxas de conexão mais rápidas e conexões mais abertas. Ele descarrega a sobrecarga cara de reconexões frequentes do banco de dados. E faz isso reutilizando as conexões de banco de dados mantidas no grupo de conexões do RDS Proxy. Essa abordagem é particularmente importante para conexões TLS, em que os custos da configuração são significativos.

Transações

Todas as instruções dentro de uma única transação sempre usam a mesma conexão ao banco de dados subjacente. A conexão se torna disponível para uso de outra sessão quando a transação termina. O uso da transação como a unidade de granularidade tem as seguintes consequências:

  • A reutilização da conexão pode ocorrer após cada instrução individual, quando a configuração autocommit do RDS for MySQL ou do Aurora MySQL estiver habilitada.

  • Por outro lado, quando a configuração de autocommit está desativada, a primeira instrução emitida em uma sessão inicia uma nova transação. Assim, se você inserir uma sequência de SELECT, INSERT, UPDATE e outras instruções em linguagem de manipulação de dados (DML), a reutilização da conexão não ocorrerá até que você emita uma COMMIT, ROLLBACK ou encerre a transação.

  • A inserção de uma instrução DDL (Data Definition Language, linguagem de definição de dados) faz com que a transação termine depois que essa instrução é concluída.

O proxy do RDS detecta quando uma transação termina por meio do protocolo de rede usado pelo aplicativo cliente de banco de dados. A detecção da transação não depende de palavras-chave, como COMMIT ou ROLLBACK, que aparecem no texto da instrução SQL.

Em alguns casos, o proxy do RDS pode detectar uma solicitação de banco de dados que torna impraticável mover a sessão para uma conexão diferente. Nesses casos, ele desativa a multiplexação para essa conexão o restante da sessão. A mesma regra se aplicará se o proxy do RDS não puder ter certeza de que a multiplexação é prática para a sessão. Essa operação é chamada de fixação. Para obter formas de detectar e minimizar a fixação, consulte Como evitar fixação.