Monitoramento de desempenho e recursos específicos da instância
O monitoramento em nível de instância é fundamental para entender as distorções de conexão, de workload e de dados, bem como saber quando adicionar roteadores ou fragmentos divididos para aumentar a escala verticalmente e obter um throughput mais alto com a mesma latência.
Visão geral
Quando a aplicação emite uma consulta, essa solicitação percorre um sofisticado sistema distribuído antes de exibir os resultados. Uma instrução SELECT aparentemente simples pode envolver várias instâncias de banco de dados, cada uma desempenhando um papel distinto no processamento da solicitação. Entender esse processo, e as instâncias envolvidas para realizá-lo, transforma a maneira como você projeta aplicações, interpreta dados de monitoramento e diagnostica problemas de desempenho.
Este guia apresenta uma visão técnica detalhada sobre a arquitetura de instâncias:
Atualização ilimitada sobre a arquitetura, roteadores e fragmentos
Quando e como escalar cada tipo de instância para atender a requisitos de desempenho e capacidade
Como monitorar, solucionar problemas e otimizar o desempenho em nível de instância
Práticas recomendadas de design de aplicações que utilizam a arquitetura distribuída de forma eficaz
Fundamentos da arquitetura de instâncias
alcança escalabilidade horizontal por meio da separação funcional em dois tipos de instância especializados:
As instâncias de roteador oferecem a camada de orquestração. Elas aceitam conexões de clientes, analisam consultas, coordenam operações distribuídas e agregam resultados. Os roteadores não têm estado, o que significa que não armazenam dados e podem ser adicionados ou removidos sem migração de dados.
As instâncias de fragmento fornecem os dados e a camada de computação. Elas armazenam dados de tabela, executam consultas em dados locais e lidam com transações. Os fragmentos têm estado e cada um tem um subconjunto específico de dados determinado por um hashing consistente.
Essa separação permite escalar o tratamento de conexões, a coordenação de consultas e o armazenamento de dados de forma independente, com base nas características da workload.
Comparação entre roteadores e fragmentos
| Característica | Instâncias de roteador | Instâncias de fragmento |
|---|---|---|
| Função principal | Coordenação e distribuição de consultas | Armazenamento de dados e execução de consultas |
| Estado | Sem estado (não há armazenamento de dados) | Com estado (possui dados) |
| Escalabilidade | Adicionar/remover instantaneamente | Requer rebalanceamento de dados |
| Foco do recurso | CPU para coordenação; memória moderada | CPU para consultas; alta memória para cache |
| Acionadores de ajuste de escala | Alta contagem de conexões, taxa de transação distribuída | CPU, volume de dados e throughput de consultas altos |
Monitorar o desempenho da instância
Compreender o desempenho em nível de instância é essencial para operar com eficiência. O monitoramento específico da instância revela os padrões de distribuição que afetam o desempenho: distorções de conexão, de workload e de dados.
Detecção de distorções
Em uma implantação ideal, a workload e os recursos são distribuídos uniformemente entre as instâncias. Na prática, as aplicações experimentam frequentemente uma distribuição distorcida e desigual que concentra a carga em instâncias específicas.
Três tipos de distorção que devem ser monitorados:
Distorção de conexão: distribuição desigual de conexões de cliente entre os roteadores.
Distorção de workload: carga de consulta desigual entre fragmentos devido a chaves de fragmentos “quentes”.
Distorção de dados: volume de dados desigual entre fragmentos devido à frequência da chave de fragmento
Distribuição de carga do Database Insights
A maneira mais rápida de avaliar a integridade em nível de instância é por meio da visualização de distribuição de carga do Database Insights, que oferece visibilidade imediata sobre como as sessões ativas se distribuem entre as instâncias.
Para acessar as distribuição de carga:
Acesse o console do RDS → Seu cluster ilimitado.
Selecione a guia “Insights de Performance”.
Clique na seção “Distribuição de carga”.
Padrão íntegro: a carga é distribuída de maneira relativamente uniforme entre as instâncias.
Os roteadores podem mostrar uma média de sessões ativas (AAS) um pouco mais alta do que os fragmentos (custos indiretos de coordenação).
Valores de AAS de 20% entre os fragmentos indicam um bom equilíbrio.
Padrão preocupante: concentração significativa em instâncias específicas.
Um roteador com >70% de carga de roteador → Distorção de conexão.
Um fragmento com >50% de carga de fragmento → Distorção de workload ou de dados.
Grande variação entre fragmentos → Investigar a distribuição de chaves de fragmentos.
Métricas do CloudWatch
Para oferecer uma análise mais detalhada que a do Database Insights, o CloudWatch disponibiliza métricas específicas da instância que revelam padrões de utilização de recursos.
A métrica ServerlessDatabaseCapacity com dimensão DBShardGroupInstance mostra o consumo de ACU por instância, oferecendo a visualização mais direta da utilização de recursos.
Quando investigar:
Variação de ACU do roteador >30% → Distorção de conexão ou concentração de workload entre fragmentos.
Variação da ACU do fragmento > 40% → Distorção de dados ou workload.
Qualquer instância que use a ACU máxima de forma consistente → Restrição de capacidade.
Monitoramento de roteadores e solução de problemas
Os roteadores podem enfrentar problemas de desempenho por duas causas principais: distribuição desigual de conexões e concentração de workload entre fragmentos.
Sessões distribuídas de forma desigual
Sintoma: um roteador lida com uma parcela desproporcional de conexões.
Causa-raiz: o armazenamento em cache de DNS faz com que várias solicitações de conexão sejam resolvidas no mesmo endpoint do roteador.
Mais comum durante:
Avaliação comparativa com ferramentas como o pgbench.
Inicialização do grupo de conexões (várias conexões são estabelecidas rapidamente).
O servidor de aplicação é reiniciado.
Correções:
Use o endpoint ilimitado especificado no console.
Balanceamento manual: extraia endpoints de roteador e conecte diferentes aplicações a roteadores diferentes.
Para aplicativos libpq, use o recurso
LOADBALANCEHOSTS.Para aplicações JDBC, use o plug-in de conexão ilimitada.
Use um NLB para gerenciar sessões e distribuições.
Monitoramento de fragmentos e solução de problemas
Os fragmentos enfrentam problemas de desempenho por três causas principais: restrições de recurso, distorção de dados e distorção de workload.
Utilização de recursos de fragmento
Um fragmento com chaves de fragmento conhecidas terá mais dados e maiores workloads. Isso se manifesta como utilização de recursos, ou seja, a instância consumirá mais ACUs.
Estratégias de correção:
Reavalie a seleção da chave de fragmento: analise a cardinalidade da chave de fragmento e os padrões de acesso. Considere a possibilidade de usar chaves de fragmento compostas para melhorar a distribuição.
Divida o fragmento: distribua a carga entre mais instâncias de fragmento.
Quando dividir os fragmentos:
Fragmento único que use >80% da ACU máxima de forma consistente.
Throughput de consulta limitado pela capacidade de um único fragmento.
Volumes de dados de fragmentos
Use funções SQL para consultar volumes de dados:
SELECT subcluster_id, subcluster_type, pg_size_pretty(db_size) FROM rds_aurora.limitless_stat_database_size('postgres_limitless') ORDER BY 1;
Para visualizar dados por tabela e por fragmento:
SELECT * FROM rds_aurora.limitless_stat_relation_sizes('public', 'table_name');
Resolver a utilização desigual
Quando a distorção de workload ou de dados se concentra em fragmentos específicos, a divisão de fragmentos redistribui a carga entre mais instâncias.
Considerações importantes:
Não é possível controlar quais chaves de fragmento devem ser movidas.
Não há como desfazer uma divisão sem recuperar um snapshot manual tirado antes da divisão.
Todas as instâncias, inclusive um novo fragmento, consomem a ACU mínima quando ociosas.
A divisão de fragmentos permite maior ajuste de escala, e divisões consecutivas de fragmentos são o caminho para obter um throughput mais alto e maior ajuste de escala, mantendo baixa latência.
Limitações
Esteja ciente destas restrições operacionais:
Limitações dos roteadores:
Não é possível remover roteadores: uma vez adicionados, os roteadores permanecem no cluster.
Planeje a adição de roteadores com cuidado para evitar custos básicos desnecessários.
Limitações dos fragmentos:
Não é possível mesclar fragmentos: as divisões de fragmentos são operações unidirecionais.
Há apenas uma opção de recuperação: restaurar com base em um snapshot tirado antes da divisão.
Estratégias de mitigação:
Iniciar com uma contagem mínima de instâncias viáveis.
Adicionar capacidade incrementalmente conforme necessário.
Tirar snapshots antes de grandes alterações na topologia.
Monitorar os custos básicos à medida que o cluster cresce