SlideShare a Scribd company logo
Разработка и
оптимизация
выcоконагруженного
проекта
Максим Овсянников
Популярная Механика
• www.popmech.ru
• Новостной сайт
• До 450 тысяч просмотров в сутки
• До 1000 просмотров в минуту
Перед началом разработки
• Собрать все требования и информацию
• Сформировать видение системы
Подготовка окружения
• dev и demo сервера
• Везде одинаковое окружение
• Выкладка кода только через VCS
• Обязательно использовать IDE
Выбор архитектуры
• Apache
• nginx + php-fpm
• memcached
• сессии перенести в memcached или redis
Кеширование
• Не всегда можно использовать стандартный механизм
автокеширования
• Нужно кешировать не только HTML вывод
• Кешировать вспомогательные данные
Кеширование
Кеширование на 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;
Cтатика
• Кеширование статики на клиенте
• Отдельная страница 404
• Отключить логи
location ~* ^.+.(ico|gif|jpeg|png...)$ {
root /var/www/public_html;
access_log off;
expires max;
error_page 404 = /404.html;
}
Перед выкладкой
• Проверить конфигурацию инструментами Битрикса
• Отключить модуль веб-аналитики
Поиск узких мест
• лог 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 и mysql
slowlog = /var/log/nginx/fpm-slow.log
request_slowlog_timeout = 10s
• логи ошибок PHP
display_errors = Off; log_errors = On; error_log
Профилирование c XHProf
• Почти не создает нагрузки в продакшене
• Можно быстро найти корень проблемы
• Подключение
auto_prepend_file = "/var/www/auto_prepend.php"
auto_append_file = "/var/www/auto_append.php"
• либо через dbconn.php и событие OnAfterEpilog
В начале выполнения страницы
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
$GLOBALS["time_start"] = microtime(true);
В конце выполнения страницы
$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);
}
«Разработка и оптимизация высоконагруженного проекта»
«Разработка и оптимизация высоконагруженного проекта»
«Разработка и оптимизация высоконагруженного проекта»
Что еще оптимизировать?
• Подобрать время запуска фоновых задач
• Тяжелые задания запускать когда посещаемость минимальная
New Relic (newrelic.com)
Выводы
• Все отслеживаем и записываем
• Постоянный мониторинг состояния системы
• Кеширование на нескольких уровнях
• Связь сисадмин - разработчик
Спасибо за внимание
Вопросы?

More Related Content

PDF
08 - Web-технологии. Архитектура frontend-backend
PDF
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
PDF
15 - Web-технологии. Сессии и авторизация
PDF
Как не положить тысячи серверов с помощью системы централизованного управлени...
PDF
Иван Карев — Клиентская оптимизация
PPTX
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
PDF
Оптимизация JavaScript в Drupal
PDF
Php Daemon
08 - Web-технологии. Архитектура frontend-backend
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
15 - Web-технологии. Сессии и авторизация
Как не положить тысячи серверов с помощью системы централизованного управлени...
Иван Карев — Клиентская оптимизация
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Оптимизация JavaScript в Drupal
Php Daemon

What's hot (20)

PDF
02 - Web-технологии. Web-клиенты
PDF
07 - Web-технологии. Web-сервера
PDF
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
PDF
17 - Web-технологии. Real Time сообщения
PDF
Хранилище 101
PDF
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
PDF
[ONSEC ]XSS vs waf
KEY
Как сделать сайт быстрее?
PPTX
Опыт построения СХД на базе Windows Server для использования в публичном обла...
PDF
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
PPTX
07 virtual hosts_ru
PDF
Сергей Аверин "Распространенные ошибки применения баз данных"
ODP
DevOps в реальном времени
PPTX
06 php instalation_ru
PPTX
04 web server_deployment_ru
PPT
Drupal and NodeJS.
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PPTX
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
PPT
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
02 - Web-технологии. Web-клиенты
07 - Web-технологии. Web-сервера
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
17 - Web-технологии. Real Time сообщения
Хранилище 101
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
[ONSEC ]XSS vs waf
Как сделать сайт быстрее?
Опыт построения СХД на базе Windows Server для использования в публичном обла...
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
07 virtual hosts_ru
Сергей Аверин "Распространенные ошибки применения баз данных"
DevOps в реальном времени
06 php instalation_ru
04 web server_deployment_ru
Drupal and NodeJS.
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
ZFConf 2012: Кеш без промахов средствами Zend Framework 2 (Евгений Шпилевский)
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
Ad

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

PPTX
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
PPT
распределенная архитектура Lamp приложений петр зайцев
PPT
Development on the Knee by Vladimir Khramtsov
PPT
1С-Битрикс - Производительность
PPTX
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
PPT
Drupal Perfomance issues, tips & tricks. Антон Иванов.
PPT
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
PPTX
Tuning HighLoad J2EE web application
PPS
Magento performance
PDF
Highload++ 2015
PPTX
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
PPT
Drupal 6 performance
ODP
Root Conf2009 Kopeyko 16.9
PPT
“КП” в интернете (Александр Ромашин, Вячеслав Малютин)
PPT
Hl2009 1c Bitrix
PPTX
High Availability в жизни обычного разработчика
PDF
Алексей Иванкин: Highload + PHP
PPTX
Hosting for forbes.ru_
PPT
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
PDF
FT & HA Rails приложений приложений — это просто
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
распределенная архитектура Lamp приложений петр зайцев
Development on the Knee by Vladimir Khramtsov
1С-Битрикс - Производительность
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
Drupal Perfomance issues, tips & tricks. Антон Иванов.
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Tuning HighLoad J2EE web application
Magento performance
Highload++ 2015
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
Drupal 6 performance
Root Conf2009 Kopeyko 16.9
“КП” в интернете (Александр Ромашин, Вячеслав Малютин)
Hl2009 1c Bitrix
High Availability в жизни обычного разработчика
Алексей Иванкин: Highload + PHP
Hosting for forbes.ru_
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
FT & HA Rails приложений приложений — это просто
Ad

More from Гузель Рахимова (6)

PPT
Аналитика требований в разрезе управления проектами
PDF
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
PDF
«Highload блоки и новое api к ним»
PDF
«Composer vs. копипаст модулей битрикса из проекта в проект»
PDF
«Сетевые протоколы для веб разработчика — выжимаем максимум»
PPTX
Анализ входящих требований
Аналитика требований в разрезе управления проектами
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Highload блоки и новое api к ним»
«Composer vs. копипаст модулей битрикса из проекта в проект»
«Сетевые протоколы для веб разработчика — выжимаем максимум»
Анализ входящих требований

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