Привет всем. Я провожу оптимизацию работы нашей системы и пытаюсь переместить кэширование некоторых ресурсов с memcached на proxy_cache. ------------------ Моё окружение: ОС: Gentoo x86-84 (Linux kernel-3.3.8 #1 SMP PREEMPT x86_64 Intel(R) Core(TM) i5 CPU 750 @ 2.67GHz GenuineIntel GNU/Linux) NGINX: nginx version: nginx/1.2.2 TLS SNI support enabled configure arguments: --prefix=/usr --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error_log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --with-cc-opt=-I/usr/include --with-ld-opt=-L/usr/lib --http-log-path=/var/log/nginx/access_log --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-scgi-temp-path=/var/tmp/nginx/scgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --with-debug --with-ipv6 --with-pcre --with-http_addition_module --with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_random_index_module --with-http_stub_status_module --with-http_xslt_module --with-http_realip_module --add-module=/var/calculate/tmp/portage/www-servers/nginx-1.2.2/work/agentzh-headers-more-nginx-module-3580526 --add-module=/var/calculate/tmp/portage/www-servers/nginx-1.2.2/work/nginx-push-stream-module-0.3.4 --add-module=/var/calculate/tmp/portage/www-servers/nginx-1.2.2/work/echo-nginx-module-0.38rc2 --with-http_ssl_module --without-mail_imap_module --without-mail_pop3_module --without-mail_smtp_module --user=nginx --group=nginx
-------------------
Есть у меня одна картинка в формате png. Размером 400 Кб. Сейчас она лежит в memcached. И nginx, на ненагруженной системе, выдает её за 2 мс. Если он берет её с Backend (JBoss/Java), то время получается: 25мс.
В боевом окружении мы имеет периодические всплески запросов за этой картинкой. Когда они приходят в большом количестве (>200 в секунду), то трафик на memcached возрастает до порядка > 200 мб/c. memcached начинает слегка замедляться и просаживает всю систему.
Поэтому хотелось бы закэшировать эту картинку после получения ее с backend-a на уровне proxy_module. Для этого я сделал такую конфигурацию:
Таким образом, я хочу добиться того, чтобы nginx proxy модуль быстрее отдавал "динамическую статику" чем memcached. Proxy-кэш работает, но медленно в сравнении с memcached. Перенос каталога кэша с HDD на tmpfs на производительность не повлиял.
Хотелось бы узнать полный алгоритм работы proxy модуля в такой ситуации.
Я думал что он работает примерно так:
1. Идет на backend 2. Получает ответ от него. 3. Если надо, кэширует его в файловой системе.
4. При последующих запросах к этому ресурсу proxy модуль читает файл с HDD и оставляет в памяти. 5. И затем все остальные запросы молотит из памяти.
Где я ошибся?
И еще вопрос, можно ли еще сделать дополнительное кэширование после memcached_pass ?
Иногда очень необходимо, для разгрузки memcached.
Можно ли выставлять время инвалидации кэша в абсолютных единицах, то есть, например, ровно в 00:00 ?