URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 99209
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Организация кэширования только медл..."

Отправлено auto_tips , 02-Окт-14 16:47 
Пример организации на стороне фронтэнда кэширования контента, который начинает отдаётся бэкендом дольше, чем через 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


URL: http://blog.alteroot.org/articles/2014-10-01/nginx-cache-bas...
Обсуждается: http://www.opennet.me/tips/info/2857.shtml


Содержание

Сообщения в этом обсуждении
"Организация кэширования только медленных ответов сервера при помощи Nginx"
Отправлено pavlinux , 02-Окт-14 16:47 
Кэш придумали для упрощения (ускорения) доступа к часто использованным данным.
Тут предлагают замедлять тех, кто быстрый и ускорять тормозов.

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

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


"Организация кэширования только медленных ответов сервера при..."
Отправлено Crazy Alex , 02-Окт-14 19:43 
Как по мне - удобный _дешевый_ способ ускорить отдачу, не забивая без надобности и не выискивая руками, что именно тормозит.

"Организация кэширования только медленных ответов сервера при..."
Отправлено Аноним , 02-Окт-14 20:33 
Ты чего, каркуша? Оно как раз ускоряет то что тормозит. Правда, такой подход к кэшированию достаточно безбашенный и может больно укатать ручкой грабель в лоб, закэшировав лишку.

"Организация кэширования только медленных ответов сервера при..."
Отправлено pavlinux , 03-Окт-14 04:48 
>Оно как раз ускоряет то что тормозит.

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

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

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


"Организация кэширования только медленных ответов сервера при..."
Отправлено Аноним , 06-Окт-14 06:40 
Ты чего-то не понял: этот "хакир" детектирует запросы которые бэкэнд жевал более чем X и такие запросы попадают в кэш, разгружая бэкэнд. Скорость клиентов тут вообще не при чем - я так понимаю что пытаются замерять время отработки бэкэндом, для чего сгорожен хак с проксированием сначала сам на себя а потом на бэкэнд.

"Раздел полезных советов: Организация кэширования только медл..."
Отправлено _ , 07-Окт-14 07:35 
Почему нельзя вообще все отдавать из кэша, разгрузив тем самым бэкэнд?
Если ответ содержит данные можно кэшировать, давайте кэшировать все. Бэкэнд скажет только спасибо.
Если ответ содержит данные, которые нельзя кэшировать (данные аккаунта), то тогда их и при залипании ответа кэшировать нельзя.
Какая прикладная задача тут решается?

"Раздел полезных советов: Организация кэширования только медл..."
Отправлено edwin3d , 08-Окт-14 11:20 
Можно предположить, что в самом приложении (к примеру генерирует аналитику) есть участки, которые работают "тяжко".
Вот Вам так сказать пример:
У меня были похожая ситуация, когда давно было одно приложение, так там были графики, которые рисовались по 7-8 сек (графики были сложные).
Аналогично было с экспортом некоторых данных ...
Короче - решение интересное, применимо не везде, но с умом может принести много пользы