У меня есть веб-приложение, работающее на низком уровне (1 ГБ ОЗУ), обслуживающее как статические, так и динамические (php) страницы. Эти страницы PHP запрашивают базу данных MYSQL, которая вообще не меняется часто - раз в неделю ?.
Я хочу сделать изрядное кеширование, чтобы все было хорошо и быстро. У меня есть страницы, которые хотя и являются php, информация редко меняется (получение списка элементов, которые могут меняться раз в несколько месяцев?). На паре страниц может быть перечислено до 400 записей.
У меня установлены Varnish, nginx, PHP-FPM, APC, MYSQL. Я «думаю», что все настроено правильно. Страницы обслуживаются, и у меня появляются хиты в Varnish ... Brill! Однако из-за характера веб-сайта я не уверен, что он настолько оптимизирован, насколько мог бы.
Недавний поиск предложил ряд вещей, которые могут помочь с моими php-страницами:
Пример: свежая страница PHP, на которой перечислено довольно много (более 200) записей: 2 секунды После обновления 1,5 (безумно) секунды. edit: Неужели я нереально ожидать, что эта страница будет кэшироваться где-то вдоль строки и будет предоставляться намного быстрее после ее посещения?
Какой вариант мне лучше всего подходит? Одно или все вышеперечисленное?
Честно говоря, если вы настроили все как можно лучше, я бы подумал об апгрейде оборудования. Если у вас есть время, посмотрите исследования Facebook, такие как HipHop (https://github.com/facebook/hiphop-php/wiki). Они провели удивительные исследования и разработки для создания динамических страниц с быстрой загрузкой.
Удачи!
когда вам не нужны особые свойства лака, вы можете бросить его и использовать Fastcgi_cache от nginx. но будьте осторожны, в отличие от proxy_cache у вас может быть только 1 cache_zone во всей вашей настройке.
возможно, ваша настройка немного переоптимизирована ... я бы подумал, использовать только nginx или лак.
Когда дело доходит до кэша памяти: в зависимости от того, сколько запросов в секунду у вас есть, memc может быть настоящим стимулом, но, возможно, не обязательно в вашем случае. когда у вас есть хороший внешний кеш, вам не нужно включать memcache, но YMMV. что я понимаю: вы доставляете страницы, которые не часто меняются, верно?
Я всегда старался оптимизировать следующим образом:
Будьте осторожны с кешем запросов MySQL - он использует глобальную блокировку, поэтому, когда вы начнете проявлять слишком большую активность, вы увидите периодические взаимоблокировки. Кэш запросов полезен только для запросов, которые точно так же, и если у вас их много, вы неправильно выполняете кеширование на уровне приложения.
Первый шаг в работе над производительностью - это всегда профилирование; Оптимизация на основе интуиции - действительно хороший способ зря тратить время.
На работе мы используем Графитовый в качестве нашего хранилища данных с модифицированной версией StatsD и труба-графит в качестве основных методов отправки данных. Оба эти инструмента упрощают отправку данных, а в Graphite есть множество инструментов анализа.
Например, используя сценарий нанесения лака из трубы на графит, мы берем всю статистику из varnishstats
. Это позволяет нам легко создавать графики попаданий / промахов в Graphite, например:
Вы можете сделать то же самое с memcached и добавить хуки в собственное приложение для записи ... ну, что угодно и все!
Вы также можете найти инструменты одностраничного анализа, такие как xhprof и YSlow полезно.
Когда у вас есть показатели, вы не только знаете, над чем нужно работать, но и сможете измерить улучшение, когда закончите. Всем нравится проверка!