Evitar erros de limitação de taxa para operações do Azure Cosmos DB for Apache Cassandra
APLICA-SE AO: Cassandra
O custo de todas as operações do banco de dados é normalizado pelo Azure Cosmos DB e expresso por RU (Unidades de Solicitação). A unidade de solicitação é uma moeda de desempenho que abstrai os recursos do sistema (como CPU, IOPS e memória) necessários para executar as operações de banco de dados compatíveis com o Azure Cosmos DB.
As operações do Azure Cosmos DB for Apache Cassandra poderão falhar com erros de limitação de taxa (OverloadedException/429) se excederem o limite de taxa de transferência de uma tabela (RUs). Isso pode ser manipulado pelo cliente, conforme descrito aqui. Se a política de nova tentativa do cliente não puder ser implementada para lidar com a falha devido a um erro de limitação de taxa, podemos usar o recurso de SSR (repetição do lado do servidor), em que as operações que excedem o limite de taxa de transferência de uma tabela serão recuperadas automaticamente após um pequeno atraso. Essa é uma configuração de nível de conta e se aplica a todos os Espaços de chave e tabelas na conta.
Use o Portal do Azure
Entre no portal do Azure.
Navegue para sua conta do Azure Cosmos DB for Apache Cassandra.
Vá para o painel Recursos abaixo da seção Configurações.
Selecione Repetição do Lado do Servidor.
Clique em Habilitar para habilitar esse recurso para todas as coleções em sua conta.
Usar a CLI do Azure
Verifique se o SSR já está habilitado para sua conta:
az cosmosdb show --name accountname --resource-group resourcegroupname
Habilite a SSR para todas as tabelas na conta de banco de dados. Pode levar até 15 minutos para que essa alteração tenha efeito.
az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra DisableRateLimitingResponses
O comando a seguir desabilitará a repetição do lado do servidor para todas as tabelas em sua conta de banco de dados, removendo
DisableRateLimitingResponses
da lista de funcionalidades. Pode levar até 15 minutos para que essa alteração tenha efeito.az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra
Perguntas frequentes
Como as solicitações são repetidas?
As solicitações são repetidas continuamente (de maneira repetida) até que um tempo limite de 60 segundos seja atingido. Se o tempoout for atingido, o cliente receberá o erro de tempo de leitura ou gravação de acordo
Quando o SSR é mais benéfico?
A SSR (repetição do lado do servidor) é mais benéfica quando há um pico repentino por uma curta duração de menos de 1 minuto, em que erros de limitador podem ser evitados. Se a carga de trabalho tiver aumentado e permanecer constantemente acima da RU especificada, o SSR não ajudará muito. A sugestão é aumentar a RU adequadamente.
Configurações sugeridas do lado do cliente?
Depois que o SSR estiver habilitado, o aplicativo cliente deverá aumentar o tempo de leitura além da configuração de repetir 60 segundos do servidor. Recomendamos 90 segundos para estar no lado mais seguro.
Código de exemplo Driver3
SocketOptions socketOptions = new SocketOptions()
.setReadTimeoutMillis(90000);
Código de exemplo Driver4
ProgrammaticDriverConfigLoaderBuilder configBuilder = DriverConfigLoader.programmaticBuilder()
.withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(90));
Como posso monitorar os efeitos de uma repetição do lado do servidor?
É possível exibir os erros de limitação de taxa (429) que são repetidos no lado do servidor no painel de métricas do Azure Cosmos DB. Esses erros não vão para o cliente quando a SSR está habilitada, uma vez que eles são manipulados e repetidos no lado do servidor.
Você pode pesquisar por entradas de log que contenham estimatedDelayFromRateLimitingInMilliseconds em seus logs de recursos do Azure Cosmos DB.
A repetição do lado do servidor afetará meu nível de consistência?
A repetição do lado do servidor não afeta os níveis de consistência. As solicitações serão repetidas no lado do servidor se forem limitadas por taxa (erro 429).
A repetição do lado do servidor afeta qualquer tipo de erro que meu cliente possa receber?
Não, a repetição do lado do servidor afeta apenas os erros de limitação de taxa (429), repetindo-os no lado do servidor. Esse recurso impede que você precise manipular erros de limitação de taxa no aplicativo cliente. Todos os outros erros vão para o cliente.
Próximas etapas
Para saber mais sobre como solucionar erros comuns, veja este artigo:
Confira os seguintes artigos para saber mais sobre o provisionamento de taxa de transferência no Azure Cosmos DB: