Стратегия кеширования для интенсивно используемого сайта - PullRequest
1 голос
/ 11 февраля 2011

Мы разрабатываем стратегию кэширования для интенсивно используемого веб-сайта.Сайт состоит из смеси динамического и статического контента.Внешний интерфейс - PHP, средний уровень - Tomcat и mysql на задней панели.

По HTTPS выполняется только экран входа пользователя в систему для защиты учетных данных.После этого весь контент подается по обычному HTTP.Некоторые из экранов являются специфическими для клиента (скажем, его последние заказы), в то время как другие экраны являются общими для всех (самые популярные продукты, рекламные акции, правила и т. Д.).

Учитывая ожидаемый объем трафика, ясно, чтонам нужна комплексная стратегия кэширования.Поэтому мы рассматриваем следующие варианты:

  1. Поместите Squid или Varnish перед PHP и настройте его для кэширования всего общедоступного контента и даже формы отправки заказа клиента .
  2. Использование memcached с помощью PHP для кэширования фрагментов страницы (например, большинства популярных продуктов)
  3. Реализация кэширования на промежуточном уровне / tomcats (т. Е. Перед возвратом контента на веб-серверы попробуйте извлечь его из локального кэшанапример, ehcache)
  4. Используйте кеш уровня PHP, такой как Zend Cache, и сохраняйте там фрагменты страниц.Это близко ко второму варианту, который я упомянул, но он встроен в среду Zend.

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

Итак, вопрос в том, стоит ли добавлять фронтальный кеш, например, Varnish, или просто использовать Zend Cache внутри?


Другой вариант, который я забыл упомянуть, это использование уровня PHPкэшируйте как Zend Cache и храните там фрагменты страниц.Это близко ко второму варианту, который я упомянул, но он встроен в инфраструктуру Zend.

Так что вопрос в том, стоит ли добавлять фронтальный кеш, как Varnish, или просто использовать Zend Cache внутри?

Еще раз спасибо, Филопатор.

1 Ответ

1 голос
/ 11 февраля 2011

Я выполнил немало подобных проектов и обнаружил, что:

  • Создание (полного) специального решения сложно и дорого.К счастью, вы нашли Squid / Varnish, memcache и ehcache
  • Динамическое поведение сайтов сильно различается, и вы знаете свой сайт лучше всего, поэтому имеет смысл разработать конкретную стратегию кэширования
  • это имеет смыслразвернуть несколько слоев кеша.Однако это усложнит поведение вашего сайта, поэтому вы должны рассказать об этом всем, кто связан с сайтом (например, бизнесом), и рассказать об этом вашим инженерам.
  • Подумайте, как вы собираетесьпроблемы отладки.например, добавьте заголовки, которые указывают на свежесть обслуживаемых данных, позволяют определенным людям очищать или избегать кеша
  • Регулярно проверяйте, как работают различные слои кеша (например, используйте плагины nagios для ваших лаковых машин).1013 * Измерьте, где ваши проблемы с производительностью, прежде чем создавать какие-либо кеши:)
  • кэширование определенных объектов на короткое время уже может быть очень значительным улучшением

В наши дни мне нравится Varnishмного: это отдельный слой, который не загромождает код Java / PHP, он быстрый и очень гибкий.Недостатком является то, что конфигурация в vcl слишком сложна.

Обычно я использую ehcache + в памяти, чтобы избежать задержек (например, запросов к базе данных или запросов на обслуживание) с небольшими наборами данных, и memcached, когда есть многоданные и кеш должны быть разделены между несколькими узлами.

...