Відповісти


Drupal + Xcache + Cacherouter + FreeBSD

d3a3b7effe634569b6175992d2fd3a88

Великі проекти на Друпалі вимагають гарно продуманої системи кешування, щоб витримати наплив великої кількості користувачів.
Для цього базова система кешування, яка реалізована в друпалі - не підходить.
xcache + drupal fun

Необхідним мінімумом є використання op_code кешерів, що оптимізують і прекомпілюють php скрипти і зберігають їх в оперативній пам'яті, а також кешери, які зберігають вміст таблиць cache* (ну або в перекладі на друпал - вміст cache bins) в оперативній памяті.
для op_code кешування можна використовувати xcache, apc, eAccelerator і інші, а для зберігання cache bins - xcache, memcache.
Також зверху над apache можна встановлювати реверсинвні проксі (nginx, varnish, squid), мова про які піде в майбутньому.
В цій статті мова йтиме про op_code кешер і кешер змінних xcache.

Перш ніж приступити до конфігурування - потрібно зібрати з оптимальними параметрами xcache
Для цього
#cd /usr/ports/www/xcache
і в файлі Makefile змінюємо строку CONFIGURE_ARGS на вказану нижче


CONFIGURE_ARGS= --enable-xcache=shared --enable-xcache-constant --enable-xcache-optimizer --enable-xcache-coverager --enable-xcache-assembler --enable-xcache-encoder --enable-xcache-decoder --enable-dprint

Після цього
#make install clean
Після збірки створюємо файл xcache.ini в папці /usr/local/etc/php/ наступного вмісту

В даному конфігу замість "md5 хеш пароля" потрібно вставити реальний md5 хеш пароля, з яким користувач test буде входити в адміністративний інтерфейс xcache

[xcache-common]
extension = xcache.so
[xcache.admin]
xcache.admin.enable_auth = On
xcache.admin.user = "test"
xcache.admin.pass = "md5 хеш пароля"
[xcache]
xcache.shm_scheme = "mmap"
xcache.size = 40M
xcache.count = 2
xcache.slots = 16K
xcache.ttl = 300
xcache.gc_interval = 600
xcache.var_size = 20M
xcache.var_count = 5
xcache.var_slots = 16K
xcache.var_ttl = 300
xcache.var_maxttl = 600
xcache.var_gc_interval = 300
xcache.test = Off
xcache.readonly_protection = Off
xcache.mmap_path = "/dev/zero"
xcache.coredump_directory = ""
xcache.cacher = On
xcache.stat = Off
xcache.optimizer = On
[xcache.coverager]
xcache.coverager = Off
xcache.coveragedump_directory = "/var/www/wwwroot/site1/coverage"

Найбільш важливими тут виступають параметри

xcache.size = 40M
xcache.count = 2
xcache.var_size = 20M
xcache.var_count = 5

Визначення цих параметрів в моєму випадку було методом тика в небо пальцем кількості паралельних mmap для opcode cacher xcache (xcache.count = 2) і кількість паралельних mmap для var cache (xcache.var_count = 5).
Тик пальцем виглядав як проставляння кількості від 1 до 10 і тестування сайту на швидкість з допомогою apachebench
Даний конфіг оптимальний для двоядерної системи з 4 гігабайтами памяті на борту.

Наступним кроком - інсталяція модуля cacherouter для Drupal

Для цього вантажим і вмикаєм відповідний модуль
і в settings.php потрібного нам сайта вказуєм


$conf['cache_inc'] = './sites/all/modules/cacherouter/cacherouter.inc';
$conf['cacherouter'] = array(
'default' => array(
'engine' => 'xcache',
'shared' => TRUE,
'prefix' => '',
'static' => TRUE,
'fast_cache' => TRUE,
),
);

Даним кодом ми вказуємо друпалу зберігати змінні кешу не в базу даних, а в пам'ять xcache.

Наступний крок - перезавантаження апача і тестування швидкодії.

Зовнішній вигляд адміністративного інтерфейсу xcache

xcache admin interface var list for drupal

Загалом в інтерфейсі все інтуїтивно - можна переглядати кількість звернень до змінних(читай до елементів кеша друпал), міняти їх на ходу, очищати, аналізувати для оптимізації коду тощо, також існує можливість перегляду статистики використання скриптів php і частоти їхнього викликання..

Даний конфіг дозволяє збільшити швидкість обробки php скриптів(op_code кешер) на 15-200% і знизити навантаження на базу даних(var кешер) на 200-500%.
Крім того розмір бази даних перестає зростати по причині того, що дані кешу в неї не зберігаються, а зберігаються в оперативну память, в результаті при перевищенні розміру вказаного(xcache.size = 40M) старі дані будуть викидатись...

При тестуванні конфігурації використовувався apachebench наступної конфігурації

ab -c150 -n10000 http://testsiteurl

Тобто 150 паралельних потоків і 10000 запитів.

dev2# ab -c150 -n10000 http://site1.sym.loc/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking site1.sym.loc (be patient)
Completed 1000 requests
Completed 2000 requests
^C

Server Software: Apache/2.2.16
Server Hostname: site1.sym.loc
Server Port: 80

Document Path: /
Document Length: 31995 bytes

Concurrency Level: 150
Time taken for tests: 84.644 seconds
Complete requests: 2723
Failed requests: 0
Write errors: 0
Total transferred: 89678005 bytes
HTML transferred: 88146225 bytes
Requests per second: 32.17 [#/sec] (mean)
Time per request: 4662.746 [ms] (mean)
Time per request: 31.085 [ms] (mean, across all concurrent requests)
Transfer rate: 1034.64 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 3.4 0 65
Processing: 3219 4524 295.4 4512 5893
Waiting: 2726 3961 299.8 3949 5446
Total: 3232 4526 295.1 4514 5898

Percentage of the requests served within a certain time (ms)
50% 4514
66% 4557
75% 4594
80% 4625
90% 4853
95% 5031
98% 5182
99% 5416
100% 5898 (longest request)

PS. Буду радий почути про інші живі конфігурації даного кешера...

Trackback URL для цього допису

http://itua.name/uk/trackback/744

Відповісти

Вміст цього поля є приватним і не буде показаний. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Дозволені теги HTML: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <img> <center> <b> <i> <u><h1><h2><h3><h4><h5><h6><strike><q><abbr><tr><td><table><br><p><div><span><embed><object>
  • Twitter-style #hashtags в посиланнях для search.twitter.com.
  • Twitter-style @usersnames пов'язані з їх сторінками облікових записів Twitter.
  • Ви можете додавати код використовуючи теги <code>...</code> (загальне) або <?php ... ?> (підсвічений PHP)
  • Рядки та параграфи відокремлюються автоматично.
Фото Капча
Введіть символи з картинки.

Збір матеріалів

Останні коментарі

експерименти

Rambler's Top100