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
- Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
- Una aplicación existente que usa Azure Cosmos DB. Si no tiene una, aquí tiene algunos ejemplos.
- Una cuenta existente de API de Azure Cosmos DB for NoSQL.
Aprovisionamiento de la puerta de enlace dedicada
Vaya a una cuenta de Azure Cosmos DB en Azure Portal y seleccione la pestaña Puerta de enlace dedicada.
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.
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:
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
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:
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 porsqlx.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.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.