Quando o tráfego de leitura e gravação compartilha um único caminho de conexão, cargas de trabalho intensivas em gravação podem sobrecarregar as consultas analíticas e impedir o controle direto sobre a distribuição do tráfego de leitura entre as instâncias somente leitura. O endpoint de proxy de banco de dados resolve esse problema ao permitir a atribuição de um atributo de leitura/gravação para cada endpoint e a definição de pesos de leitura por instância. Assim, você roteia o tráfego com precisão e dimensiona a capacidade de leitura independentemente.
Pré-requisitos
Antes de começar, verifique se:
O recurso de proxy de banco de dados está ativado na sua instância RDS. Consulte Ative o recurso de proxy de banco de dados
Há pelo menos uma instância somente leitura associada à sua instância RDS, necessária para a separação de leitura e gravação. Consulte Crie uma instância ApsaraDB RDS for PostgreSQL somente leitura
Atributos de leitura e gravação
Um endpoint de proxy opera em um dos dois modos a seguir:
|
Atributo |
Caso de uso típico |
Comportamento do tráfego |
|
Read/Write |
Tráfego geral de aplicações com separação de leitura e gravação |
Todas as solicitações de gravação vão para a instância primária. As solicitações de leitura são distribuídas entre as instâncias somente leitura com base no peso de leitura. O endpoint deve estar conectado à instância primária e a pelo menos uma instância somente leitura. |
|
Read-only |
Relatórios, análises e outras cargas de trabalho somente leitura |
A instância primária não recebe tráfego por este endpoint. Novas conexões são distribuídas entre as instâncias somente leitura conectadas em ordem round-robin. Cada conexão de cliente vai para uma instância somente leitura. A capacidade total de conexão equivale à soma das conexões disponíveis em todas as instâncias somente leitura conectadas. |
A lista de permissões de endereços IP do proxy de banco de dados mantém sincronização automática com a lista de permissões de endereços IP da instância primária. Qualquer atualização na lista de permissões da instância primária é aplicada imediatamente ao proxy.
Comportamento por atributo e peso
A tabela a seguir descreve como o tráfego é tratado em cada combinação de configurações de atributo de leitura/gravação e peso.
| Atributo | Método de peso | Peso da instância primária | Operação normal | Após a exclusão da última instância somente leitura | Após falha em todas as instâncias somente leitura |
|---|---|---|---|---|---|
| Somente leitura | Automático ou personalizado | Não configurável | Primária: sem tráfego. Proxy: apenas solicitações de leitura. | Primária: sem tráfego. Proxy: erro de conexão. | Primária: sem tráfego. Proxy: erro de conexão. |
| Leitura/Gravação | Automático | 0 (consulte Default read weights) | Primária: apenas solicitações de gravação. Proxy: solicitações de leitura e gravação. | Primária: solicitações de leitura e gravação. Proxy: solicitações de leitura e gravação. | Primária: solicitações de leitura e gravação. Proxy: solicitações de leitura e gravação. |
| Personalizado | Peso > 0 | Primária: solicitações de leitura e gravação. Proxy: solicitações de leitura e gravação. | Primária: solicitações de leitura e gravação. Proxy: solicitações de leitura e gravação. | Primária: solicitações de leitura e gravação. Proxy: solicitações de leitura e gravação. | |
| Peso = 0 | Primária: apenas solicitações de gravação. Proxy: solicitações de leitura e gravação. | Primária: solicitações de leitura e gravação. Proxy: solicitações de leitura e gravação. | Primária: solicitações de leitura e gravação. Proxy: solicitações de leitura e gravação. |
Observações sobre os termos da tabela:
Sem tráfego para a primária: A instância primária fica excluída do encaminhamento de solicitações somente leitura.
Erro de conexão: Ocorre quando um endpoint de proxy somente leitura não tem instâncias somente leitura disponíveis para processar solicitações.
Modo Leitura/Gravação com peso da primária = 0: Em condições normais, as solicitações de leitura não vão para a instância primária. Se todas as instâncias somente leitura estiverem com falha, se houver especificação de dica forçada ou se a separação de transações estiver ativada, o proxy encaminha as solicitações de leitura para a instância primária como fallback.
Configurar atributos de leitura/gravação e peso de leitura
Acesse a página Instances. Na barra de navegação superior, selecione a região onde reside sua instância RDS e clique em ID da instância.
No painel de navegação à esquerda, clique em Database Proxy.
Na seção Connection Information, localize o endpoint a modificar na coluna Proxy Endpoint (Terminal) ID e clique em Modify Configuration na coluna Actions.
-
Defina Read/Write Attributes como uma das opções a seguir:
Read/Write (Read/Write Splitting)
Read-only (Primary Instance Not Connected to Receive Write Requests)
-
Defina Read Weight Allocation como Automatic ou Custom:
Automatic: O sistema atribui um peso de leitura a cada instância com base nas especificações dela. Ao adicionar uma instância somente leitura, o sistema a inclui automaticamente na separação de leitura e gravação com um peso apropriado, sem necessidade de atualização manual. Para consultar os valores de peso atribuídos pelo sistema, veja Default read weights.
Custom: Especifique um peso de leitura para cada instância somente leitura. Valores válidos: 0–10000. Ao criar uma nova instância somente leitura, o peso inicial dela é 0. Atualize o peso para incluí-la na distribuição de tráfego.
NotaUm peso maior significa que a instância recebe proporcionalmente mais solicitações de leitura. Por exemplo, se três instâncias somente leitura tiverem pesos 100, 200 e 200, e o peso da instância primária for 0, a primária processa apenas gravações e as instâncias somente leitura recebem tráfego na proporção
1:2:2
.
As alterações de peso entram em vigor imediatamente, sem queda de conexões. As conexões existentes permanecem inalteradas; apenas novas conexões usam os pesos atualizados.
Os pesos de leitura tornam-se inválidos automaticamente quando uma instância somente leitura é liberada, ou quando a instância primária falha ou excede o limiar de latência de replicação. Os pesos voltam a ser válidos após a recuperação da instância.
Rotear solicitações com dicas SQL
Para substituir a decisão de roteamento do proxy para uma consulta específica, adicione uma dica de roteamento à instrução SQL:
-
Force a consulta para a instância primária:
/*FORCE_MASTER*/ SELECT * FROM table_name; -
Force a consulta para uma instância somente leitura:
/*FORCE_SLAVE*/ SELECT * FROM table_name;
Referência de API
|
Operação |
Descrição |
|
Consulta os detalhes de um proxy de banco de dados |
|
|
Consulta os detalhes de um endpoint de proxy de banco de dados |
|
|
Modifica o atributo de leitura/gravação e o peso de leitura de um endpoint de proxy de banco de dados |