Поделиться через


Общие сведения о кэшировании

ПРИМЕНЯЕТСЯ КО ВСЕМ уровням управления API

Настройте кэширование в службе "Управление API Azure" для хранения и получения ответов на запросы API и связанные сведения. Сохраняя ответы от внутренних служб, управление API может обслуживать последующие идентичные запросы непосредственно из кэша, уменьшая необходимость многократного вызова серверной службы. Кэширование может повысить производительность API, уменьшить нагрузку серверной части и повысить общий опыт вызовов API клиентами с помощью управления API.

В этой статье описываются параметры кэширования в службе "Управление API" и рассматриваются ключевые сценарии и рекомендации по настройке.

Это важно

Для кэширования требуется как служба кэширования , либо внутренний кэш, развернутый автоматически в рамках службы управления API, либо внешний кэш, развернутый вами, и настройка политик кэширования , чтобы указать, как кэширование должно применяться к запросам API.

Параметры службы кэширования

Управление API Azure предоставляет следующие параметры службы кэширования для удовлетворения различных требований к производительности и архитектуре.

  • Внутренний (встроенный): внутренний (встроенный) кэш автоматически подготавливается во всех уровнях служб управления API (за исключением уровня потребления ). Реализация внутреннего кэша отличается между классическими уровнями (Разработчик, Базовый, Стандартный и Премиум) и уровнями версии 2 (Базовый версии 2, Standard версии 2 и Premium версии 2). Встроенный кэш на уровнях версии 2 обеспечивает повышенную надежность. Узнайте больше о кэшировании со встроенным кэшем.

  • Внешний кэш. Для повышения производительности и сохраняемости при необходимости настройте внешний кэш, совместимый с Redis, например Управляемый Redis Azure, для использования с любым уровнем службы управления API или шлюзом. Дополнительные сведения о настройке внешнего кэша с использованием Azure Managed Redis.

В следующей таблице сравниваются возможности внутреннего и внешнего кэша.

Capability Внутреннее External
Автоматическое предоставление и управление ✔️
Добавлена стоимость ✔️
Настраиваемая конфигурация ✔️
Доступность во всех уровнях и шлюзах Недоступно в уровне потребления или самостоятельно размещённом шлюзе ✔️
Региональное хранилище Кэш предоставляется в том же регионе, что и экземпляр API Management, и разделяется между модулями масштабирования.

В развертывании с несколькими регионами каждый регион имеет собственный кэш.
Зависит от предпочтений клиента
Постоянное хранилище Постоянный на уровнях версии 2.

На классических уровнях (разработчик, базовый, стандартный и премиум) содержимое кэша не сохраняется при обновлении службы.
✔️
Ограничения для каждого уровня Размер кэша зависит от уровня служб Не ограничено
Общий доступ несколькими экземплярами службы управления API ✔️
Поддержка семантического кэширования ✔️
Поддержка предварительной загрузки и очистки данных ✔️

Сценарии кэширования

Используйте кэширование в службе "Управление API Azure" для таких сценариев, как в следующей таблице.

Scenario Description Тип кэша Поведение при потере доступности кэша или подключении
Оптимизация клиентского интерфейса Ускорьте повторную обработку запросов для клиентов. Внутренний или внешний Серверная часть обслуживает запросы и должна обрабатывать полную нагрузку, если кэш недоступен.
Управление затратами и масштабированием серверной части Уменьшите нагрузку и затраты на серверную часть, если серверная часть не масштабируется для полного трафика. External Зависит от конфигурации кэша и службы. Рекомендация. Выберите уровень служб кэша с высокой надежностью и мониторингом производительности.
Хранилище метаданных Используйте кэш-хранилище-значение для хранения произвольных данных в кэше. Внутренний или внешний Зависит от конфигурации кэша и службы.

Considerations:

  • В любом сценарии кэширования рассмотрите возможность потери доступности кэша или подключения. Управление API использует подход "максимально возможные усилия" для обеспечения доступности кэша. Если настроенный кэш недоступен, происходят пропуски кэша, и по умолчанию запросы отправляются на основной сервис.

  • На классических уровнях управления API внутренний кэш является переменным и не сохраняется во всех обновлениях службы. Во время обновления службы внутренний кэш очищается в постепенном процессе, который включает до 50% кэша за раз.

    Замечание

    Можно настроить параметры обновления службы, включая период обслуживания обновлений, чтобы свести к минимуму потенциальные последствия для клиента, такие как потеря внутреннего кэша.

  • Если вы настроите внешний кэш, он может быть постоянным, но вы несете ответственность за обеспечение доступности и подключения.

  • Чтобы защитить серверную службу от пиков трафика, которые могут перегружать ее, если кэш недоступен, настройте политику ограничения скорости (ограничение скорости или ограничение скорости по ключу) сразу после любой политики поиска кэша.

Политики кэширования

Настройте политики кэширования для управления кэшированием и получением ответов API в службе управления API Azure.

  • По умолчанию в политиках кэширования система управления API использует внешний кэш, если он настроен, иначе возвращается ко встроенному кэшу.

  • Управление API предоставляет политики кэширования в парах, как показано в следующей таблице. В определении правил настройте правило запроса кэша в разделе inbound, чтобы проверить наличие кэшированных ответов, и правило кэширования в разделе outbound, чтобы сохранить успешные ответы в кэше.

Policies Description Usage
поиск кэша / cache-store — получение ответа из кэша
— Хранение ответа в запросе кэша
— Использование для получения полного ответа API из кэша для идентичного GET запроса
cache-lookup-value / cache-store-value — получение определенного значения из кэша
— хранение определенного значения в кэше
— Использование для пользовательских сценариев кэширования с определенными ключами кэша
azure-openai-semantic-cache-lookup / azure-openai-semantic-cache-store — Проверьте, существует ли семантический ответ в кэше для запроса API OpenAI Azure
— Хранение ответа на запрос API Azure OpenAI
— Использование для получения аналогичных ответов на запросы API завершения чата Azure OpenAI
llm-semantic-cache-lookup / llm-semantic-cache-store — Проверьте, существует ли семантический ответ в кэше для запроса API LLM
— Храните ответ для запроса API LLM
— Использование для получения аналогичных ответов на запросы API завершения чата LLM

Подсказка

  • Политики хранения записей в кэше включают duration атрибут, чтобы указать, сколько времени сохраняется кэшированная запись.
  • Используйте cache-remove-value, чтобы удалить конкретное значение, определенное ключом, из кэша.

Примеры политики кэширования

Ниже приведены основные примеры политик кэширования в службе управления API. Дополнительные примеры см. в справочных статьях по политике кэширования .

кэширование ответов;

Кэшируйте полный ответ API во внутреннем кэше, чтобы обслуживать идентичные запросы без внутренних вызовов. В этом примере кэш сохраняет ответы в течение семи дней.

<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>

Кэширование значений

Кэшируйте определенные значения данных для повторного использования в нескольких запросах.

<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>

Защита ограничения скорости

Рекомендуется объединить поиск кэша с ограничением скорости для защиты внутренних служб.

<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>

Вопросы безопасности

  • Конфиденциальные данные: избегайте кэширования ответов, содержащих конфиденциальную или личную информацию
  • Ключи кэша: убедитесь, что ключи кэша не предоставляют конфиденциальную информацию в журналах или диагностике
  • Управление доступом: для внешнего кэша требуются надлежащие средства управления безопасностью сети и доступом.
  • Шифрование. Использование TLS/SSL для подключений к экземплярам внешнего кэша