Diagnóstico y solución de problemas de disponibilidad de los SDK de Azure Cosmos DB en entornos de varias regiones

SE APLICA A: NoSQL

En este artículo se describe el comportamiento de la versión más reciente de los SDK de Azure Cosmos DB cuando se tiene un problema de conectividad con una región determinada o cuando se produce una conmutación por error de una región.

Todos los SDK de Azure Cosmos DB ofrecen la opción de personalizar las preferencias regionales. Las siguientes propiedades se utilizan en diferentes SDK:

Cuando el SDK se inicializa con una configuración que especifica preferencias regionales, primero obtendrá la información de la cuenta, incluidas las regiones disponibles del punto de conexión global. A continuación, aplicará una intersección de la preferencia regional configurada y las regiones disponibles de la cuenta y usará el orden de la preferencia regional para priorizar el resultado.

Si la configuración de preferencias regionales contiene regiones que no están disponible en la cuenta, se omitirán los valores. Si estas regiones no válidas se agregan más adelante a la cuenta, el SDK las usará si están más arriba en la configuración de preferencias.

Tipo de cuenta Lecturas Escrituras
Una región de escritura Región preferida con el orden más alto Región primaria
Varias regiones de escritura Región preferida con el orden más alto Región preferida con el orden más alto

Si no establece una región preferida, el cliente SDK utilizará la región primaria como el valor predeterminado:

Tipo de cuenta Lecturas Escrituras
Una región de escritura Región primaria Región primaria
Varias regiones de escritura Región primaria Región primaria

Nota

La región primaria hace referencia a la primera región de la lista de regiones de la cuenta de Azure Cosmos DB. Si los valores especificados como preferencia regional no coinciden con ninguna región de Azure existente, se omitirán. Si coinciden con una región existente pero la cuenta no se replica en ella, el cliente se conectará a la siguiente región preferida que coincida o a la región primaria.

Advertencia

La lógica de conmutación por error y de disponibilidad que se describe en este documento puede deshabilitarse en la configuración del cliente, lo que no se recomienda a menos que la aplicación del usuario controle los errores de disponibilidad por sí misma. Para lograr esto:

En circunstancias normales, el cliente SDK se conectará a la región preferida (si se ha establecido una preferencia regional) o a la región primaria (si no se ha establecido una preferencia); y las operaciones se limitarán a esa región, a menos que se produzca alguno de estos escenarios.

En estos casos, el cliente que usa el SDK de Azure Cosmos DB expone los registros e incluye la información de reintentos como parte de la información de diagnóstico de operaciones:

  • La propiedad RequestDiagnosticsString en las respuestas del SDK de .NET v2.
  • La propiedad Diagnostics en las respuestas y excepciones en el SDK de .NET v3.
  • El método getDiagnostics() en las respuestas y excepciones en el SDK de Java v4.

Al determinar la siguiente región en orden de preferencia, el cliente del SDK usará la lista de regiones de la cuenta, dando prioridad a las regiones preferidas (si las hay).

Para obtener información detallada sobre las garantías del Acuerdo de Nivel de Servicio durante estos eventos, vea los Acuerdos de Nivel de Servicio para la disponibilidad.

Eliminación de una región de la cuenta

Al quitar una región de una cuenta de Azure Cosmos DB, cualquier cliente SDK que use activamente la cuenta detectará la eliminación de la región a través de un código de respuesta de back-end. Después, el cliente marca el punto de conexión regional como no disponible. El cliente reintentará la operación actual y todas las operaciones futuras se enrutarán permanentemente a la siguiente región en orden de preferencia. En caso de que la lista de preferencias tenga solo una entrada (o estaba vacía) pero la cuenta tenga otras regiones disponibles, se enrutará a la siguiente región de la lista de cuentas.

Adición de una región a una cuenta

Cada 5 minutos, el cliente SDK de Azure Cosmos DB lee la configuración de la cuenta y actualiza las regiones que conoce.

Cuando se quita una región y más adelante se vuelve a agregar a la cuenta, si la región agregada tiene un orden de preferencia regional más alto en la configuración del SDK en comparación con la región conectada actualmente, el SDK volverá a usar esta región de forma permanente. Una vez detectada la región agregada, todas las solicitudes futuras se dirigirán a ella.

Si configura el cliente para que se conecte preferiblemente a una región que no tiene la cuenta de Azure Cosmos DB, se omitirá la región preferida. Si agrega esa región más adelante, el cliente la detectará y cambiará de forma permanente a esa región.

Conmutación por error de la región de escritura en una cuenta con una sola región de escritura

Si inicia una conmutación por error de la región de escritura actual, la siguiente solicitud de escritura producirá un error con una respuesta de back-end conocida. Cuando se detecta esta respuesta, el cliente consultará la cuenta para obtener información sobre la nueva región de escritura y volverá a intentar la operación actual y enrutará permanentemente todas las operaciones de escritura futuras a la nueva región.

Interrupción regional

Si la cuenta es de una sola región de escritura y la interrupción regional se produce durante una operación de escritura, el comportamiento es similar a una conmutación por error manual. En el caso de las solicitudes de lectura o de cuentas de varias regiones de escritura, el comportamiento es similar a quitar una región.

Garantías de coherencia de la sesión

Al utilizar la coherencia de la sesión, el cliente debe garantizar que puede leer sus propias escrituras. En las cuentas con una única región de escritura en las que la preferencia de región de lectura es diferente de la región de escritura, podría haber casos en los que el usuario emita una escritura y, al realizar una lectura desde una región local, esta no haya recibido todavía la replicación de datos (restricción de velocidad de la luz). En tales casos, el SDK recibe el error específico del servicio sobre la operación de lectura y reintenta la lectura en la región primaria para garantizar la coherencia de la sesión. En el caso de las cuentas con varias regiones de escritura, se aplica la misma semántica de sesión, pero dado que hay varias regiones de escritura disponibles, los reintentos se emiten mediante la lista de regiones preferidas o el orden de región de la cuenta.

Problemas de conectividad transitorios en el protocolo TCP

En los escenarios en los que el cliente SDK de Azure Cosmos DB está configurado para usar el protocolo TCP, pueden darse situaciones para una solicitud determinada en las que las condiciones de red afecten temporalmente a la comunicación con un punto de conexión determinado. Estas condiciones de red temporales se pueden exponer como tiempos de espera de TCP y errores de servicio no disponible (HTTP 503). El cliente reintentará la solicitud localmente en el mismo punto de conexión durante algunos segundos, si es posible.

Si el usuario ha configurado una lista de regiones preferidas con más de una región y el cliente agotó todos los reintentos locales, puede volver a intentar esa operación única en la siguiente región de la lista de preferencias. Las operaciones de escritura solo se pueden reintentar en otra región si la cuenta de Azure Cosmos DB tiene habilitadas varias regiones de escritura, mientras que las operaciones de lectura se pueden reintentar en cualquier región disponible.

Pasos siguientes