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 a aplicação 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 da aplicação 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 as aplicações abrem muitas conexões simultâneas. Ele também não requer lógica em suas aplicações para fechar e reabrir conexões que permanecem ociosas por um longo período. Da mesma forma, ele requer menos lógica nas aplicações 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 RDS Proxy são independentes do cluster de banco de dados do 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.
Tópicos
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 com um único cluster de bancos de dados do 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.
As conexões que um proxy mantém abertas e disponíveis para a 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 banco de dados do Aurora. Você faz isso em vez de se conectar ao 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 do Aurora, também é possível criar endpoints adicionais de leitura/gravação e somente leitura. Para ter 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 . Se você usa outros serviços da AWS, como o AWS Lambda para se conectar a bancos de dados do RDS, altere as 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 o cluster de bancos de dados do 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. O cluster de banco de dados do Aurora associado a um proxy é chamado de destino 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. Também envolve a sobrecarga da CPU para fechar cada conexão e abrir uma nova. Os exemplos incluem handshaking TLS/SSL (Transport Layer Security/Secure Sockets Layer), autenticação, recursos de negociação etc. O agrupamento de conexões simplifica a lógica da aplicação. Você não precisa escrever código da aplicação 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 RDS Proxy executa todas as operações para uma transação usando uma conexão de banco de dados subjacente. Depois, o RDS 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 no Amazon Aurora. Além disso, familiarize-se com a forma como o RDS e o Aurora trabalham com autenticação, autorização e outras áreas de segurança.
O proxy do RDS pode atuar como uma camada adicional de segurança entre aplicações cliente e o banco de dados subjacente. Por exemplo, você pode se conectar ao proxy usando o TLS 1.3, mesmo que a instância de banco de dados subjacente ofereça suporte a uma versão mais antiga do TLS. Você pode se conectar ao proxy com um perfil do IAM. Isso ocorre 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 aplicações 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 do cluster de bancos de dados do 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 da aplicação.
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ê estiver usando o RDS Proxy, não será necessário baixar os certificados do Amazon RDS ou atualizar as aplicações que usam conexões 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 no AWS Management Console.
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 para MySQL e Aurora MySQL, especifique o requisito no lado do cliente com o parâmetro ao executar o comando .
-
Para o PostgreSQL do Amazon RDS e o Aurora PostgreSQL, especifique como parte da string ao executar o comando .
O RDS Proxy é compatível com o protocolo TLS versões 1.0, 1.1, 1.2 e 1.3. É 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.
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 .pem
.
O RDS Proxy usa certificados curinga, que se aplicam a um domínio e aos 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 a aplicação 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 aplicações ociosas. Isso ajuda a acelerar e simplificar o processo de failover. Isso causa menos interrupções na aplicação do que uma reinicialização típica ou um problema de banco de dados.
Sem o RDS Proxy, um failover envolve uma breve interrupção. Durante a interrupção, não é possível executar operações de gravação no banco de dados em failover. Todas as conexões de banco de dados existentes são interrompidas e sua aplicação precisa reabri-las. O banco de dados fica 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 do banco de dados primário. 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 aplicações 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 aplicações 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 declaração individual, quando a configuração do RDS para MySQL ou do Aurora MySQL estiver ativada.
-
Por outro lado, quando a configuração
autocommit
está desativada, a primeira declaração emitida em uma sessão inicia uma nova transação. Por exemplo, suponhamos que você insira uma sequência deSELECT
,INSERT
,UPDATE
e outras declarações em linguagem de manipulação de dados (DML). Nesse caso, a reutilização da conexão não ocorrerá até que você emita umCOMMIT
,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 pela aplicação 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 Evitar a fixação de um RDS Proxy.