ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


  • To: <nginx-ru@xxxxxxxxx>
  • Subject: Кэширование страниц в memcached и nginx
  • From: "Boguk Maxim" <astar@xxxxxxxxxxxxx>
  • Date: Wed, 4 Oct 2006 13:16:22 +0400
  • Content-class: urn:content-classes:message
  • Thread-index: AcbnL9Is06clec+7RzW2AhVDE9vWaAAYfPsQ
  • Thread-topic: Кэширование в шаред-меме

Я гдето 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@xxxxxxxxxxxxx   ICQ: 99-312-438
(910) 405-47-18
 

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



 




Copyright © Lexa Software, 1996-2009.