#кэширование #memcached #php
У меня VPS сервер. Кожу на php, в качестве базы использую MySQL. В последнее время
очень нужно повысить пропускную способность сервака.
Уже и так все кэшируется по файлам на жестком диске - это конечно повышает производительность
в разы, но меня и этого теперь мало.
Расскажите что эффективней использовать для этих целей? Именно для кэширования. Из
соседнего поста я узнал, что есть:
memcache для кэширования данных
apc - для кэширования пхпшечки
Но на сколько это эффективно, какие есть аналоги и что работает быстрее и надежней?
Так же интересует установка, чтоб не запариваться и работало на всех серваках, хостингах.
Ответы
Ответ 1
это конечно повышает производительность в разы, но меня и этого теперь мало
Для начала давайте определимся - чего вам мало?
Вы проводили тесты, измерения и вам выдало - php код выполняется слишком долго, в
результате чего вместо 1000 человек можно обслужить только 100?
Надо ускорять там, где действительно это надо, а то получится - экономили, экономили,
а оказалось на спичках экономим, хотя в кармане куча зажигалок.
Memcache и APC предназначены для разных целей (данные и код, как вы уже заметили).
Надо понимать, что обращение к PHP, если грубо, состоит из следующего:
открыли соединение к серверу на определенном порту, определили какой файл должен
исполняться
интерпретатор прошелся по этому файлу (типа скомпилировал), отправил на выполнение
php-скрипт начал свое выполнение, выполнил нужные действия, получил определенные
данные, вернул данные клиенту
Это если грубо, но смысл думаю ясен.
Если больше всего тормозит п.3 - значит в первую очередь необходимо кэширование данных,
Если п.2 - кэширование кода (дабы не интерпретировать каждый раз одно и тоже), либо
перенос части функционала, например, на С/С++
Хотя может быть просто используется неоптимальный алгоритм?
Или может оказаться, что PHP-код отрабатывает быстро, даже очень быстро, но все равно
тормоза есть.
повысить пропускную способность сервака
Может вы все-таки упираетесь в сеть? Пропускная способность сети может слишком маленькая,
или настройки сервера не оптимальны (например, выставлено небольшое количество возможных
подключений?)
В общем без конкретных тестов на узкие места трудно сказать что и как необходимо.
Но ведь вопрос не в этом? Вопрос - что лучше?
Ответ: memcache - кэширование данных, APC - кэширование кода. Что использовать? См. выше.
Ответ 2
Используйте javascript-MVC фреймворки. Там можно закешировать все шаблоны, а данные
будут приходить от RESTfull-сервера как JSON. В этом случае вы не будете париться о
рендеринге шаблонов на стороне сервера. Это уменьшит нагрузку на файловую систему.
Как сказали выше - Local Storage, кешируйте сами данные на стороне клиента.
Memcache (хотя по мне лучше - Redis). Для кеширования результатов запросов и для
хранения сессий. Меньше запросов к медленному MySQL и к файловой системе.
APC для ускорения php-сервера.
nginx вместо медленного Apache.
Примерно так выглядело мое последнее нагруженное приложение