Oh minha goiaba! Estamos mudando para a cafeína

O armazenamento em cache é extremamente importante! Ele fornece tempo de resposta rápido, permitindo melhorias de desempenho sem esforço em certos casos de uso. No Avance, recentemente mudamos para o cache de cafeína , depois de usar o cache de goiaba na memória por muitos anos.

Inicio

A biblioteca Caffeine  é uma reescrita do cache do goiaba que usa uma API inspirada no goiaba que retorna CompletableFutures, permitindo o carregamento automático assíncrono de entradas no cache. No qual o cache do Guava se baseia.

Goiaba

  1. A goiaba é bloqueada durante o carregamento quando uma chave não está presente no cache.
    Queríamos alterar a API para funcionar de forma assíncrona, mas a complexidade adicionada dificultava o entendimento e a solução de problemas do código.
    Para tornar o Guava sem bloqueio, substituímos os métodos load e loadAll do CacheLoader para fazer com que a API retorne um futuro.
  2. Como alteramos a API para retornar um futuro, encontramos um problema. A goiaba não sabe que a usamos para armazenar futuros, portanto, armazena futuros concluídos com uma exceção também. Para impedir que as exceções sejam armazenadas no cache, precisamos adicionar mais complexidade ao nosso código.

Cafeína IN

  1. A cafeína é uma reescrita do cache do Guava que usa uma API que retorna  CompletableFutures  fora da caixa, permitindo o carregamento automático assíncrono de entradas no cache.
  2. A cafeína remove futuros que são concluídos com uma exceção do cache.
  3. A cafeína usa uma política de despejo de Menos Utilizados Recentemente (LRU) e uma política de admissão baseada em frequência, com base no esboço CountMin. Tem uma taxa de acerto melhor que a LRU para muitas cargas de trabalho.

Referência da taxa de acerto de Goiaba vs Caffeina

Analisamos o comportamento do serviço com tráfego real sob diferentes configurações de cache para ter uma idéia de como os serviços de produção se comportarão.

O cache aferido contém URLs de imagem codificadas pelo UUID e segue um padrão de acesso dos dados mais frequentes / menos frequentes, que é o nosso caso de uso mais comum no Avance.

Nos benchmarks abaixo, não medimos e, portanto, não temos interpretação do uso de memória. Mas analisar as taxas de acerto leva a algumas idéias interessantes.

1.  Tamanho do cache:  10 mil  itens
Expiração após gravação: 5 min

Taxa de acertos com  10 mil  itens:

Cafeína 28,33%
Goiaba 20,95%

2.  Tamanho do cache:  50k  itens
Expiração após gravação: 20 min

Taxa de acertos com 50  mil  itens:

Cafeína 56,04%
Goiaba 50,01%

3.  Tamanho do cache:  100 mil  itens
Expiração após gravação: 20 min

Taxa de acertos com  100 mil  itens:

Cafeína 70.10%
Goiaba 66.77%

4.  Tamanho do cache: 300k itens
Expiração após gravação: 20 min

Taxa de acertos com  300 mil  itens:

Cafeína 87,19%
Goiaba 84,85%

Conclusão

Conseguimos! Com pequenas alterações no código de infraestrutura (como as APIs Caffeine e Guava são quase idênticas), aprimoramos nossa taxa de acertos e reduzimos a complexidade do código para serviços críticos em nosso sistema.

Honestamente, a cafeína e melhor que a goiaba!

 

Máxima comunicação com proteção ao extremo? Avance Network: A verdadeira rede social junte-se a nós


Strong

5178 مدونة المشاركات

التعليقات