а кто-нибудь пробовал ncache

Viatcheslav E. Kouznetsov slava at auto.ru
Thu Feb 28 11:12:07 MSK 2008


В общем ситуация такая...
у меня стоит связка
storage массив привязан к серверу на нем nginx
далее другие железки на них ncache и nginx наружу
Раньше вместо ncache стоял squid.
Сборка на CentOS проходит с песнями (пришлось поправить один хидер)
Скрипт для создания кеш-директорий имеет в самом начале exit 0 :)))))
Конфиг у меня такой

-----------------------------------
user  nobody nobody;

worker_processes 4;
worker_rlimit_nofile 81920;
worker_priority -10;
#error_log   /dev/null;
error_log  logs/error.log;
pid /var/run/ncache.pid;

events
{
  worker_connections  20480;
}

http {
  sendfile        on;
  tcp_nopush     on;
  tcp_nodelay    on;

  keepalive_timeout  15;

  cache_max_size 25;

  upstream backend1 {
    server 192.168.0.14:80;
    cachedir /servers/ncache1/data0/ 128 128;
    cachedir /servers/ncache1/data1/ 64 64;
  }

  upstream backend2 {
    server 192.168.0.14:80;
    cachedir /servers/ncache2/data0/ 128 128;
    cachedir /servers/ncache2/data1/ 64 64;
  }

  upstream backend3 {
    server 192.168.0.14:80;
    cachedir /servers/ncache3/data0/ 128 128;
    cachedir /servers/ncache3/data1/ 64 64;
  }

  upstream backend4 {
    server 192.168.0.14:80;
    cachedir /servers/ncache4/data0/ 128 128;
    cachedir /servers/ncache4/data1/ 64 64;
  }

  server {
    listen       8080;
    set $purge_uri $request_uri;
    access_log off;

    location / {
      if ($request_method ~ "PURGE") {
        rewrite (.*) /PURGE$1 last;
      }
    proxy_pass http://backend1;
    proxy_set_header        Host            $host;
    proxy_set_header        X-Real-IP       $remote_addr;

    #here you can ignore any client use "Cache-Control:no-cache" headers
    #refresh the cache
    proxy_ignore_client_no_cache off;
    }

    #allow some one who can use http PURGE method delete the caches
    location /PURGE/ {
      internal;
      allow   10.1.1.0/24;
      deny    all;        purge;
    }

    #use "http://{serverip}/status_infos" watch nginx services status

    location /status_infos {
      access_log      off;
      stub_status     on;
    }
  }
  server {
    listen       8081;
    set $purge_uri $request_uri;
    access_log off;

    location / {
      if ($request_method ~ "PURGE") {
        rewrite (.*) /PURGE$1 last;
      }
    proxy_pass http://backend2;
    proxy_set_header        Host            $host;
    proxy_set_header        X-Real-IP       $remote_addr;

    #here you can ignore any client use "Cache-Control:no-cache" headers 
refresh the cache
    proxy_ignore_client_no_cache off;
    }

    #allow some one who can use http PURGE method delete the caches
    location /PURGE/ {
      internal;
      allow   10.1.1.0/24;
      deny    all;        purge;
    }

    #use "http://{serverip}/status_infos" watch nginx services status

    location /status_infos {
      access_log      off;
      stub_status     on;
    }
  }
  server { 
    listen       8082;
    set $purge_uri $request_uri;
    access_log off;

    location / {
      if ($request_method ~ "PURGE") {
        rewrite (.*) /PURGE$1 last;
      }
    proxy_pass http://backend3;
    proxy_set_header        Host            $host;
    proxy_set_header        X-Real-IP       $remote_addr;

    #here you can ignore any client use "Cache-Control:no-cache" headers 
refresh the cache
    proxy_ignore_client_no_cache off;
    }

    #allow some one who can use http PURGE method delete the caches
    location /PURGE/ {
      internal;
      allow   10.1.1.0/24;
      deny    all;        purge;
    }

    #use "http://{serverip}/status_infos" watch nginx services status

    location /status_infos {
      access_log      off;
      stub_status     on;
    }
  }
  server {
    listen       8083;
    set $purge_uri $request_uri;
    access_log off;

    location / {
      if ($request_method ~ "PURGE") {
        rewrite (.*) /PURGE$1 last;
      }
    proxy_pass http://backend4;
    proxy_set_header        Host            $host;
    proxy_set_header        X-Real-IP       $remote_addr;

    #here you can ignore any client use "Cache-Control:no-cache" headers 
refresh the cache
    proxy_ignore_client_no_cache off;
    }

    #allow some one who can use http PURGE method delete the caches
    location /PURGE/ {
      internal;
      allow   10.1.1.0/24;
      deny    all;        purge;
    }

    #use "http://{serverip}/status_infos" watch nginx services status

    location /status_infos {
      access_log      off;
      stub_status     on;
    }
  }
}
-------------------

Т.е. отличие от nginx'а важными параметрами будут
cache_max_size (2 ^ cache_max-size кол-во элементов хранимых в кеше,
т.е. в конфиге 2^25 т.е. порядка 30 млн.)
cachedir собственно директории для кеша. Параметры 128 и 64, что стоят
в конфиге говорят о вложенности, но каким образом я еще не понял.
Сам кеш он чистит удаляя самые старые объекты. Если необходима принудительная
очистка, то делается PURGE-запрос.
Теперь что касается сравнения со squid'ом...
Мне не совсем корректно их сравнивать, т.к. у меня стоял cache_mem в 2Гб
т.е. я сквиду отдавал много памяти. Под нагрузкой он отъедал еще. И запущено
на каждой железке было по четыре сквида.
В сумме получалось порядка 14-15Гб.
ncache же в приведенной выше конфигурации съедает порядка 9.5Гб.
По скорости - ncache, на взгляд, работает быстрее. Если раньше с одной железки
уходило (в среднем) 60Mb/s, сейчас прим. 80Mb/s

Вот, вроде бы и все. Если есть вопросы - welcome.

Удачи,
	Слава.

В сообщении от Thursday 28 February 2008 09:46:18 Михаил Монашёв написал(а):
> Здравствуйте Viatcheslav,
>
> VEK> Та-ак....поставил сию весчь на боевые сервера...Неделя = полёт
> нормальный VEK> Кому интересно - могу отписать.
>
> Отпиши  плз  как его конфигурировать и как он кэш чистит. Из того, что
> есть на сайте, это совершенно не понятно.
>
> --
>
> С уважением,
> Михаил Монашёв, SoftSearch.ru
> mailto:postmaster at softsearch.ru
> ICQ# 166233339
> http://michael.mindmix.ru/
> Без бэкапа по жизни.




More information about the nginx-ru mailing list