Назад | Перейти на главную страницу

Кеширование страниц PHP, Varnish, nginx и т. Д.?

У меня есть веб-приложение, работающее на низком уровне (1 ГБ ОЗУ), обслуживающее как статические, так и динамические (php) страницы. Эти страницы PHP запрашивают базу данных MYSQL, которая вообще не меняется часто - раз в неделю ?.

Я хочу сделать изрядное кеширование, чтобы все было хорошо и быстро. У меня есть страницы, которые хотя и являются php, информация редко меняется (получение списка элементов, которые могут меняться раз в несколько месяцев?). На паре страниц может быть перечислено до 400 записей.

У меня установлены Varnish, nginx, PHP-FPM, APC, MYSQL. Я «думаю», что все настроено правильно. Страницы обслуживаются, и у меня появляются хиты в Varnish ... Brill! Однако из-за характера веб-сайта я не уверен, что он настолько оптимизирован, насколько мог бы.

Недавний поиск предложил ряд вещей, которые могут помочь с моими php-страницами:

Пример: свежая страница PHP, на которой перечислено довольно много (более 200) записей: 2 секунды После обновления 1,5 (безумно) секунды. edit: Неужели я нереально ожидать, что эта страница будет кэшироваться где-то вдоль строки и будет предоставляться намного быстрее после ее посещения?

Какой вариант мне лучше всего подходит? Одно или все вышеперечисленное?

  • Memcached требует, чтобы ваш код действительно использовал его. Но если вы написали этот код, то это будет легко сделать :)
  • Кэширование MySQL в определенной степени работает. В идеале, если вы еще не сделали это, перейдите на SSD-диски.
  • Я никогда не слышал о кешировании FastCGI. Вы имеете в виду кеширование динамических страниц как статическое?

Честно говоря, если вы настроили все как можно лучше, я бы подумал об апгрейде оборудования. Если у вас есть время, посмотрите исследования Facebook, такие как HipHop (https://github.com/facebook/hiphop-php/wiki). Они провели удивительные исследования и разработки для создания динамических страниц с быстрой загрузкой.

Удачи!

когда вам не нужны особые свойства лака, вы можете бросить его и использовать Fastcgi_cache от nginx. но будьте осторожны, в отличие от proxy_cache у вас может быть только 1 cache_zone во всей вашей настройке.

возможно, ваша настройка немного переоптимизирована ... я бы подумал, использовать только nginx или лак.

Когда дело доходит до кэша памяти: в зависимости от того, сколько запросов в секунду у вас есть, memc может быть настоящим стимулом, но, возможно, не обязательно в вашем случае. когда у вас есть хороший внешний кеш, вам не нужно включать memcache, но YMMV. что я понимаю: вы доставляете страницы, которые не часто меняются, верно?

Я всегда старался оптимизировать следующим образом:

  1. старайтесь избегать запросов, на которые отвечает ваш стек приложения -> перехватывать запросы кешем frontenend (nginx / varnish) и статическим сервером, где это возможно
  2. если php, используйте кеш-код операции, например APC
  3. Настройте свой БД
  4. контролировать вашу систему (load, mem, ram, netio, hdio, netconns, netconns: http, site_stats)
  5. повторить настройку

Будьте осторожны с кешем запросов MySQL - он использует глобальную блокировку, поэтому, когда вы начнете проявлять слишком большую активность, вы увидите периодические взаимоблокировки. Кэш запросов полезен только для запросов, которые точно так же, и если у вас их много, вы неправильно выполняете кеширование на уровне приложения.

Первый шаг в работе над производительностью - это всегда профилирование; Оптимизация на основе интуиции - действительно хороший способ зря тратить время.

На работе мы используем Графитовый в качестве нашего хранилища данных с модифицированной версией StatsD и труба-графит в качестве основных методов отправки данных. Оба эти инструмента упрощают отправку данных, а в Graphite есть множество инструментов анализа.

Например, используя сценарий нанесения лака из трубы на графит, мы берем всю статистику из varnishstats. Это позволяет нам легко создавать графики попаданий / промахов в Graphite, например:

Вы можете сделать то же самое с memcached и добавить хуки в собственное приложение для записи ... ну, что угодно и все!

Вы также можете найти инструменты одностраничного анализа, такие как xhprof и YSlow полезно.

Когда у вас есть показатели, вы не только знаете, над чем нужно работать, но и сможете измерить улучшение, когда закончите. Всем нравится проверка!