memcached integration idea + other ideas

sjsoft at newmail.ru sjsoft at newmail.ru
Sat Oct 7 04:32:14 MSD 2006


Здравствуйте, Sergey.

Вы писали 7 октября 2006 г., 6:08:01:

> Memcached integration as a caching mechanism


> MAIN IDEA:

> 1. caching layer
>     if url + params or F(url,params) is in memcached return cached data
> w/o backend call
>    
>      F(x) - function such as crc32 / md5 / sha / ...

>      location /dir {
>           mem_cache on;  // activate cache check prior to backend query
>     }

> 2. Static data auto caching:
>     cache files according to criteria and specified timeout.
>   
>     Example: cache all gif / jpg (  /\.(jpg|gif)$/i  ) files for 10 minutes

>     location ~* ^.+\.(jpg|jpeg|gif)$ {
>        mem_cache on;                 //  turn on caching (#1)
>        mem_cache_ttl 600;            //  default cache time
>     }
А зачем кэшировать статику? Она же неизменна. В чем соль? Если соль в
том, что статика будет в памяти висеть, так используйте рам-диск.
Доступ на рам-диск быстрее, чем на обычные винты. Зачем телеге
пятое колесо?

> 3. Dynamic data caching:
>     Cache files according to  X-cache header
>   
>     Example:
>       header("X-cache: $timeout");   // cache url call for given timeout
Да и динамика судя по всему будет кэшироваться, очень странным
образом. Как бы скрипт не будет отвечать за достоверность кэша вообще.
Ведь, даже если скрипт вызыван с теми же параметрами, он может делать
запросы из базы, в которой чтолибо уже изменено. А так кэш будет
упорно показывать старые данные.

> 4. Internal server redirects
>     header("X-redirect: $timeout");

>     same as in Java Servlets forward.
>     a.    NGINX -> BACKEND1
>     b.    backend returns X-redirect and URL in  REDIR_URL
>     c.    NGINX -> REDIR_URL

>     maybe this already implemented
Вот этот механизм уже реализован в nginx и я считаю его наиболее
перспективным. Скрипт отрабатывает данные и если ничего не менялось(а
скрипт то должен знать, менялось или нет.) он выдает адрес внутреннего
редиректа, на собой же сгенерированую статику. Чем это хуже, если не на рам-диск
будет пихаться а в memcached я не понимаю.

> 5. Redirect to "hash key"
>     When page returns X-redirect-cache header:
>     Return page stored in memcached key (key = value of 
> "X-redirect-cache" header)
>     OR (if no page found)
>     Internal redirect to  $no_key_url  and return content to caller
>        in case of redirect server should pass "key" to $no_key_url ( as
> a header or as a GET field )

>     header("X-redirect-cache: $key $no_key_url")

>     Example:
>     // guess what we want to show
>     $page="index-".random_number( from => 1, to => 10)
>     header("X-cache-key: $page /page-generator")

Если бы тока эти пункты выполнялись, было бы вообще зачем что либо
переделывать в nginx.:
1) Если memcached хранит весь свой кэш в памяти и работает с ним
существенно быстрее чем с рам-диском.
2) Если в memcached будет всегда актуальная информация лежать а не
устаревшая и актуальность ее будет проверена скриптом, как в пункте 5
по хэшу.
3) Если бы в каждом новом коде не появлялись бы уязвимости и баги, да
не добавлялось бы тормозов. тобишь, при компиляции можно было бы
отрезать этот модуль кому он не нужен.

-- 
С уважением,
 sjsoft                          mailto:sjsoft at newmail.ru






More information about the nginx-ru mailing list