Drupal - увеличиваем производительность методом кеширования

Версия для печатиОтправить другуPDF version

Задумался над ускорением работы CMS Drupal. Очень эффективным способом оптимизации является механизм кеширования страниц. Изначально CMS Drupal уже имеет интегрированный механизм кеширования страниц. Включить и настроить его можна на странице управления механизмом кеширования: Управление => Настройка сайта => Производительность. Однако результаты работы можно считать удовлетворительными, а не отличными. Например, довольно часто приходится отключать оптимизацию CSS-файлов, поскольку оптимизация CSS-файлов иногда искажает тему оформления, что недопустимо. К тому же, результаты кеширования могли бы быть получше.

Итак, исходные данные:

  • Тестируемый ресурс - http://bg.net.ua/
  • FreeBSD 7.2-STABLE
  • CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz
  • RAM: 512 MB Hynix
  • Drupal 6.16
  • Apache 2.2.14 DAV/2 PHP 5.2.13 MySQL 5.0.87

Отключим кеширование, и проведем тестирование производительности:

# ab -n 1000 http://bg.net.ua/
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 bg.net.ua (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:        Apache/2.2.14
Server Hostname:        bg.net.ua
Server Port:            80
Document Path:          /
Document Length:        11838 bytes
Concurrency Level:      1
Time taken for tests:   433.182 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      12431000 bytes
HTML transferred:       11838000 bytes
Requests per second:    2.31 [#/sec] (mean)
Time per request:       433.182 [ms] (mean)
Time per request:       433.182 [ms] (mean, across all concurrent requests)
Transfer rate:          28.02 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   2.6      0      84
Processing:   424  433  21.3    431    1046
Waiting:      322  331  20.8    329     931
Total:        424  433  21.9    432    1047
Percentage of the requests served within a certain time (ms)
  50%    432
  66%    433
  75%    434
  80%    435
  90%    436
  95%    438
  98%    448
  99%    459
 100%   1047 (longest request)

Имеем всего лишь 2,31 запроса в секунду (Requests per second).  Однозначно - очень мало.

Теперь проведем аналогичное тестирование, но включим встроенный механизм кеширования.

 

# ab -n 1000 http://bg.net.ua/
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 bg.net.ua (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:        Apache/2.2.14
Server Hostname:        bg.net.ua
Server Port:            80
Document Path:          /
Document Length:        11838 bytes
Concurrency Level:      1
Time taken for tests:   110.528 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      12414000 bytes
HTML transferred:       11838000 bytes
Requests per second:    9.05 [#/sec] (mean)
Time per request:       110.528 [ms] (mean)
Time per request:       110.528 [ms] (mean, across all concurrent requests)
Transfer rate:          109.68 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       2
Processing:   101  110  13.3    109     448
Waiting:       97  105  12.1    104     397
Total:        102  111  13.3    110     449
Percentage of the requests served within a certain time (ms)
  50%    110
  66%    111
  75%    112
  80%    112
  90%    114
  95%    114
  98%    115
  99%    129
 100%    449 (longest request)

Ситуация улучшилась, но ненамного - до 9 запросов в секунду. Нужно поискать более "радикальный" метод. На замену стандартного режима кеширования воспользуемся возможностями модуля Boost.

Принцип работы модуля следующий. Модуль при первом запросе создает статическую HTML-страницу, помещая ее в свой кеш, откуда потом выдает всем следующим запросам. Кеш сбрасывается по расписанию или по событию, так что вероятность отдачи старой закешированой страницы минимальна. Также стоит отметить, что работает этот механизм только для анонимных пользователей, для авторизированых пользователей страницы генерируются по прежнему динамически.

Рассмотрим более детально инсталяцию и настройку модуля.

  1. Отключаем стандартный режим кеширования.
  2. Включаем "чистые" ссылки - обязательный пункт (Управление => Настройка сайта => Чистые ссылки).
  3. Распаковываем модуль в каталог модулей (/путь_к_сайту/sites/all/modules)
  4. Создаем директорию для кеша - каталог cache в корневом каталоге Drupal.
  5. Идем на страницу управления модулями и включаем модуль (Управление => Конструкция сайта => Модули).
  6. На странице управления модулем (Управление => Производительность => Boost settings), проверяем правильность путей, выставляем время кеширования, ознакамливаемся с другими доступными опциями
  7. Переходим на закладку Boost htaccess rules generation и копируем в буфер обмена предложенные настройки. Их необходимо вставить между строками "# RewriteBase /" и "# Rewrite URLs of the form 'x' to the form 'index.php?q=x'".
  8. В файле sites/default/settings.php задаем переменную $base_url - URL нашей web-страницы без завершающего слеша. В моем частном случае строка приобрела вид:  $base_url = 'http://bg.net.ua';
  9. Запрещаем индексирование поисковыми системами статистику модуля, добавлением в файл robots.txt строки "Disallow: /boost_stats.php".

Проверяем, повысилась ли производительность ресурса:

# ab -n 1000 http://bg.net.ua/
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 bg.net.ua (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software:        Apache/2.2.14
Server Hostname:        bg.net.ua
Server Port:            80

Document Path:          /
Document Length:        11921 bytes

Concurrency Level:      1
Time taken for tests:   10.855 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      12407000 bytes
HTML transferred:       11921000 bytes
Requests per second:    92.12 [#/sec] (mean)
Time per request:       10.855 [ms] (mean)
Time per request:       10.855 [ms] (mean, across all concurrent requests)
Transfer rate:          1116.20 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       3
Processing:     8   10  10.1     10     235
Waiting:        6    9  10.1      8     233
Total:          8   11  10.1     10     236

Percentage of the requests served within a certain time (ms)
  50%     10
  66%     10
  75%     10
  80%     10
  90%     11
  95%     11
  98%     11
  99%     13
 100%    236 (longest request)

Производительность выросла до 92 запросов в секунду. Результат не так уж и плох...

Ваша оценка: Нет Средняя: 4.5 (6 голосов)

Вставай, Україно!

Литература

Инсертни диск в дырку А, закрой загогулину и плюхнись на любую кею.