Prevención de errores de limitación de velocidad de operaciones de Azure Cosmos DB for Apache Cassandra

SE APLICA A: Cassandra

Azure Cosmos DB normaliza el coste de todas las operaciones de base de datos, que se expresa en unidades de solicitud (RU). Las unidades de solicitud son como una moneda de rendimiento, que abstrae los recursos del sistema, como CPU, IOPS y memoria, necesarios para realizar las operaciones de base de datos compatibles con Azure Cosmos DB.

Es posible que se produzcan errores de limitación de velocidad (429) en las operaciones de Azure Cosmos DB for Apache Cassandra si superan el límite de rendimiento de una tabla (RU). Esto se puede gestionar en el lado cliente tal y como se describe aquí. Si no se puede implementar la directiva de reintentos de cliente para gestionar el fallo debido a un error de limitación de velocidad, podemos usar la característica Reintento del lado servidor (SSR), donde las operaciones que superen el límite de rendimiento de una tabla se reintentarán automáticamente transcurrido un breve intervalo. Se trata de un valor de nivel de cuenta que se aplica a todos los espacios de claves y tablas de la cuenta.

Uso de Azure Portal

  1. Inicie sesión en Azure Portal.

  2. Vaya a su cuenta de Azure Cosmos DB for Apache Cassandra.

  3. Vaya al panel Características debajo de la sección Configuración.

  4. Seleccione Reintento del lado servidor.

  5. Haga clic en Habilitar para habilitar esta característica para todas las colecciones de su cuenta.

Captura de pantalla de la característica Reintento del lado servidor de Azure Cosmos DB for Apache Cassandra

Uso de la CLI de Azure

  1. Compruebe si SSR ya está habilitado para su cuenta:

    az cosmosdb show --name accountname --resource-group resourcegroupname
    
  2. Habilite SSR para todas las tablas de su cuenta de base de datos. Este cambio puede tardar un máximo de 15 minutos en surtir efecto.

    az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra DisableRateLimitingResponses
    
  3. El siguiente comando deshabilitará Reintento del lado servidor en todas las tablas de la cuenta de base de datos, al eliminar DisableRateLimitingResponses de la lista de funcionalidades. Este cambio puede tardar un máximo de 15 minutos en surtir efecto.

    az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra
    

Preguntas más frecuentes

¿Cómo se reintentan las solicitudes?

Las solicitudes se reintentan continuamente (una y otra vez) hasta que se alcanza un tiempo de espera de 60 segundos. Si se alcanza el tiempo de espera, el cliente recibirá el error de tiempo de espera de lectura o escritura correspondiente.

¿Cuándo resulta más beneficioso usar SSR?

Reintento del lado servidor (SSR) resulta más beneficioso cuando hay un pico repentino durante un breve período de menos de 1 minuto en el que se pueden evitar errores de limitación. Si la carga de trabajo ha aumentado y permanece constantemente por encima de la RU especificada, SSR no será de mucha ayuda. La sugerencia es aumentar la RU según corresponda.

¿Valor sugerido del lado cliente?

Después de habilitar SSR, la aplicación cliente debe aumentar el tiempo de espera de lectura más allá del valor de servidor de 60 segundos. Para mayor seguridad, se recomienda un valor de 90 segundos.

Controlador de ejemplo de código 3

SocketOptions socketOptions = new SocketOptions()
	.setReadTimeoutMillis(90000); 

Controlador de ejemplo de código 4

ProgrammaticDriverConfigLoaderBuilder configBuilder = DriverConfigLoader.programmaticBuilder()
	.withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(90)); 

¿Cómo se pueden supervisar los efectos de un reintento en el servidor?

Puede ver los errores de limitación de velocidad (429) que se reintentan en el servidor en el panel de métricas de Azure Cosmos DB. Estos errores no van al cliente cuando SSR está habilitado, ya que se controlan y se reintentan en el lado servidor.

Puede buscar entradas de registro que contengan estimatedDelayFromRateLimitingInMilliseconds en los registros de recursos de Azure Cosmos DB.

¿Afectará el reintento en el servidor a mi nivel de consistencia?

Reintento en el lado servidor no afecta a los niveles de coherencia. Las solicitudes se reintentan en el lado servidor si tienen la velocidad limitada (error 429).

¿Afecta el reintento en el servidor a cualquier tipo de error que pueda recibir mi cliente?

No, solo afecta a los errores de limitación de velocidad (429) al volver a intentar en el servidor. Esta característica evita que tenga que controlar los errores de limitación de velocidad en la aplicación cliente. Todos los otros errores irán al cliente.

Pasos siguientes

Para obtener más información sobre la solución de errores comunes, consulte este artículo:

Consulte los siguientes artículos para aprender sobre el aprovisionamiento del rendimiento en Azure Cosmos DB: