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

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

No documento diz "

max define o número máximo de elementos no cache; no cache overflow, os elementos menos usados ​​recentemente (LRU) são removidos;

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

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

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

Como ficam as informações se o arquivo LRU não puder ser determinado (devido a 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 documentação este processo de carregamento também inclui os metadados, não sendo mais específico sobre o que são metadados.

A questão é: esses metadados também incluem o carimbo de data/hora do último acesso.

Porém: Para que seja contido, deve ser escrito primeiro.

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

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

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

Mas: Os dados ainda podem ser gravados em outro lugar. Ele também pode ser gravado da memória RAM para o disco (para os arquivos de cache) por outro processo posteriormente. Portanto, os dados são persistentes, mas não há garantia de que estejam atualizados no disco.

O que ainda deixa a questão sem resposta.

Responder1

Parece que o nginx pode usar o tempo de acesso no arquivo para indicar o que LRU. Inspecionando o atime em uma frota de servidores, alguns dos quais são particionados com caches menores do que outros devido ao uso de outro disco, parece que servidores com caches menores e mais pressão LRU não possuem arquivos acima de uma determinada idade, conforme medido por atime (-amin em encontrar). O comando que usei para 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 de 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 lê o horário dos arquivos na reinicialização para excluir corretamente os arquivos LRU conforme necessário.

Responder2

Esse documentohttp://czerasz.com/2015/03/30/nginx-caching-tutorial/descreve que existe um processo chamado "Carregador de cache". 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.

informação relacionada