sponsors:

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 for this post:

http://itua.name/en/trackback/744
Share this

Syndicate content Syndicate content

Propeople Expert

Партнери

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

Rambler's Top100