Повышение производительности и ускорение SocialEngine при помощи Memcached/APC/Xcache
Недавно мы работали над миграцией с SocialEngine v2 на SocialEngine v4.1.4 для одного из наших клиентов. Сайт SocialEngine загружался очень медленно, хотя было не так много пользователей на сайте. Мы попробовали ускорить сайт с помощью APC, сжатия HTML, JS и CSS, но это не увеличило значительно производительность. Существовали различные причины замедления, но главной причиной был неорганизованный и неэффективный исходный код на ранних стадиях разработки. Измененный код тесно связан с основным кодом SocialEngine по этому мы не могли перенести его в SocialEngine v4.1.4 с помощью сценария миграции. Нам пришлось переписать измененный код с нуля по очевидным причинам, после перехода с socialengibe v2 на v4.1.4. Процесс миграции мы обсудим в другой статье, сейчас мы уделил основное внимание ускорению v4.x SocialEngine при помощи использования кэширования.
Кэширование является жизненно важной частью любого веб-сайта. Социальная система поддерживает различные решения, как кэширование файлов на основе, файлового кэша, APC (Alternative PHP Cache) и Xcache. Все эти способы кэширования доступны в SocialEngine 4. Если вы не настроили Memcached, APC или Xcache то вы можете использовать файловую систему кэширования, но она гораздо медленнее, чем другие решения кэширования. В этой статье, мы покажем, инструкции по установке и настройке кэширования для SocialEngine. Мы предполагаем, что SocialEngine работает в активном режиме.
Memcache представляет собой распределенное кэширование, которое может быть использовано в сценарии, когда приложение работает на нескольких серверах. Все веб-данные, хранящиеся в Memcached будут распределены по всем веб-серверам. При использовании APC/Xcache с распределенной системой потребуется копирование данных на всех серверах. APC/XCache кэширование экономит на компиляции и времени выполнения PHP при этом нагрузка SocialEngine станет быстрей. Некоторые люди запутались может ли Memcached быть использован с APC/Xcache. Мы можем использовать сочетание Memcached (как для хранения данных) и APC/Xcache (как машинный код для PHP).
Теперь мы покажем, установку и настройку Memcached, APC и Xcache для SocialEngine на CentOS.
Установка и настройка Memcached на SocialEngine
1) Установка memcached,
wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
tar zxpfv memcached*
cd memcached-1.4.5
./configure
make install
./memcached -u memcached -d -m 64 -l 127.0.0.1 -p 11211
2) Установить PHP Extension.
Загрузите и установите последнюю стабильную версию кэша из PECL.
wget http://pecl.php.net/get/memcache-2.2.5.tgz
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5
phpize
./configure
make
make install
memcache.so будет установлен в каталог PHP модулей, в настоящее время memcache.so устанавливается как расширение в php.ini
Чтобы узнать ваше расположение php.ini, выполните следующую команду
php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini
vi /usr/local/lib/php.ini
extension = “memcache.so”
Сохраните файл и перезагрузите HTTPD сервер.
/etc/init.d/httpd restart
Чтобы проверить как загружается расширение в PHP, выполните следующую команду.
php -i | grep memcache
memcache
memcache support => enabled
3) Настройка memcached в SocialEngine
1. На странице http://yourserver/index.php/admin/core/settings/performance
2. Включить кэширование Memcached и добавить параметры, специфичные для memcached.
3. Сохранить изменения
Установка и настройка APC в SocialEngine
По умолчанию может быть только одна служба кэширования для PHP, так что если уже имеется другая (Eaccelerator и т.д.), отключите ее, чтобы использовать APC в качестве ускорителя исполнения сценариев PHP.
1) Установить APC
yum install php-pear
yum install php-devel
yum install httpd-devel
yum install pcre-devel
pecl install apc
echo "extension=apc.so" > /etc/php.d/apc.ini
/etc/init.d/httpd restart
Чтобы проверить как загружается расширение в PHP, выполните следующую команду.
php phpinfo()
apc.enabled=1
2) Настройка APC в SocialEngine
1. На странице http://yourserver/index.php/admin/core/settings/performance
2. Включить кэширование с возможностью APC.
3. Сохранить изменения
Установка и настройка Xcache с SocialEngine
1) Установить Xcache
wget http://xcache.lighttpd.net/pub/Releases/1.3.1/xcache-1.3.1.tar.gz
tar -zxvf xcache-1.3.1.tar.gz
cd xcache-1.3.1
phpize
./configure --enable-xcache
make
make install
Вы должны изменить timelib_structs.h установив Xcache
Найдите строку:
#include
Замените ее следующим образом:
# Include "timelib_config.h"
Создайте пароль для администрирования Xcache:
# echo -n “yourpassword”| md5sum
Затем откройте php.ini и добавьте следующий параметры конфигурации.
[xcache-common]
zend_extension = /usr/lib/php/modules/xcache.so
[xcache.admin]
xcache.admin.user = "admin"
;how to create md5 pwd: echo -n "password"| md5sum
xcache.admin.pass = "a364b1d54799c713b8a377de50f8ed3c" #easywms.com
[xcache]
; Change xcache.size to tune the size of the opcode cache
; to disable: xcache.size=0
; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows
; someone said, if >=64 will get problem
xcache.size = 32M
xcache.shm_scheme = "mmap"
; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count = 4
; just a hash hints, you can always store count(items) > slots
xcache.slots = 8K
; ttl of the cache item, 0=forever
xcache.ttl = 0
; interval of gc scanning expired items, 0=no scan, other values is in seconds
xcache.gc_interval = 0
; Change xcache.var_size to adjust the size of variable cache
; same as aboves but for variable cache, if you have not used xcache function in script,forget it
xcache.var_size = 8M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.test = Off
xcache.readonly_protection = On
; for *nix, xcache.mmap_path is a file path, not directory.
; Use something like "/tmp/xcache" if you want to turn on ReadonlyProtection
; 2 group of php won’t share the same /tmp/xcache
; for win32, xcache.mmap_path=anonymous map name, not file path
xcache.mmap_path = "/tmp/xcache"
; leave it blank(disabled) or "/tmp/phpcore/"
; make sure it’s writable by php (without checking open_basedir)
xcache.coredump_directory = ""
; per request settings
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off
[xcache.coverager]
; per request settings
; enable coverage data collecting for xcache.coveragedump_directory and
; xcache_coverager_start/stop/get/clean() functions (will hurt executing performance)
xcache.coverager = On
; ini only settings
; make sure it’s readable (care open_basedir) by coverage viewer script
; requires xcache.coverager=On
xcache.coveragedump_directory = ""
2) Настройка XCache в SocialEngine
1. На странице http://yourserver/index.php/admin/core/settings/performance
2. Включить кэширование Xcache и добавить учетные данные пользователя.
3. Сохранить изменения
Заключение
Мы нашли Xcache немного быстрее, чем Memcached/APC для SocialEngine 4 и использовали его для сайта клиента.
Пожалуйста, не стесняйтесь оставить отзыв или предложить другую технику кэширования.