Кэширование Nginx и PHP: fastcgi_cache, proxy_cache, APC или memcached или combo?
У нас есть веб-серверы, работающие на nginx 7.65 вместе с fastcgi PHP5, и мы рассматриваем возможности кэширования для ускорения доставки контента и снижения нагрузки на систему. На серверах работают разные (пользовательские) приложения.
Есть так много вариантов для кэширования, я не уверен, что будет вменяемым. Есть memcached, APC, Nginx' fastcgi_cache, proxy_cache....
Я знаю, что у memcached есть распределенная способность в качестве бонуса, но она нам пока не нужна. По моему опыту, memcached работает медленнее, чем APC, если он установлен на той же машине, на которой он обслуживается, но это было некоторое время назад.
Я не знаком с Nginx fastcgi_cache или даже с обычным модулем proxy_cache. Это сопоставимо или это что-то совершенно другое?
Что было бы хорошим, нормальным методом кэширования для Nginx w. FastCGI PHP5?
4 ответа
Если ваш ящик может обрабатывать весь кеш самостоятельно, memcache только замедлит вас. APC - это общая память. При правильном использовании он снесет memcached. Быстрый cgi-кеш Nginx заставит кричать все динамические php-страницы. Даже если вы установите кэш всего на 10 секунд, это сделает его таким, чтобы максимальная частота обращений к любой данной странице php была бы раз в 10 секунд. Делает невозможным сбой страницы с загрузкой. Я запускаю несколько веб-сайтов на одной маленькой коробке, которая получает миллионы людей в месяц. Все, что вам нужно, это кэширование nginx и APC на данный момент.
Memcache входит в картину только тогда, когда вам нужно масштабировать кэш за пределы одного окна.
http://php-fpm.org/ - это то, что мы использовали в нескольких последних установках, а не в самой FastCGI.
Nginx может обслуживать страницы прямо из memcached, поэтому ваше приложение может записывать страницы прямо в memcached. В противном случае вам необходимо убедиться, что ваш код использует memcached для запросов / объектов. Кэш кода операции поможет в зависимости от вашей кодовой базы. Если у вас есть небольшой набор сценариев, которые запускаются неоднократно, APC или XCache (или eaccelerator в некоторых случаях) могут обеспечить хороший импульс.
Ваш метод кэширования определяется вашим кодом. Вы можете кэшировать страницы? фрагменты? результаты sql? ценности? Каково время жизни этих объектов, сколько места им нужно, насколько велик ключ и набор результатов? Что касается memcached, который работает медленнее, чем APC, поскольку они не выполняют одну и ту же задачу, я не уверен, что вы сравнили.
В настоящее время вы можете заменить PHP-FPM на HHVM, который будет сочетать в себе производительность PHP-FPM + APC и обеспечивает потрясающую скорость: hhvm+nginx+fastcgi_cache
ИМХО, мы, системные администраторы, склонны концентрироваться на этой проблеме в обратном направлении, начиная с бэк-энда, потому что это наш газон. Самый эффективный материал действительно на переднем крае. Если вы можете получить правильную часть кэша браузера (http-заголовки) и http-кэша (снова cdn, заголовки), вы можете делать удивительно неаккуратные вещи в начале и все будет в порядке.