The OpenNET Project / Index page

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

Организация кэширования только медленных ответов сервера при помощи Nginx
Пример организации на стороне фронтэнда кэширования контента, который начинает
отдаётся бэкендом дольше, чем через 3 секунды. Запросы, которые отдаются менее,
чем за 3 секунды передаются клиенту минуя кэш. Время жизни записи в кэше
составляет 60 секунд. Для расчёта времени отдачи используются два блока vhost
с передачей переменной со временем задержки в заголовке X-Accel-Expires,
созданной при помощи директивы "map".

   proxy_cache_path /home/tmpcache/mycache levels=1:2 keys_zone=example:10m;

   # Для запросов дольше 3 секунд устанавливаем время жизни записи в кэше в 60 секунд, иначе 0 (отдаём минуя кэш).
   map $request_time $longtime {
       "~^([3-9]|[1-9][0-9]+)\\." 60;
       default 0;    
   }

   server {
       listen 127.0.0.1:8888;
       root /var/www/;
       server_name example.com; 
       location / { 
           proxy_redirect          off;
           proxy_set_header        Host $host;
           proxy_pass              http://mybackend;
           add_header X-Accel-Expires $longtime;
       }
   }

   server {
       listen 8080;
       root /var/www/;
       server_name example.com; 
       location / { 
           proxy_redirect          off;
           proxy_set_header        Host $host;
           proxy_pass              http://127.0.0.1:8888;
           proxy_cache             example;
           proxy_cache_valid       200 0m;
           add_header X-Cached $upstream_cache_status;
           add_header X-Time $request_time;
        }
   }


Проверка:

   # curl -I "http://example.com:8080/mylongrequest" 

   ...
   X-Cached: MISS
   X-Time: 11.862

повторный запрос будет выдан из кэша:

   # curl -I "http://example.com:8080/mylongrequest" 
   ...
   X-Cached: HIT
   X-Time: 0.000
 
01.10.2014 , Источник: http://blog.alteroot.org/articles/2...
Ключи: nginx, cache / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевые сервисы / WWW, Apache httpd / Редирект, mod_rewrite

Обсуждение [ RSS ]
 
  • 1.1, pavlinux, 16:47, 02/10/2014 [ответить] [смотреть все]
  • +/
    Кэш придумали для упрощения (ускорения) доступа к часто использованным данным.
    Тут предлагают замедлять тех, кто быстрый и ускорять тормозов.

    Теперь я понимаю, откуда столько новых сайтов, с временем загрузки до 30 сек,
    буквально на ровном месте. :)

    Задача сервера какая? Всех выровнять по скорости иль всё ж отдать контент как можно быстрее?

     
     
  • 2.2, Crazy Alex, 19:43, 02/10/2014 [^] [ответить] [смотреть все]
  • +/
    Как по мне - удобный _дешевый_ способ ускорить отдачу, не забивая без надобности и не выискивая руками, что именно тормозит.
     
  • 2.3, Аноним, 20:33, 02/10/2014 [^] [ответить] [смотреть все]
  • +/
    Ты чего, каркуша Оно как раз ускоряет то что тормозит Правда, такой подход к к... весь текст скрыт [показать]
     
     
  • 3.4, pavlinux, 04:48, 03/10/2014 [^] [ответить] [смотреть все]  
  • +/
    >Оно как раз ускоряет то что тормозит.

    Ты какой местой читаешь?

    > "... предлагают замедлять тех, кто быстрый и ускорять тормозов."

    Ну и второе: Если контент и так в кэше, из-за медленных, то нафига другим формировать заново?!

     
     
  • 4.5, Аноним, 06:40, 06/10/2014 [^] [ответить] [смотреть все]  
  • +/
    Ты чего-то не понял этот хакир детектирует запросы которые бэкэнд жевал более... весь текст скрыт [показать]
     
  • 1.6, _, 07:35, 07/10/2014 [ответить] [смотреть все]  
  • +1 +/
    Почему нельзя вообще все отдавать из кэша, разгрузив тем самым бэкэнд?
    Если ответ содержит данные можно кэшировать, давайте кэшировать все. Бэкэнд скажет только спасибо.
    Если ответ содержит данные, которые нельзя кэшировать (данные аккаунта), то тогда их и при залипании ответа кэшировать нельзя.
    Какая прикладная задача тут решается?
     
     
  • 2.7, edwin3d, 11:20, 08/10/2014 [^] [ответить] [смотреть все]  
  • +/
    Можно предположить, что в самом приложении (к примеру генерирует аналитику) есть участки, которые работают "тяжко".
    Вот Вам так сказать пример:
    У меня были похожая ситуация, когда давно было одно приложение, так там были графики, которые рисовались по 7-8 сек (графики были сложные).
    Аналогично было с экспортом некоторых данных ...
    Короче - решение интересное, применимо не везде, но с умом может принести много пользы
     

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



      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor