Кэширование страниц в 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