Vitalii Zinenko

AltexSoft | Custom Software Development Company

Оптимизация продуктивности Drupal проекта без кеширования

Проблемы:

  • все пользователи авторизированы
  • большая вариативность контента
  • большое количество динамических страниц

Vitalii Zinenko

AltexSoft | Custom Software Development Company

Рассматриваемые варианты решения :

  • standart css, js minimization 
  • Yslow, GTMetric recomendations
  • contrib модули кеширования 
  • php extensions (XCache, APC, eAccelerator)

Vitalii Zinenko

AltexSoft | Custom Software Development Company

RackSpace 

Server

Текущая реализация и её недостатки

...

site

site

site

Vitalii Zinenko

AltexSoft | Custom Software Development Company

Первый вариант решения

Vitalii Zinenko

AltexSoft | Custom Software Development Company

Новая реализация

nginx

php5-fpm

mysql

master/slave

 

Site

Front End

Vitalii Zinenko

AltexSoft | Custom Software Development Company

Новая реализация. Digitalocean

Вопросы новой реализации 

  1. Синхронизация статического контента между php5-fpm и nginx серверами
rsync -a --include-from '/root/bin/include-list.txt' --exclude '*' --prune-empty-dirs 
root@10.132.175.231:/var/www/html/drupalcamplviv.net/ /var/www/html/drupalcamplviv.net

include-list.txt

*/
*.js
*.css
*.png
*.gif
*.ico
*.jpg
*.jpeg
*.eot
*.woff
*.ttf
*.svg
/sites/default/files/*


Вопросы новой реализации 

2.       Получение ещё не синхронизированного контента 

   location ~ \.php$ {
     fastcgi_split_path_info ^(.+\.php)(/.+)$;
     include fastcgi_params;
     fastcgi_param SCRIPT_FILENAME $request_filename;
     fastcgi_intercept_errors on;
     fastcgi_pass 10.132.26.250:9000;
#     fastcgi_pass unix:/var/run/php5-fpm.sock;
   }

   location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
     try_files $uri @phpfpm;
     expires max;
     log_not_found off;
   }

   location @phpfpm {
     proxy_pass http://159.203.109.211:9001/$uri;
   }

3.       Настройка Drupal для использования mysql master-slave

$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'mysql-master-db',
  'username' => 'mysql-master-username',
  'password' => 'mysql-master-password',
  'host' => 'mysql-master-IP',
);


$databases['default']['slave'][] = array(
  'driver' => 'mysql',
  'database' => 'mysql-slave1-db',
  'username' => 'mysql-slave1-user',
  'password' => 'mysql-slave1-password',
  'host' => 'mysql-slave1-IP',
);

Вопросы новой реализации 

4.       Редактирование существующего кода для работы с master/slave базами данных

 

Contrib module AutoSlave

$query = db_select('node', 'n', array('target' => 'slave'));

Вопросы новой реализации 

Новые возможности для мультисайтинга

nginx

php-fpm

php-fpm

php-fpm

php-fpm

Результаты
Дальнейшие шаги

1. Security issues

2. Continuous integration

3. Drupal + mysql replication

4. Integration system analytic tools

5. Server side improvements

Спасибо за внимание.

Ваши вопросы?

Vitalii Zinenko

AltexSoft | Custom Software Development Company

Lviv Drupal Camp

By Vitali Zinenko

Lviv Drupal Camp

  • 1,026