Partilhar via


Implementar cache de nível 2

O Data API Builder suportou há muito tempo cache em memória de Nível 1 (L1) e cabeçalhos de pedidos HTTP relacionados com cache como no-store, no-cache, e only-if-cached para influenciar o comportamento da cache.

A cache de nível 2 (L2) estende a cache para além do processo local ao adicionar uma camada de cache distribuída. Com , os resultados em cache podem ser reutilizados em múltiplas instâncias DAB e sobrevivem a reinícios individuais de L2contentores, o que faz com que as implementações sem estado pareçam menos sem estado de todas as formas corretas.

Benefícios do cache de nível 2

Usa cache de nível 2 quando quiseres:

  • Partilhe resultados em cache entre instâncias DAB escalonadas
  • Reduzir ida e volta à base de dados para leituras repetidas
  • Mantenha os recipientes sem estado quentes após reciclagem ou redistribuição
  • Melhorar o desempenho para cargas de trabalho com muita leitura
  • Participação na cache do espaço de nomes com partições

Configurar as definições de cache em tempo de execução

A cache de nível 2 é configurada globalmente sob runtime.cache. O bloco de cache em tempo de execução permite a cache em cache, define o tempo padrão para viver (TTL) e configura o fornecedor 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 em tempo de execução

Propriedade Descrição
enabled Permite o suporte à cache globalmente.
ttl-seconds Define o tempo de vida padrão da cache em segundos.
level-2.enabled Ativa a camada de cache distribuída.
level-2.provider Seleciona o fornecedor de cache distribuído. Atualmente redis é suportado.
level-2.connection-string String de ligação para a instância Redis.
level-2.partition Espaço de nomes opcional para teclas Redis e o canal do backplane. Apenas os contentores que usam a mesma partição partilham o mesmo espaço de cache distribuído.

Configurar o comportamento da cache específico da entidade

As entidades podem sobrepor o comportamento global da cache. Use o bloco de entidade cache para ativar a cache, defina um TTL personalizado e escolha o nível da 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 os níveis de cache que uma entidade utiliza.

Valor Descrição
L1 Apenas cache em memória. Rápido e local ao processo DAB atual.
L1L2 Em memória mais cache distribuída. Este nível é o padrão para entidades em cache.

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

Como funciona L1L2

Sugestão

Resumo; DRL1L2 = Request → L1 → L2 → base de dados → L2 → L1 → Resposta

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

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

Com L1L2, uma pesquisa de cache verifica primeiro L1. Em caso de L1 falha, verifica L2 se a cache de nível 2 está ativada e configurada globalmente. Se a entrada não for encontrada em nenhuma das camadas, o DAB executa a consulta à base de dados. O resultado é então armazenado tanto em L1 como L2em .

Isto significa:

  • Pedidos futuros na mesma instância são servidos a partir de locais L1
  • Pedidos noutras instâncias podem ler e L2 promover a entrada para si própria L1
  • Se um contentor reiniciar, um L1 erro seguido de um L2 acerto pode ainda evitar uma ida e volta à base de dados

Esta combinação dá-lhe uma cache distribuída quente entre instâncias escalonadas ou recicladas.

Suporte Redis

A Redis é atualmente o fornecedor de cache de nível 2. É bem adequado para este cenário porque suporta:

  • Acesso partilhado entre múltiplas instâncias DAB
  • Expiração de chaves para cache baseado em TTL
  • Leituras e escritas rápidas para cargas de trabalho de alto rendimento
  • Coordenação do backplane entre instâncias

Espaços de cache particionados

Use a opção partition opcional para isolar a atividade da cache distribuída. O DAB usa o valor da partição para namespace as chaves Redis e o canal do backplane. Apenas os contentores que partilham a mesma partição participam no mesmo espaço de cache distribuído.

Esta definição é útil quando queres:

  • Tráfego separado de produção e não produção
  • Isolar inquilinos ou ambientes
  • Impedir que serviços não relacionados partilhem entradas em cache

Consulte também