Compartir vía


Información general sobre el almacenamiento en caché

SE APLICA A: todos los niveles de API Management

Configure el almacenamiento en caché en Azure API Management para almacenar y recuperar respuestas a solicitudes de API e información relacionada. Al almacenar respuestas de servicios back-end, API Management puede atender solicitudes idénticas posteriores directamente desde la memoria caché, lo que reduce la necesidad de llamar al servicio back-end repetidamente. El almacenamiento en caché puede mejorar el rendimiento de la API, reducir la carga de back-end y mejorar la experiencia general de los clientes que llaman a las API a través de API Management.

En este artículo se explican las opciones de almacenamiento en caché en API Management y se resaltan los escenarios clave y las consideraciones de configuración.

Importante

El almacenamiento en caché requiere un servicio de almacenamiento en caché, ya sea una caché interna implementada automáticamente como parte del servicio API Management o una caché externa implementada por usted, y la configuración de directivas de almacenamiento en caché para especificar cómo se debe aplicar el almacenamiento en caché a las solicitudes de API.

Opciones del servicio de almacenamiento en caché

Azure API Management proporciona las siguientes opciones del servicio de almacenamiento en caché para satisfacer diferentes requisitos de rendimiento y arquitectura.

  • Interno (integrado): la caché interna (integrada) se aprovisiona automáticamente en todos los niveles de servicio de API Management (excepto el nivel consumo ). La implementación de caché interna difiere entre los niveles clásicos (Desarrollador, Básico, Estándar y Premium) y los niveles v2 (Versión básica v2, Estándar v2 y Premium v2). La caché integrada en los niveles v2 proporciona una confiabilidad mejorada. Obtenga más información sobre el almacenamiento en caché con la memoria caché integrada.

  • Caché externa : para mejorar el rendimiento y la persistencia, puede configurar opcionalmente una caché externa compatible con Redis, como Azure Managed Redis, para usarla con cualquier nivel de servicio o puerta de enlace de API Management. Obtenga más información sobre cómo configurar una caché externa con Azure Managed Redis.

En la tabla siguiente se comparan las funcionalidades de la caché interna y externa.

Capacidad Interno External
Aprovisionamiento y administración automáticas ✔️
Costo agregado ✔️
Configuración personalizada ✔️
Disponibilidad en todos los niveles y puertas de enlace No disponible en el nivel Consumo o en la puerta de enlace autohospedada ✔️
Almacenamiento regional Caché proporcionada en la misma región que la instancia de API Management y compartida entre unidades de escalado.

En una implementación de varias regiones , cada región tiene su propia memoria caché.
Depende de la preferencia del cliente
Almacenamiento persistente Persistente en las capas de la versión v2.

En los niveles clásicos (Desarrollador, Básico, Estándar y Premium), el contenido de la memoria caché no se conserva cuando se realizan las actualizaciones del servicio.
✔️
Límites por nivel El tamaño de caché varía según el nivel de servicio. No limitado
Acceso compartido por varias instancias de API Management ✔️
Compatibilidad con el almacenamiento en caché semántico ✔️
Compatibilidad con la precarga y purga de datos ✔️

Escenarios de almacenamiento en caché

Use el almacenamiento en caché en Azure API Management para escenarios como los de la tabla siguiente.

Scenario Description Tipo de caché Comportamiento con pérdida de disponibilidad o conectividad de caché
Optimización de la experiencia del cliente Acelerar el procesamiento de solicitudes repetitivas para los clientes. Interno o externo El back-end atiende las solicitudes y debe controlar la carga completa si la memoria caché no está disponible.
Control de costos y escalamiento de back-end Se puede reducir la carga y los costos del backend cuando este no esté dimensionado para manejar el tráfico completo. External Depende de la configuración de caché y servicio. Recomendación: seleccione un nivel de servicio de caché con la mayor confiabilidad y supervise el rendimiento.
Almacén de metadatos Use cache-store-value para almacenar datos arbitrarios en la memoria caché. Interno o externo Depende de la configuración de caché y servicio.

Considerations:

  • En cualquier escenario de almacenamiento en caché, considere la posibilidad de pérdida de disponibilidad o conectividad de caché. API Management usa un enfoque de "mejor esfuerzo" para la disponibilidad de la caché. Si una caché configurada no está disponible, se producen errores de caché y, de forma predeterminada, las solicitudes continúan con el servicio back-end.

  • En los niveles clásicos de API Management, la caché interna es volátil y no se conserva en las actualizaciones del servicio. Durante una actualización del servicio, la caché interna se borra en un proceso gradual que implica hasta 50% de la memoria caché a la vez.

    Nota:

    Puede configurar las opciones de actualización del servicio, incluida una ventana de mantenimiento para las actualizaciones, para minimizar los posibles impactos del cliente, como la pérdida de la memoria caché interna.

  • Si configura una caché externa, puede ser persistente, pero es responsable de garantizar la disponibilidad y la conectividad.

  • Para proteger el servicio back-end frente a picos de tráfico que podrían sobrecargarlo cuando una caché no está disponible, configure una directiva de limitación de velocidad (límite de velocidad o límite de velocidad por clave) inmediatamente después de cualquier directiva de búsqueda de caché.

Directivas de almacenamiento en caché

Configure directivas de almacenamiento en caché para controlar cómo se almacenan en caché las respuestas de API y se recuperan en Azure API Management.

  • De forma predeterminada, en las directivas de almacenamiento en caché, API Management utiliza una cache externa si está configurada y recurre a la cache integrada en caso contrario.

  • API Management proporciona directivas de almacenamiento en caché en pares, como se muestra en la tabla siguiente. En una definición de directiva, configure una directiva de búsqueda de caché en la inbound sección para comprobar las respuestas almacenadas en caché y una directiva de almacén de caché en la outbound sección para almacenar respuestas correctas en la memoria caché.

Policies Description Usage
consulta de caché / almacenamiento de caché - Recuperar una respuesta de la memoria caché
- Almacenar una respuesta en la solicitud de caché
: se usa para recuperar una respuesta de API completa de la memoria caché para una solicitud idéntica GET .
valor-de-búsqueda-en-caché / valor-de-almacenamiento-en-caché - Recuperar un valor específico de la memoria caché
- Almacenar un valor específico en la memoria caché
- Uso para escenarios de almacenamiento en caché personalizados con claves de caché específicas
azure-openai-semantic-cache-lookup / azure-openai-semantic-cache-store : compruebe si existe una respuesta semánticamente similar en la memoria caché para una solicitud de API de Azure OpenAI.
- Almacenamiento de una respuesta para una solicitud de API de Azure OpenAI
: se usa para recuperar respuestas similares a las solicitudes de la API de finalización de chat de Azure OpenAI.
llm-semantic-cache-lookup / llm-semantic-cache-store - Compruebe si existe una respuesta semánticamente similar en la memoria caché para una solicitud de API de LLM.
- Almacenamiento de una respuesta para una solicitud de API de LLM
- Uso para recuperar respuestas similares a las solicitudes de LA API de finalización de chat de LLM

Sugerencia

  • Las directivas para almacenar entradas en la memoria caché incluyen un duration atributo para especificar cuánto tiempo persiste una entrada almacenada en caché.
  • Use cache-remove-value para quitar un valor específico identificado por clave de la memoria caché.

Ejemplos de directivas de almacenamiento en caché

A continuación se muestran ejemplos básicos de directivas de almacenamiento en caché en API Management. Para obtener más ejemplos, consulte los artículos de referencia de directivas de almacenamiento en caché .

Almacenamiento en caché de respuesta

Almacenar la respuesta completa de la API en la caché interna para atender solicitudes idénticas sin llamadas al backend. En este ejemplo, la memoria caché almacena las respuestas durante siete días.

<policies>
    <inbound>
        <base />
        <cache-lookup vary-by-developer="false" vary-by-developer-groups="false" downstream-caching-type="none" must-revalidate="true" caching-type="internal" >
            <vary-by-query-parameter>version</vary-by-query-parameter>
        </cache-lookup>
    </inbound>
    <outbound>
        <cache-store duration="604800" />
        <base />
    </outbound>
</policies>

Almacenamiento en caché de valores

Almacenar en caché valores de datos específicos para reutilizarlos en varias solicitudes.

<policies>
    <inbound>
        <cache-lookup-value key="user-preferences" default-value="none" variable-name="preferences" />
        <choose>
            <when condition="@(context.Variables["preferences"].ToString() == "none")">
                <!-- Load preferences from backend -->
                <send-request mode="new" response-variable-name="prefsResponse">
                    <set-url>https://backend.api/user/preferences</set-url>
                </send-request>
                <cache-store-value key="user-preferences" value="@(((IResponse)context.Variables["prefsResponse"]).Body.As<string>())" duration="1800" />
            </when>
        </choose>
    </inbound>
</policies>

Protección de limitación de velocidad

Como procedimiento recomendado, combine la búsqueda de caché con limitación de velocidad para proteger los servicios back-end.

<policies>
    <inbound>
        <cache-lookup-value key="@("data-" + context.Request.IpAddress)" variable-name="cachedData" />
        <choose>
            <when condition="@(!context.Variables.ContainsKey("cachedData"))">
                <rate-limit calls="10" renewal-period="60" />
                <!-- Proceed to backend -->
            </when>
            <otherwise>
                <!-- Return cached data without rate limiting -->
                <return-response>
                    <set-body>@((string)context.Variables["cachedData"])</set-body>
                </return-response>
            </otherwise>
        </choose>
    </inbound>
</policies>

Consideraciones de seguridad

  • Información confidencial: evite almacenar en caché las respuestas que contienen información confidencial o personal.
  • Claves de caché: asegúrese de que las claves de caché no exponen información confidencial en registros o diagnósticos.
  • Control de acceso: la caché externa requiere controles de acceso y seguridad de red adecuados
  • Cifrado: use TLS/SSL para las conexiones a instancias de caché externas.