Кэширование страниц в memcached и nginx

Boguk Maxim astar at rambler-co.ru
Wed Oct 4 13:16:22 MSD 2006


Я гдето 1.5 месяца назад присылал сюда пример рабочего конфига.
Именно в таком режиме. (nginx / memcached / backend)

Сейчас попробую более развернуто это описать.
Логика работы такая:
nginx умеет ходить в memcached за страницей
если такой страницы в memcached нет то получается 404 код ошибки который можно перехватить и перенаправить на backend
Который проставит нужные данные в кеш и отдаст ответ nginx'u.
(производительность связки nginx+memcached куда выше чем можно добится у nginx+(apache/mod_perl для X-Accel-Redirect)+ memcached)

Такая связка реально работает и показывает очень приличную производительность (сколько максимум так можно отдавать не знаю... думаю упрется в ethernet).

PS: что не возможно сделать пока это использование распределенного на несколько серверов memcached изза того nginx пока не умеет считать какой либо хеш от URL чтобы на его основе принимать решение в каком из memcached сервер искать данные.
(хотя конечно можно по locations разбросать руками на несколько memcached)

Пример рабочего конфига (сильно упрощенный) :

location =/ajax/SOME_URL.html {
   #без этого content_type кривой будет
   default_type    text/html;

   #идем в memcached
   #ключ в memcached '/ajax/SOME_URL.html'
   #если у запроса нужны аргументы надо не забыть их сохранить для случая memcached miss
   #через set      $ArgsCopy       $args;
   #и потом добавить их через rewrite в location /_backend_/
   memcached_pass  SOME_MEMCACHED_IP:SOME_MEMCACHED_PORT;

   #если в memcached не попали то через 404 error_page запрашиваем данные у backend
   #который нам их отдает и записывает итог в memcached
   error_page      404 = /_backend_/ajax/SOME_URL.html;
}

#внутренний URL для обработки случаем memcached miss на этот location
location /_backend_/ {
   internal;
   #идем на backend
   proxy_pass http://BACKEND_IP:BACKEND_PORT/;
}



====================================================================
Орфография - это как Кунг Фу.
Настоящий мастер не применяет его без необходимости.

С уважением,
Максим Богук

Отдел развития веб-проектов
ООО "Рамблер Интернет Холдинг"

astar at rambler-co.ru   ICQ: 99-312-438
(910) 405-47-18
 

> -----Original Message-----
> From: Majordomo Pseudo User [mailto:majordom at ontico.ru]On Behalf Of
> drmarker
> Sent: Wednesday, October 04, 2006 1:04 AM
> To: nginx-ru at sysoev.ru
> Subject: Re: Кэширование в шаред-меме
> 
> 
> > > кеш, в случае чего наполняет и дает internal redirect на нужную
> > > страницу? Или как-то элегантнее?
> >
> > Да, примерно так.
> 
> Угу.
> 
> Но, вообще, если запрос ушел к BE, то проще, как вы правильно сказали,
> из BE сразу отдать ответ, чем redirect. Пусть даже и redirect на
> shared cache. КМК. А для такого тупого кеширования на BE хватает и
> mod_cache.
> 
> Но хочется ведь другого решения :)
> 
> Типа nginx отдает то, что находит в кеше. Если не находит - запрос на
> BE, BE кладет ответ в кеш с expire, FE его оттуда подхватывает и
> отдает, пока не expire. Красиво!
> 





More information about the nginx-ru mailing list