Пример организации на стороне фронтэнда кэширования контента, который начинает отдаётся бэкендом дольше, чем через 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
Кэш придумали для упрощения (ускорения) доступа к часто использованным данным.
Тут предлагают замедлять тех, кто быстрый и ускорять тормозов.Теперь я понимаю, откуда столько новых сайтов, с временем загрузки до 30 сек,
буквально на ровном месте. :)Задача сервера какая? Всех выровнять по скорости иль всё ж отдать контент как можно быстрее?
Как по мне - удобный _дешевый_ способ ускорить отдачу, не забивая без надобности и не выискивая руками, что именно тормозит.
Ты чего, каркуша? Оно как раз ускоряет то что тормозит. Правда, такой подход к кэшированию достаточно безбашенный и может больно укатать ручкой грабель в лоб, закэшировав лишку.
>Оно как раз ускоряет то что тормозит.Ты какой местой читаешь?
> "... предлагают замедлять тех, кто быстрый и ускорять тормозов."
Ну и второе: Если контент и так в кэше, из-за медленных, то нафига другим формировать заново?!
Ты чего-то не понял: этот "хакир" детектирует запросы которые бэкэнд жевал более чем X и такие запросы попадают в кэш, разгружая бэкэнд. Скорость клиентов тут вообще не при чем - я так понимаю что пытаются замерять время отработки бэкэндом, для чего сгорожен хак с проксированием сначала сам на себя а потом на бэкэнд.
Почему нельзя вообще все отдавать из кэша, разгрузив тем самым бэкэнд?
Если ответ содержит данные можно кэшировать, давайте кэшировать все. Бэкэнд скажет только спасибо.
Если ответ содержит данные, которые нельзя кэшировать (данные аккаунта), то тогда их и при залипании ответа кэшировать нельзя.
Какая прикладная задача тут решается?
Можно предположить, что в самом приложении (к примеру генерирует аналитику) есть участки, которые работают "тяжко".
Вот Вам так сказать пример:
У меня были похожая ситуация, когда давно было одно приложение, так там были графики, которые рисовались по 7-8 сек (графики были сложные).
Аналогично было с экспортом некоторых данных ...
Короче - решение интересное, применимо не везде, но с умом может принести много пользы