Re: wait time при кешировании proxy cache

2018-02-22 Пенетрантность Maxim Dounin
Hello!

On Thu, Feb 22, 2018 at 12:03:10PM -0500, Bloof wrote:

> Добрый день.
> 
> Я использую nginx как раздающий сервер для кеширования небольших видеофайлов
> с другого сервера-хранилища. Среднее время получения одного файла из
> хранилища 20 мсек, максимальное 200 мсек. Если два клиента приходят к nginx
> за одним файлом практически одновременно, то nginx одного клиента ставит на
> загрузку файла из хранилища, а второй клиент попадает на ожидание
> lock_timeout/lock_age
> (https://github.com/nginx/nginx/blob/branches/stable-1.12/src/http/ngx_http_file_cache.c#L452).
> При этом ставится таймер, который каждые 500 мсек проверяет наличие файла в
> кеше. Получается, что время таймера сильно больше времени получения файла из
> хранилища. Уменьшать proxy_cache_lock_timeout нет возможности, так как можно
> перегрузить канал между nginx и хранилищем. Есть ли возможность
> обойти/уменьшить этот таймер, кроме как менять значение в сорцах и
> перекомпилировать nginx? Можно ли поставить что-то типа inotify ивента на
> появление/изменение файла в кеше?

Нет, сейчас способов как-то повлиять на этот таймер, кроме как с 
помощью малого значения proxy_cache_lock_timeout, нет.

-- 
Maxim Dounin
http://mdounin.ru/
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

wait time при кешировании proxy cache

2018-02-22 Пенетрантность Bloof
Добрый день.

Я использую nginx как раздающий сервер для кеширования небольших видеофайлов
с другого сервера-хранилища. Среднее время получения одного файла из
хранилища 20 мсек, максимальное 200 мсек. Если два клиента приходят к nginx
за одним файлом практически одновременно, то nginx одного клиента ставит на
загрузку файла из хранилища, а второй клиент попадает на ожидание
lock_timeout/lock_age
(https://github.com/nginx/nginx/blob/branches/stable-1.12/src/http/ngx_http_file_cache.c#L452).
При этом ставится таймер, который каждые 500 мсек проверяет наличие файла в
кеше. Получается, что время таймера сильно больше времени получения файла из
хранилища. Уменьшать proxy_cache_lock_timeout нет возможности, так как можно
перегрузить канал между nginx и хранилищем. Есть ли возможность
обойти/уменьшить этот таймер, кроме как менять значение в сорцах и
перекомпилировать nginx? Можно ли поставить что-то типа inotify ивента на
появление/изменение файла в кеше?

Мой nginx.conf

worker_processes 8;
worker_cpu_affinity auto;

events {
worker_connections 32768;
use epoll;
multi_accept on;
}

http {
sendfile on;
tcp_nopush on;

proxy_cache_path /storage/cache levels=1:2 keys_zone=ssd_cache:10m
inactive=10m use_temp_path=off max_size=1G;
proxy_http_version 1.1;

upstream backend {
server some_other_server:80 max_fails=0;
keepalive 16;
}

server {
listen 80;

location ~ ^/($.+)\.mp4$ {
proxy_pass http://backend;
proxy_cache_key "$request_method|$fname";
proxy_cache ssd_cache;
proxy_cache_revalidate on;
proxy_set_header Connection "";
proxy_cache_lock on;
proxy_cache_lock_timeout 300s;
proxy_cache_lock_age 5s;
proxy_cache_use_stale error timeout invalid_header updating;
proxy_buffering on;
}
}
}

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,278731,278731#msg-278731

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru