21
Разработка и оптимизация выcоконагруженного проекта Максим Овсянников

«Разработка и оптимизация высоконагруженного проекта»

  • Upload
    -

  • View
    217

  • Download
    4

Embed Size (px)

DESCRIPTION

Автор: Максим Овсянников, веб-разработчик компании "Центр Высоких Технологий". Советы по оптимизации и разработке высоконагруженных веб-проектов

Citation preview

Page 1: «Разработка и оптимизация высоконагруженного проекта»

Разработка и оптимизация

выcоконагруженного проекта

Максим Овсянников

Page 2: «Разработка и оптимизация высоконагруженного проекта»

Популярная Механика

• www.popmech.ru• Новостной сайт• До 450 тысяч просмотров в сутки• До 1000 просмотров в минуту

Page 3: «Разработка и оптимизация высоконагруженного проекта»

Перед началом разработки

• Собрать все требования и информацию• Сформировать видение системы

Page 4: «Разработка и оптимизация высоконагруженного проекта»

Подготовка окружения

• dev и demo сервера• Везде одинаковое окружение• Выкладка кода только через VCS• Обязательно использовать IDE

Page 5: «Разработка и оптимизация высоконагруженного проекта»

Выбор архитектуры

• Apache• nginx + php-fpm• memcached• сессии перенести в memcached или redis

Page 6: «Разработка и оптимизация высоконагруженного проекта»

Кеширование

• Не всегда можно использовать стандартный механизм автокеширования

• Нужно кешировать не только HTML вывод• Кешировать вспомогательные данные

Page 7: «Разработка и оптимизация высоконагруженного проекта»

Кеширование

Page 8: «Разработка и оптимизация высоконагруженного проекта»

Кеширование на nginx

fastcgi_temp_path /tmp/nginx/fastcgi_cache 1 2;

fastcgi_cache one;

fastcgi_cache_valid 200 301 302 304 5m;

fastcgi_cache_key "$request_method|$host|$request_uri";

fastcgi_ignore_headers "Cache-Control" "Expires";

fastcgi_no_cache $cookie_USER_AUTHORIZED;

fastcgi_cache_bypass $cookie_USER_AUTHORIZED;

Page 9: «Разработка и оптимизация высоконагруженного проекта»

Cтатика

• Кеширование статики на клиенте• Отдельная страница 404• Отключить логи

location ~* ^.+\.(ico|gif|jpeg|png...)$ { root /var/www/public_html; access_log off; expires max; error_page 404 = /404.html;}

Page 10: «Разработка и оптимизация высоконагруженного проекта»

Перед выкладкой

• Проверить конфигурацию инструментами Битрикса• Отключить модуль веб-аналитики

Page 11: «Разработка и оптимизация высоконагруженного проекта»

Поиск узких мест

• лог 50x ошибокerror_page 500 502 503 504 /50x.html;location = /50x.html { access_log /var/log/nginx/50x.error.log error50x; root /var/www/public_html;}

• логи медленных запросов PHP и mysqlslowlog = /var/log/nginx/fpm-slow.logrequest_slowlog_timeout = 10s

• логи ошибок PHPdisplay_errors = Off; log_errors = On; error_log

Page 12: «Разработка и оптимизация высоконагруженного проекта»

Профилирование c XHProf

• Почти не создает нагрузки в продакшене• Можно быстро найти корень проблемы• Подключениеauto_prepend_file = "/var/www/auto_prepend.php"auto_append_file = "/var/www/auto_append.php"

• либо через dbconn.php и событие OnAfterEpilog

Page 13: «Разработка и оптимизация высоконагруженного проекта»

В начале выполнения страницы

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

$GLOBALS["time_start"] = microtime(true);

Page 14: «Разработка и оптимизация высоконагруженного проекта»

В конце выполнения страницы

$time = microtime(true) - $GLOBALS["time_start"];$xhprof_data = xhprof_disable();$xhprofRootDirUtils = "/var/www/xhprof-0.9.4/xhprof_lib/utils/";include_once $xhprofRootDirUtils . "xhprof_lib.php";include_once $xhprofRootDirUtils . "xhprof_runs.php";

if ($time > 10) { $xhprof_runs = new XHProfRuns_Default(); $prof_file_name = "time_" . intval($time) . "s_" . preg_replace('/[^A-Za-z0-9_\-]/', '_', $_SERVER["REQUEST_URI"]);

$xhprof_runs->save_run($xhprof_data, $prof_file_name);}

Page 15: «Разработка и оптимизация высоконагруженного проекта»
Page 16: «Разработка и оптимизация высоконагруженного проекта»
Page 17: «Разработка и оптимизация высоконагруженного проекта»
Page 18: «Разработка и оптимизация высоконагруженного проекта»

Что еще оптимизировать?

• Подобрать время запуска фоновых задач• Тяжелые задания запускать когда посещаемость минимальная

Page 19: «Разработка и оптимизация высоконагруженного проекта»

New Relic (newrelic.com)

Page 20: «Разработка и оптимизация высоконагруженного проекта»

Выводы

• Все отслеживаем и записываем• Постоянный мониторинг состояния системы• Кеширование на нескольких уровнях• Связь сисадмин - разработчик

Page 21: «Разработка и оптимизация высоконагруженного проекта»

Спасибо за вниманиеВопросы?