Compartilhar via


Implementar cache de nível 2

O Construtor de API de Dados há muito suportava o cache na memória () de Nível 1 (L1) e cabeçalhos de solicitação HTTP relacionados ao cache, como no-store, no-cachee only-if-cached para influenciar o comportamento do cache.

O cache de nível 2 (L2) estende o cache além do processo local adicionando uma camada de cache distribuída. Com L2, os resultados armazenados em cache podem ser reutilizados em várias instâncias do DAB e podem sobreviver a reinicializações de contêiner individuais, o que faz com que as implantações sem estado se sintam menos apáridas de todas as maneiras certas.

Benefícios do cache de nível 2

Use o cache de nível 2 quando quiser:

  • Compartilhar resultados armazenados em cache em instâncias do DAB em expansão
  • Reduzir viagens de ida e volta do banco de dados para leituras repetidas
  • Manter os contêineres sem estado aquecidos após reciclar ou reimplantar
  • Melhorar o desempenho de cargas de trabalho de leitura pesada
  • Participação em cache de namespace com partições

Definir configurações de cache de runtime

O cache de nível 2 é configurado globalmente em runtime.cache. O bloco de cache de runtime habilita o cache, define o TTL (tempo de vida padrão) e configura o provedor de cache distribuído.

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

Propriedades de runtime

Propriedade Descrição
enabled Habilita o suporte ao cache globalmente.
ttl-seconds Define o tempo de vida útil do cache padrão em segundos.
level-2.enabled Ativa a camada de cache distribuída.
level-2.provider Seleciona o provedor de cache distribuído. Atualmente redis , há suporte.
level-2.connection-string Cadeia de conexão para a instância do Redis.
level-2.partition Namespace opcional para chaves Redis e o canal de backplane. Somente os contêineres que usam a mesma partição compartilham o mesmo espaço de cache distribuído.

Configurar o comportamento de cache específico da entidade

As entidades podem substituir o comportamento do cache global. Use o bloco de entidade cache para habilitar o cache, definir um TTL personalizado e escolher o nível de cache.

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

A propriedade cache.level

Use cache.level para controlar quais camadas de cache uma entidade usa.

Valor Descrição
L1 Somente cache na memória. Rápido e local para o processo atual do DAB.
L1L2 Na memória mais cache distribuído. Esse nível é o padrão para entidades armazenadas em cache.

Se L2 não estiver habilitada globalmente, uma entidade configurada com L1L2 se comporta como L1.

Como L1L2 funciona

Dica

TL; DRL1L2 = Solicitação → L1 → L2 → banco de dados → L2 → L1 → Resposta

Por padrão, uma entidade com cache habilitado usa o nível L1L2.

  • L1 é o cache por processo na memória.
  • L2 é a camada de cache distribuída, atualmente Redis, além de um backplane para coerência entre instâncias.

Primeiro, uma pesquisa de cache com L1L2 verifica L1. Em um L1 erro, ele verifica L2 se o cache de nível 2 está habilitado e configurado globalmente. Se a entrada não for encontrada em nenhuma das camadas, o DAB executará a consulta de banco de dados. Em seguida, o resultado é armazenado em ambos L1 e L2.

Isso significa que:

  • Solicitações futuras na mesma instância são atendidas do local L1
  • Solicitações em outras instâncias podem ler L2 e promover a entrada em suas próprias L1
  • Se um contêiner for reiniciado, um L1 erro seguido de um L2 hit ainda poderá evitar uma viagem de ida e volta do banco de dados

Essa combinação oferece um cache distribuído quente em instâncias escalonadas ou recicladas.

Suporte ao Redis

O Redis é o provedor atual para o cache de nível 2. Ele é adequado para esse cenário porque dá suporte a:

  • Acesso compartilhado em várias instâncias do DAB
  • Expiração de chave para cache baseado em TTL
  • Leituras e gravações rápidas para cargas de trabalho de alta taxa de transferência
  • Coordenação de backplane entre instâncias

Espaços de cache particionados

Use a configuração opcional partition para isolar a atividade de cache distribuído. O DAB usa o valor da partição para namespace de chaves Redis e o canal de backplane. Somente os contêineres que compartilham a mesma partição participam do mesmo espaço de cache distribuído.

Essa configuração é útil quando você deseja:

  • Separar o tráfego de produção e não produção
  • Isolar locatários ou ambientes
  • Impedir que serviços não relacionados compartilhem entradas armazenadas em cache

Consulte também