Cómo configurar la caché integrada de Azure Cosmos DB

SE APLICA A: NoSQL

En este artículo se describe cómo aprovisionar una puerta de enlace dedicada, cómo configurar la caché integrada y cómo conectar la aplicación.

Requisitos previos

Aprovisionamiento de la puerta de enlace dedicada

  1. Vaya a una cuenta de Azure Cosmos DB en Azure Portal y seleccione la pestaña Puerta de enlace dedicada.

    Captura de pantalla de Azure Portal que muestra cómo desplazarse a la pestaña de la puerta de enlace dedicada de Azure Cosmos DB.

  2. Rellene el formulario Puerta de enlace dedicada con los detalles siguientes:

    • Puerta de enlace dedicada: establezca el botón de alternancia en Aprovisionada.
    • SKU: seleccione una SKU con el tamaño de proceso y memoria necesarios. La caché integrada usará aproximadamente el 50 % de la memoria y la memoria restante se usa para metadatos y solicitudes de enrutamiento a las particiones de back-end.
    • Número de instancias: número de nodos. Con fines de desarrollo, se recomienda empezar con un nodo del tamaño D4. En función de la cantidad de datos que necesite almacenar en caché y para lograr una alta disponibilidad, puede aumentar el tamaño del nodo tras las pruebas iniciales.

    Captura de pantalla de la pestaña de la puerta de enlace dedicada de Azure Portal que muestra la configuración de entrada de ejemplo para crear un clúster de puertas de enlace dedicadas.

  3. Seleccione Guardar y espere entre 5 y 10 minutos para que se complete el aprovisionamiento de la puerta de enlace dedicada. Cuando haya terminado el aprovisionamiento, verá la siguiente notificación:

    Captura de pantalla de una notificación de Azure Portal que muestra cómo comprobar si el aprovisionamiento de la puerta de enlace dedicada se ha completado.

Configuración de la aplicación para usar la caché integrada

Al aprovisionar una puerta de enlace dedicada, se crea automáticamente una caché integrada. No es necesario conectar todas las aplicaciones que usan Azure Cosmos DB a la puerta de enlace dedicada si no necesitan usar la caché integrada. Agregar una puerta de enlace dedicada no afecta a las formas existentes de conectarse a Azure Cosmos DB. Por ejemplo, es posible tener una conexión CosmosClient mediante el modo de puerta de enlace y el punto de conexión de la puerta de enlace dedicada, mientras que otra usa el modo directo CosmosClient.

Autenticación con el control de acceso basado en rol

La puerta de enlace dedicada usa los mismos permisos, definiciones de roles y asignaciones de roles que Azure Cosmos DB. Si ya tiene configurado el control de acceso basado en roles (RBAC) para las operaciones del plano de datos en su cuenta de Azure Cosmos DB, también puede utilizarlo para autenticarse en la puerta de enlace dedicada. Obtenga información sobre RBAC para las operaciones del plano de datos de Azure Cosmos DB.

Configure el CosmosClient estableciendo el punto de conexión de puerta de enlace dedicado, las credenciales y la configuración del modo de conectividad de puerta de enlace. Todos los puntos de conexión de puerta de enlace dedicados siguen el mismo patrón. Quite documents.azure.com del punto de conexión original y reemplácelo por sqlx.cosmos.azure.com. Una puerta de enlace dedicada siempre tendrá el mismo punto de conexión, incluso si quita y vuelve a aprovisionarlo.

using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Cosmos;

string endpoint = "<dedicated-gateway-endpoint>";

TokenCredential credential = new DefaultAzureCredential();

CosmosClient client = new(endpoint, credential, new CosmosClientOptions { ConnectionMode = ConnectionMode.Gateway });

Importante

El modo de conectividad directa es el valor predeterminado en el SDK de .NET. Debe configurar explícitamente el modo de puerta de enlace para usar la puerta de enlace dedicada.

Autenticación con cadenas de conexión

  1. Modifique la cadena de conexión de la aplicación para usar el nuevo punto de conexión de la puerta de enlace dedicada.

    La cadena de conexión de la puerta de enlace dedicada actualizada se encuentra en la hoja Claves:

    Captura de pantalla de la pestaña de claves de Azure Portal con la cadena de conexión de la puerta de enlace dedicada.

    Todas las cadenas de conexión de las puertas de enlace dedicadas siguen el mismo patrón. Quite documents.azure.com de la cadena de conexión original y reemplácela por sqlx.cosmos.azure.com. Una puerta de enlace dedicada siempre tendrá la misma cadena de conexión, incluso si se quita y se vuelve a aprovisionar.

  2. Si usa el SDK de .NET o Java, establezca el modo de conexión en el modo de puerta de enlace. Este paso no es necesario para los SDK de Python y Node.js, ya que no tienen opciones adicionales de conexión aparte del modo de puerta de enlace.

Importante

Si usa la versión más reciente del SDK de .NET o Java, el modo de conexión predeterminado es el modo directo. Para usar la memoria caché integrada, debe invalidar este valor predeterminado.

Ajuste de la coherencia de la solicitud

Debe asegurarse de que la coherencia de la solicitud sea de sesión o final. Si no lo hace, la solicitud siempre omitirá la caché integrada. La manera más fácil de configurar una coherencia específica para todas las operaciones de lectura es establecerla en el nivel de cuenta. También puede configurar la coherencia en el nivel de solicitud; esto se recomienda si solo quiere que un subconjunto de las lecturas use la memoria caché integrada.

Ajuste de MaxIntegratedCacheStaleness

Configure MaxIntegratedCacheStaleness, que es el tiempo máximo en el que está dispuesto a tolerar datos almacenados en caché obsoletos. Se recomienda establecer MaxIntegratedCacheStaleness lo más alto posible, ya que aumentará la probabilidad de que las consultas y las lecturas puntuales repetidas puedan ser aciertos de caché. Si establece MaxIntegratedCacheStaleness en 0, la solicitud de lectura nunca usará la caché integrada, independientemente del nivel de coherencia. Cuando no está configurado, el valor predeterminado de MaxIntegratedCacheStaleness es 5 minutos.

Nota

MaxIntegratedCacheStaleness se puede establecer como máximo en 10 años. En la práctica, este valor es la obsolescencia máxima y la caché puede restablecerse antes debido a los reinicios del nodo que pueden producirse.

El ajuste de MaxIntegratedCacheStaleness se admite en estas versiones de cada SDK:

SDK Versiones compatibles
.NET SDK v3 >= 3.30.0
SDK de Java v4 >= 4.34.0
SDK de Node.js >=3.17.0
SDK de Python >=4.3.1
FeedIterator<MyClass> myQuery = container.GetItemQueryIterator<MyClass>(new QueryDefinition("SELECT * FROM c"), requestOptions: new QueryRequestOptions
        {
            DedicatedGatewayRequestOptions = new DedicatedGatewayRequestOptions 
            { 
                MaxIntegratedCacheStaleness = TimeSpan.FromMinutes(30) 
            }
        }
);

Omitir la caché integrada

Use la opción de solicitud BypassIntegratedCache para controlar qué solicitudes usan la caché integrada. Las escrituras, las lecturas puntuales y las consultas que omiten la caché integrada no usarán el almacenamiento de caché, lo que ahorra espacio para otros elementos. Las solicitudes que omiten la memoria caché siguen enrutadas a través de la puerta de enlace dedicada. Estas solicitudes se sirven desde el back-end y las RU de coste.

El paso de la memoria caché se admite en estas versiones de cada SDK:

SDK Versiones compatibles
.NET SDK v3 >= 3.39.0
SDK de Java v4 >= 4,49,0
SDK de Node.js >= 4.1.0
SDK de Python No compatible
FeedIterator<MyClass> myQuery = container.GetItemQueryIterator<MyClass>(new QueryDefinition("SELECT * FROM c"), requestOptions: new QueryRequestOptions
        {
            DedicatedGatewayRequestOptions = new DedicatedGatewayRequestOptions 
            { 
                BypassIntegratedCache = true
            }
        }
);

Comprobación de los resultados de la caché

Por último, puede reiniciar la aplicación y comprobar los aciertos integrados de la caché de las lecturas o consultas puntuales repetidas viendo si el cargo de la solicitud es 0. Una vez que haya modificado CosmosClient para poder usar el punto de conexión de la puerta de enlace dedicada, todas las solicitudes se enrutarán a través de esa puerta de enlace dedicada.

Para que una solicitud de lectura (esto es, una lectura o consulta de punto) use la caché integrada, deben cumplirse todos los criterios siguientes:

  • El cliente debe conectarse al punto de conexión de la puerta de enlace dedicada.
  • El cliente usa el modo de puerta de enlace (los SDK de Python y Node.js siempre usan el modo de puerta de enlace).
  • La coherencia de la solicitud debe establecerse en un estado de sesión o evento.

Nota:

¿Tiene comentarios sobre la caché integrada? Queremos conocerlos. No dude en compartir sus comentarios directamente con el equipo de ingeniería de Azure Cosmos DB: cosmoscachefeedback@microsoft.com.

Pasos siguientes