Definir expiração do cache L1 em um processador de mensagens

A Apigee Edge oferece armazenamento em cache para persistência de dados entre solicitações. Quando os dados da API são recebidos, eles são armazenados em cache por um breve período e depois excluídos. O tempo máximo que um dado é mantido antes de ser excluído é chamado de expiração ou time to live (TTL) do cache. Cada cache tem um TTL padrão, mas, em alguns casos, pode ser necessário alterar o valor do TTL para melhorar o desempenho da API.

Tipos de cache

Os dados da API são armazenados em dois tipos de cache:

  • Nível 1 (L1): cache em memória, que tem acesso mais rápido, mas menos capacidade de armazenamento disponível.
  • Nível 2 (L2): cache persistente em um repositório de dados do Cassandra, que tem acesso mais lento, mas mais capacidade de armazenamento disponível.

Quando uma entrada de dados no cache L1 atinge o TTL L1, ela é excluída. No entanto, uma cópia da entrada é mantida no cache L2 (que tem um TTL mais longo do que o cache L1), onde permanece acessível para outros processadores de mensagens. Consulte Níveis de cache na memória e permanentes para mais detalhes sobre o cache.

TTL máximo de L1

No Edge para nuvem privada, é possível definir o TTL máximo do cache L1 para cada processador de mensagens usando a propriedade Max L1 TTL (conf_cache_max.l1.ttl.in.seconds). Uma entrada no cache L1 vai expirar depois de atingir o valor Max L1 TTL e será excluída.

Observações:

  • Por padrão, o TTL máximo de L1 está desativado (com o valor -1). Nesse caso, o TTL de uma entrada no cache L1 é determinado pelas configurações de expiração da política PopulateCache (para os caches L1 e L2).
  • O TTL máximo de L1 só tem efeito se o valor for menor que a validade geral do cache.

Como definir o TTL máximo de L1

É possível definir o TTL máximo de L1 em um processador de mensagens da seguinte maneira:

  1. Abra o arquivo de configuração /opt/apigee/customer/application/message-processor.properties em um editor. Se o arquivo não existir, crie-o.
  2. Defina a propriedade "TTL máximo de L1" com o valor desejado:
    conf_cache_max.l1.ttl.in.seconds = 180

    Recomendamos o valor de 180 segundos.

  3. Verifique se o arquivo de propriedades pertence ao usuário "apigee":
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Reinicie o processador de mensagens:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Diretrizes para definir o TTL máximo de L1

Ao definir o TTL máximo de L1, siga estas diretrizes:

  • Perdas de RPC:se você notar perdas de chamada de procedimento remoto (RPC) entre processadores de mensagens (MPs), especialmente em vários data centers, é possível que o cache L1 tenha entradas desatualizadas, que vão permanecer assim até serem excluídas do cache L1. Definir o TTL máximo de L1 como um valor menor força a remoção de todas as entradas desatualizadas e a substituição por valores novos do cache de L2 mais cedo.
    Solução:diminua conf_cache_max.l1.ttl.in.seconds.
  • Carga excessiva no Cassandra:quando você define um valor para o TTL máximo de L1, as entradas de cache L1 expiram com mais frequência, o que leva a mais ausências no cache L1 e mais ocorrências em cache L2. Como o cache L2 será acessado com mais frequência, o Cassandra vai ter uma carga maior.
    Solução:aumente conf_cache_max.l1.ttl.in.seconds.

Como regra geral, ajuste o TTL máximo de L1 para um valor que equilibre a frequência de falhas de RPC entre MPs com a carga potencial no Cassandra.

Recomendamos definir o valor de conf_cache_max.l1.ttl.in.seconds como pelo menos 180 segundos (3 minutos) para manter o processamento funcionando sem problemas.