Evitar erros de limitação de taxa para operações do Azure Cosmos DB para Apache Cassandra
APLICA-SE A: Cassandra
O custo de todas as operações de banco de dados é normalizado pelo Azure Cosmos DB e é expresso por Unidades de Solicitação (RU). 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 com suporte do Azure Cosmos DB.
As operações do Azure Cosmos DB para Apache Cassandra podem falhar com erros de limitação de taxa (OverloadedException/429) se excederem o limite de taxa de transferência (RUs) de uma tabela. Isso pode ser tratado pelo lado do cliente, conforme descrito aqui. Se a política de repetição do cliente não puder ser implementada para lidar com a falha devido ao erro de limitação de taxa, podemos usar o recurso de repetição do lado do servidor (SSR), onde as operações que excederem o limite de taxa de transferência de uma tabela serão repetidas automaticamente após um pequeno atraso. Esta é uma definição ao nível da conta e aplica-se a todos os Espaços-chave e Tabelas na conta.
Utilizar o portal do Azure
Inicie sessão no portal do Azure.
Navegue até sua conta do Azure Cosmos DB para Apache Cassandra.
Vá para o painel Recursos abaixo da seção Configurações .
Selecione Repetir no lado do servidor.
Clique em Ativar para ativar esta funcionalidade para todas as coleções na sua conta.
Utilizar a CLI do Azure
Verifique se o SSR já está ativado para a sua conta:
az cosmosdb show --name accountname --resource-group resourcegroupname
Habilite o SSR para todas as tabelas em sua conta de banco de dados. Pode demorar até 15 minutos para que esta alteração entre em vigor.
az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra DisableRateLimitingResponses
O comando a seguir irá Desativar a repetição do lado do servidor para todas as tabelas em sua conta de banco de dados removendo
DisableRateLimitingResponses
da lista de recursos. Pode demorar até 15 minutos para que esta alteração entre em vigor.az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra
Perguntas mais frequentes
Como são repetidas as solicitações?
As solicitações são repetidas continuamente (repetidamente) até que um tempo limite de 60 segundos seja atingido. Se o tempo limite for atingido, o cliente receberá um erro de tempo limite de leitura ou gravação de acordo
Quando é que a RSS é mais benéfica?
A repetição do lado do servidor (SSR) é mais benéfica quando há um pico repentino por uma curta duração de menos de 1 minuto, onde erros de limitação podem ser evitados. Se a carga de trabalho aumentou e permaneceria constantemente acima do RU especificado, então o SSR não ajudará muito. A sugestão é aumentar a RU de forma adequada.
Configurações sugeridas do lado do cliente?
Depois que o SSR estiver habilitado, o aplicativo cliente deve aumentar o tempo limite de leitura além da configuração de 60 segundos de repetição do servidor. Recomendamos 90 segundos para estar do lado mais seguro.
Driver de exemplo de código3
SocketOptions socketOptions = new SocketOptions()
.setReadTimeoutMillis(90000);
Driver de exemplo de código4
ProgrammaticDriverConfigLoaderBuilder configBuilder = DriverConfigLoader.programmaticBuilder()
.withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(90));
Como posso monitorar os efeitos de uma nova tentativa no servidor?
Você pode exibir os erros de limitação de taxa (429) que são repetidos no lado do servidor no painel Métricas do Azure Cosmos DB. Esses erros não vão para o cliente quando o SSR está habilitado, pois eles são manipulados e repetidos no servidor.
Você pode pesquisar entradas de log contendo estimatedDelayFromRateLimitingInMilliseconds em seus logs de recursos do Azure Cosmos DB.
A nova tentativa do lado do servidor afetará meu nível de consistência?
A nova tentativa do lado do servidor não afeta os níveis de consistência. As solicitações são repetidas no servidor se tiverem taxa limitada (Erro 429).
A nova tentativa 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 evita que você tenha que lidar com erros de limitação de taxa no aplicativo cliente. Todos os outros erros irão para o cliente.
Próximos passos
Para saber mais sobre como solucionar erros comuns, consulte este artigo:
Consulte os seguintes artigos para saber mais sobre o provisionamento de taxa de transferência no Azure Cosmos DB: