The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Кэширование страниц в memcached и nginx (nginx web memcached cache speed)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: nginx, web, memcached, cache, speed,  (найти похожие документы)
From: Boguk Maxim <ICQ: 99-312-438> Newsgroups: nginx-ru Date: Mon, 26 Jan 2008 18:21:07 +0000 (UTC) Subject: Кэширование страниц в memcached и nginx Оригинал: http://www.lexa.ru/nginx-ru/msg07681.html Логика работы такая: 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/; }

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, b2d (??), 12:59, 16/02/2009 [ответить]  
  • +/
    Интересно как можно посмотреть на производительность такой системы...
    stub_status ничего не говорит по этому поводу
     
  • 2, Злые тапки (?), 17:14, 21/09/2009 [ответить]  
  • +/
    nginx умеет хэш от uri считать.
    у меня это делается так (упрощенно):

    http {
        perl_set $md5_uri 'sub {
      use Digest::MD5 qw(md5_base64);
      my $r = shift;
      my $uri=$r->uri;
      my $args=$r->args;
      if ($args){
       $uri=$uri."?".$args;
      }
      return md5_base64($uri);
    }
    ';

        upstream memcached {
            memcached_hash;
            server 192.168.0.26:11211;
    server 192.168.0.28:11211;
        }
    }

    localtion / {
    set $memcached_key $md5_uri;
    memcached_pass memcached;
    }

    nginx должен быть скомпилен с поддержкой перла.
    должен стоять модуль перла Digest::MD5

     
  • 3, Злые тапки (?), 17:16, 21/09/2009 [ответить]  
  • +/
    забыл добавить. nginx взят отсюда http://openhack.ru/nginx-patched/
    потому как официальный nginx 0.7 неправильно определяет необходимый сервер memcached (если больше чем один, разумеется)
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    MIRhosting
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру