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


Реализация кэша уровня 2

Построителю данных долго поддерживается кэш в памяти и заголовки HTTP-запросов, связанных no-storeno-cacheonly-if-cached с кэшем,L1 а также для влияния на поведение кэша.

Кэш уровня 2 (L2) расширяет кэширование за пределами локального процесса путем добавления уровня распределенного кэша. С L2помощью кэшированных результатов можно повторно использовать в нескольких экземплярах DAB и выжить отдельные перезапуски контейнеров, что делает развертывания без отслеживания состояния менее без отслеживания состояния всеми правильными способами.

Преимущества кэша уровня 2

Используйте кэш уровня 2, если вы хотите:

  • Совместное использование кэшированных результатов между масштабируемыми экземплярами DAB
  • Уменьшение циклического обхода базы данных для повторяющихся операций чтения
  • Сохранение тепла контейнеров без отслеживания состояния после перезагрузки или повторного развертывания
  • Повышение производительности рабочих нагрузок с большим объемом чтения
  • Участие кэша пространства имен с секциями

Настройка параметров кэша среды выполнения

Кэш уровня 2 настраивается глобально.runtime.cache Блок кэша среды выполнения включает кэширование, задает время жизни по умолчанию (TTL) и настраивает поставщик распределенного кэша.

{
  "runtime": {
    "cache": {
      "enabled": true,
      "ttl-seconds": 30,
      "level-2": {
        "enabled": true,
        "provider": "redis",
        "connection-string": "localhost:6379",
        "partition": "prod-api"
      }
    }
  }
}

Свойства среды выполнения

Недвижимость Описание
enabled Обеспечивает глобальную поддержку кэша.
ttl-seconds Задает время кэширования по умолчанию в секундах.
level-2.enabled Включает уровень распределенного кэша.
level-2.provider Выбирает поставщика распределенного кэша. redis Сейчас поддерживается.
level-2.connection-string Строка подключения для экземпляра Redis.
level-2.partition Необязательное пространство имен для ключей Redis и канала backplane. Только контейнеры, использующие один и тот же раздел, используют одно и то же распределенное пространство кэша.

Настройка поведения кэша для конкретной сущности

Сущности могут переопределить поведение глобального кэша. Используйте блок сущности cache для включения кэширования, задания настраиваемого TTL и выбора уровня кэша.

{
  "entities": {
    "Products": {
      "source": "dbo.Products",
      "cache": { "enabled": true, "ttl-seconds": 120, "level": "L1L2" }
    },
    "Orders": {
      "source": "dbo.Orders",
      "cache": { "enabled": true, "level": "L1" }
    }
  }
}

Свойство cache.level

Используется cache.level для управления уровнями кэша, используемыми сущностью.

Ценность Описание
L1 Только кэш в памяти. Быстрый и локальный процесс DAB.
L1L2 В памяти плюс распределенный кэш. Этот уровень используется по умолчанию для кэшированных сущностей.

Если L2 она не включена глобально, сущность, настроенная с L1L2 поведением как L1.

Как работает L1L2

Подсказка

TL; DRL1L2 = запрос → L1 → L2 → базы данных → L2 → L1 → ответ

По умолчанию сущность с включенным кэшированием использует уровень L1L2.

  • L1 — это кэш в памяти для каждого процесса.
  • L2 — это уровень распределенного кэша, в настоящее время Redis, а также серверная планка для согласованности между экземплярами.

При L1L2 первой проверке L1 кэша поиск. Если кэширование L1 уровня 2 глобально включено и настроено, проверяет L2 , включен ли кэширование уровня 2. Если запись не найдена на любом уровне, DAB выполняет запрос базы данных. Затем результат сохраняется в обоих L1 и L2.

Это означает:

  • Будущие запросы на том же экземпляре обслуживаются из локального экземпляра L1
  • Запросы на другие экземпляры могут считывать и L2 повышать уровень входа в свои собственные L1
  • Если контейнер перезагружается, за которым следует L2 попадание, L1 может по-прежнему избежать обхода базы данных

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

Поддержка Redis

Redis — это текущий поставщик для кэша уровня 2. Он хорошо подходит для этого сценария, так как он поддерживает:

  • Общий доступ между несколькими экземплярами DAB
  • Срок действия ключа для кэширования на основе TTL
  • Быстрые операции чтения и записи для рабочих нагрузок с высокой пропускной способностью
  • Координация обратной планки между экземплярами

Секционированные пространства кэша

Используйте необязательный partition параметр для изоляции действия распределенного кэша. DAB использует значение секции для ключей Redis пространства имен и канала backplane. Только контейнеры, совместно использующие одну секцию, участвуют в одном распределенном пространстве кэша.

Этот параметр полезен при желании:

  • Отдельный рабочий и непроизводный трафик
  • Изоляция клиентов или сред
  • Запретить несвязанным службам совместное использование кэшированных записей

См. также