A política de expurgação do cache de LRU do nginx é persistente durante as reinicializações?

2

No documento, diz "

max sets the maximum number of elements in the cache; on cache overflow the least recently used (LRU) elements are removed;

É persistente nas reinicializações do nginx ou do servidor?

Eu me pergunto como isso é rastreado? Em memória? Ou maby usando o último registro de data e hora de acesso do sistema de arquivos?

Não consigo encontrar nenhuma informação sobre isso.

Como é a informação se o arquivo LRU não pode ser determinado (por causa de uma reinicialização)

Editar:

Estou ciente do processo do carregador de cache nginx. Se não fosse por esse processo, os arquivos de cache não seriam persistentes.

Conforme a documentação, esse processo de carregamento também inclui os metadados, não sendo mais específico sobre quais metadados são.

A pergunta é: esses metadados também incluem o último registro de data e hora de acesso.

No entanto: Para que seja contido, deve ser escrito primeiro.

Eu configurei um inotifywait em um arquivo e o solicitei. Isto é o que a solicitação HTTP para um arquivo de cache resulta em:

cache-filename OPEN 
cache-filename ACCESS 
cache-filename CLOSE_NOWRITE,CLOSE 

Parece não ocorrer modificação do arquivo, o que leva à conclusão preliminar de que os dados da LRU não são gravados no disco e, portanto, não são persistentes.

Mas: Os dados ainda podem ser escritos em outro lugar. Também pode ser escrito de ram para disco (para o cache fies) por outro processo posterior. Portanto, os dados são persistentes, mas não garantimos que estejam atualizados no disco.

O que ainda deixa a pergunta sem resposta.

    
por The Shurrican 29.09.2015 / 18:42

2 respostas

1

Parece que o nginx pode usar o tempo de acesso no arquivo para indicar o que a LRU. Inspecionando o tempo em uma frota de servidores, alguns dos quais são particionados com caches menores do que outros devido ao uso de outros discos, parece que servidores com caches menores e mais pressão LRU não têm arquivos acima de uma certa idade, conforme medido por atime (-amin em encontrar). O comando que eu costumava ver isso é:

for i in 'seq 1000 100 4000'; do 
    echo -n "Files accessed more than $i minutes ago: "
    find /opt/nginx-cache/data -type f -amin +$i | wc -l
done

E a saída de um dos nossos servidores:

Files accessed more than 1000 minutes ago: 52154
Files accessed more than 1100 minutes ago: 40582
Files accessed more than 1200 minutes ago: 25527
Files accessed more than 1300 minutes ago: 19567
Files accessed more than 1400 minutes ago: 13384
Files accessed more than 1500 minutes ago: 7683
Files accessed more than 1600 minutes ago: 4597
Files accessed more than 1700 minutes ago: 3038
Files accessed more than 1800 minutes ago: 1916
Files accessed more than 1900 minutes ago: 1251
Files accessed more than 2000 minutes ago: 837
Files accessed more than 2100 minutes ago: 585
Files accessed more than 2200 minutes ago: 459
Files accessed more than 2300 minutes ago: 365
Files accessed more than 2400 minutes ago: 258
Files accessed more than 2500 minutes ago: 101
Files accessed more than 2600 minutes ago: 8
Files accessed more than 2700 minutes ago: 0
Files accessed more than 2800 minutes ago: 0
Files accessed more than 2900 minutes ago: 0
Files accessed more than 3000 minutes ago: 0

Se isso estiver correto, o carregador de cache provavelmente lerá o tempo dos arquivos na reinicialização para excluir corretamente os arquivos LRU, conforme necessário.

    
por 03.04.2017 / 02:27
0

Este documento link descreve que existe um processo chamado "Cache loader". Ele é executado apenas uma vez (na inicialização) e carrega os metadados na zona de memória. Ele é executado em iterações até que todas as chaves sejam carregadas.

    
por 29.09.2015 / 21:07

Tags