Согласованность между двумя серверами Varnish за AWS ELB

Мы используем ELB для балансировки нагрузки между двумя разными серверами Nginx+Varnish в двух разных зонах доступности. Эти серверы Varnish были настроены для балансировки запросов к другому ELB, распределяющему запросы к нашим серверам приложений. Таким образом, мы сможем поддерживать работоспособность сайта, если одна зона доступности перестанет работать.

Проблема, с которой мы сталкиваемся при таком подходе, заключается в том, что мы не знаем, как запретить сайту обслуживать разные кэшированные объекты одному и тому же клиенту, т. е. поддерживать согласованность кэшированного контента между двумя серверами Varnish.

Одним из возможных решений было бы использование хеширования IP-адресов ELB, чтобы в зависимости от IP-адреса клиента тот или иной Varnish обслуживал запрос. Это несколько смягчило бы проблему.

Есть ли другой способ синхронизировать содержимое между этими двумя серверами Varnish?


person pantulis    schedule 18.10.2013    source источник
comment
Привет, я полагаю, что у вас больше знаний по этому вопросу, чем у меня, но вы могли бы изучить хеширование запрошенного URL-адреса, не лучше ли это, чем хеширование ip? С наилучшими пожеланиями.   -  person ddutra    schedule 28.10.2013


Ответы (2)


В Varnish нет синхронизации активного состояния.

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

В вашем вопросе есть некоторые базовые знания о том, как ведет себя ваше приложение, но не так много деталей. Почему проблема в том, что другой бэкэнд ответил? Если они идентичны (поскольку вы хотите избыточности, я ожидаю, что они были?), Это не должно быть проблемой.

Если серверная часть отвечает пользовательскими данными ответа для некоторых URL-адресов, она должна сообщить об этом Varnish с заголовком Vary.

Добавление привязки сеанса (~ip-хэширование) в ELB просто скроет вашу проблему до тех пор, пока одна из зон доступности не выйдет из строя и трафик не будет перенаправлен, и в этот момент, как я полагаю, вы уже довольно заняты.

person lkarsten    schedule 06.11.2013

Вы можете включить привязку ELB для достижения того, что вам нужно, нет кластера лака, который разделяет состояние между экземплярами лака.

person Sid Sharma    schedule 12.09.2014