Memcache (d) против Varnish для ускорения трехуровневой веб-архитектуры

112

Я пытаюсь ускорить выполнение теста (трехуровневая веб-архитектура), и у меня есть несколько общих вопросов, связанных с Memcache (d) и Varnish.

  • В чем разница?
    Мне кажется, что Varnish находится за веб-сервером, кеширует веб-страницы и не требует изменения кода, только настройки.
    С другой стороны, Memcached - это система кэширования общего назначения, которая в основном используется для кэширования результатов из базы данных и требует изменения getметода (первый поиск в кеше).

  • Могу я использовать оба? Varnish перед веб-сервером и Memcached для кэширования базы данных?

  • Какой вариант лучше?

    (сценарий 1 - в основном запись,
    сценарий 2 - в основном чтение,
    сценарий 3 - чтение и запись аналогичны)

пользователь449219
источник

Ответы:

270
  • Varnish находится перед веб-сервером; он работает как кэширующий обратный http-прокси.
  • Вы можете использовать оба.
  • В основном пишите - Varnish необходимо очистить от затронутых страниц. Это приведет к накладным расходам и небольшой выгоде для измененных страниц.
  • Чаще всего читают - Лак, вероятно, покроет большую часть этого.
  • Аналогичное чтение и запись - Varnish будет обслуживать для вас множество страниц, Memcache предоставит информацию для страниц, которые имеют смесь известных и новых данных, что позволит вам быстрее создавать страницы.

Пример, который можно применить к stackoverflow.com: добавление этого комментария сделало кеш страницы недействительным, поэтому эту страницу нужно было бы очистить от Varnish (а также страницу моего профиля, которую, вероятно, не стоит кэшировать для начала. Не забывая аннулировать все затронутые страницы могут быть проблемой). Однако все комментарии по-прежнему находятся в Memcache, поэтому база данных должна только записать этот комментарий. База данных не требует дополнительных действий для создания страницы. Все комментарии извлекаются Memcache, и страница повторно кэшируется, пока кто-нибудь не повлияет на нее снова (возможно, проголосовав за мой ответ). Опять же, база данных записывает голосование, все остальные данные извлекаются из Memcache, и жизнь идет быстро.

Memcache избавляет вашу БД от выполнения большого количества операций чтения, Varnish избавляет ваш динамический веб-сервер от нагрузки на ЦП, заставляя вас генерировать страницы реже (и немного облегчает загрузку базы данных, если не для Memcache).

Джефф Ферланд
источник
3
это: «(возможно, проголосовав за мой ответ)» заставило меня проголосовать за ваш ответ
Cesc
поэтому сайтам, таким как stackoverflow (или сайтам вроде facebook со страницей ленты активности), не рекомендуется использовать лак. это?
Мохаммад Реза Эсмаилзаде
@jbferland Мой вопрос в вашем примере заключается в том, что вверху этой страницы есть моя фотография с количеством полученных мной баллов, как мы можем кэшировать с помощью Varnish, но отображать динамику этой области?
Hossj
@Hossj с использованием тегов ESI.
Джонни Пай
Varnish может находиться перед веб-сервером, но также и за веб-сервером. Он также может быть одновременно перед и за одним и тем же веб-сервером ;-) Например, Varnish не поддерживает SSL, поэтому нередко есть веб-сервер перед Varnish для обработки HTTPS. Затем трафик передается через прокси на Varnish, который затем связывается с веб-сервером приложения, который может быть тем же сервером, что и сервер, обрабатывающий HTTPS-трафик.
matt
33

Мой опыт основан на использовании Varnish с Drupal. Проще говоря, вот как я отвечу:

В общем, Varnish работает с неаутентифицированным (через куки) трафиком, а memcached кэширует аутентифицированный трафик.

Так что используйте оба.

Джо Хайд
источник
5
Вы справились, кстати, я думаю, что Varnish лучше работает с кешированием анонимных пользователей ...
Аллан Джикаму