Я могу использовать Кэш Лака со своими cookie

Любой ответ, который Вы получите здесь, чисто анекдотичен. Я предпочитаю Debian или Ubuntu. Удостоверьтесь, что Вы не используете версию на 64 бита при использовании меньше чем 4 ГБ поршня. Кроме того, выезд Linode для более выгодных условий (принимающий Вы используете Slicehost).

1
задан 3 June 2013 в 01:57
1 ответ

Я считаю, что самый простой способ думать об эффективности Varnish и его применении - это мыслить комбинациями. Каждая переменная создает экспоненциально больше комбинаций. Вкратце, это следующие переменные: хост, URI и заголовки / куки.

например, это разные объекты в кэше Varnish

domain.com/search/?q=something
domain.com/search/?q=something&source=A
domain.com/search/?q=something&source=B
domain.com/search/?q=something&source=A + nocookie
domain.com/search/?q=something&source=A + cookie1
domain.com/search/?q=something&source=A + cookie2
domain.com/search/?q=something&source=B + nocookie
domain.com/search/?q=something&source=B + cookie1
domain.com/search/?q=something&source=B + cookie2

ОДНАКО: Пока источники не сильно различаются, и пока сервер не отвечает за вывод различного контента в зависимости от источника, использование Varnish должно быть полупростым ... но только если вы сначала выполните какие-то манипуляции.

Поскольку у вас есть возможность манипулировать большей частью клиентского запроса с помощью Varnish, вы можете фактически удалить & source = A или & source = B из запрошенного URI, прежде чем он будет отправлен на бэкэнд сервер. Это по сути превращает все эти запросы:

domain.com/search/?q=something&source=A + nocookie
domain.com/search/?q=something&source=A + cookie1
domain.com/search/?q=something&source=A + cookie2
domain.com/search/?q=something&source=B + nocookie
domain.com/search/?q=something&source=B + cookie1
domain.com/search/?q=something&source=B + cookie2

в следующее:

domain.com/search/?q=something

То, что было 6 промахов и ни одного попадания, теперь составляет 1 промах и 5 попаданий

Итак, клиент запрашивает это у Varnish:

domain.com/search/?q=something&source=A + cookie1

, а Varnish запрашивает это из бэкэнда (например, Apache) для первого запроса:

domain.com/search/?q=something

, а затем кэшируется для последующих запросов (тем самым значительно повышая процент попаданий). Это называется «нормализацией».

Затем, конечно, статический файл JavaScript будет выполнять свою работу, ссылаясь на строки запроса URI и совершая некоторые манипуляции с DOM (что-то вроде того, что делает Google Analytics) на основе исходной строки запроса.

Таким образом, для клиента будет поддерживаться & source = A, и JavaScript может использовать это соответственно; и пока JavaScript отвечает за динамическое изменение содержимого, у вас не должно возникнуть проблем с удалением всех или большей части файлов cookie или строк запроса из вашего запроса до того, как Varnish отправит запрос на бэкэнд.


Вы также можете кэшировать ваши XML-запросы, пока они GET-запросы.

По сути, название игры с Varnish - это «нормализация» внутреннего запроса, чтобы URI / файлы cookie / заголовки не влияли на то, что ' https://stackoverflow.com/questions/3547384/can-i-reformat-my-url-parameters-with-varnish

Если вам необходимо динамически кэшировать контент на основе файла cookie, вы можете сделать поэтому используя vcl_hash: https://www.varnish-cache.org/trac/wiki/VCLExampleCacheCookies Это, конечно, снижает вашу посещаемость, поэтому гораздо лучше передать такую ​​функциональность JavaScript для обработки и указать Varnish не кэшировать определенные конечные точки: например,

// don't cache this endpoint, this content changes based on the referrer
if (req.url ~ '/ajax/get_referrer/') { return (pass); }

Единственная часть, которую я не понимаю в вашем вопросе, была:

Cookie также удаляется, поэтому в следующий раз, когда пользователь вернется на страницу проверяет, существует ли cookie, если да, выбирает, чтобы показать правильный код преобразования в HTML.

Пока внутренний сервер не должен видеть cookie или устанавливать cookie, то есть, пока JavaScript отвечает за работу с DOM, вы должны быть в ясности . Обратите внимание: если «источник / реферер» для каждого пользователя разный, вы также должны указать Varnish не кэшировать какие-либо конечные точки, используемые для получения необходимых данных.

Также следует отметить, что в Varnish следует кэшировать только запросы GET и HEAD. Если ваш поиск или JavaScript использует POST или любой другой тип запроса, их не следует кэшировать.


Я определенно рекомендую делать все на сервере разработки. Вам придется учитывать множество других факторов, таких как доставка PDF-файлов / видео / аудио (также называемых конвейерными запросами), игнорирование страниц и многие другие особенности, уникальные для вашей ситуации.

5
ответ дан 3 December 2019 в 17:09

Теги

Похожие вопросы