Download - Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014
![Page 1: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/1.jpg)
Как сделать проект с
1 500 000 просмотров в
сутки, который не ломается
Максим Овсянников
Центр Высоких Технологий
![Page 2: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/2.jpg)
Популярная механика
● www.popmech.ru
● Новостной сайт
● До 1.5 миллионов просмотров в сутки
● До 3000 просмотров в минуту
![Page 3: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/3.jpg)
![Page 4: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/4.jpg)
![Page 5: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/5.jpg)
Требуется
● Не допустить медленной работы
● Устранить узкие места
● Постоянно контролировать происходящее
![Page 6: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/6.jpg)
Перед началом работы
● Собрать все требования и информацию
● Сформировать видение системы
![Page 7: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/7.jpg)
Подготовка окружения
● dev и demo сервера
● Везде одинаковое окружение
● Выкладка кода только через VCS
● Обязательно использовать IDE
![Page 8: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/8.jpg)
Выбор технологий
Apache
nginx + php-fpm
memcached
![Page 9: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/9.jpg)
Кеширование
Кеширование на разных уровнях
Кеширование ответов от других сервисов
![Page 10: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/10.jpg)
![Page 11: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/11.jpg)
Кеширование на nginx
● ngx_http_fastcgi_module
● Управляет передачей запросов к fastcgi
● Часть запросов можно не передавать
● К кеше хранятся ответы от fastcgi
![Page 12: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/12.jpg)
Пример
fastcgi_cache_path /tmp/nginx/fastcgi_cache levels=1:2 keys_zone=one:20m max_size=100m;...location .. {
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 13: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/13.jpg)
Дополнительная настройка
По типу запросаlocation @nocached {
#передаем запрос на бекенд}...if ($request_method != GET) { return 412; }...error_page 412 = @nocached;
![Page 14: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/14.jpg)
Дополнительная настройка
По url: location или сравнение urlif ($request_uri ~ nocache) { return 412; }
![Page 15: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/15.jpg)
И еще настройка
Отдаем ответ из кеша в случае ошибкиfastcgi_cache_use_stale http_503 | timeout;
![Page 16: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/16.jpg)
А если контент динамический?
● Кеш на 1 секунду
● 3000 запросов в минуту
● 50 запросов в минуту
● = экономия 49 запросов в секунду
![Page 17: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/17.jpg)
Статика
● Кеширование статики на клиенте
● Отдельная страница 404
● Отключить логи
location ~* ^.+\.(ico|gif|jpeg|png...)$ {root /var/www/public_html;access_log off;expires max;error_page 404 = /404.html;
}
![Page 18: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/18.jpg)
Поиск узких мест
• лог 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.logrequest_slowlog_timeout = 10s
• логи ошибок PHP
display_errors = Off; log_errors = On; error_log
![Page 19: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/19.jpg)
Профилирование с XHProf
• Почти не создает нагрузки в продакшене
• Можно быстро найти корень проблемы
• Подключение
auto_prepend_file = "/var/www/auto_prepend.php"
auto_append_file = "/var/www/auto_append.php"
• либо в PHP коде приложения
![Page 20: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/20.jpg)
Начало страницы
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
$GLOBALS["time_start"] = microtime(true);
![Page 21: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/21.jpg)
Конец страницы
$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 22: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/22.jpg)
Что в итоге?
![Page 23: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/23.jpg)
![Page 24: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/24.jpg)
![Page 25: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/25.jpg)
Узкие места
● Файловая система (сессии, кеш,
автолоадинг)
● БД
● Внешние сервисы
![Page 26: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/26.jpg)
Что еще оптимизировать?
● Подобрать время выполнения фоновых
задач
● Тяжелые задания запускать когда
посещаемость минимальна
![Page 27: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/27.jpg)
Мониторинг
● munin
● newrelic
● google analytics, метрика
![Page 28: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/28.jpg)
Munin
![Page 29: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/29.jpg)
Newrelic
● реалтайм время работы процессов
● число запросов
● время работы скриптов
● ошибки
● проверка доступности сайта
● есть мобильное приложение
![Page 30: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/30.jpg)
![Page 31: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/31.jpg)
![Page 32: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/32.jpg)
Выводы
● Все отслеживаем и записываем
● Постоянный мониторинг состояния
системы
● Кеширование на нескольких уровнях
● Связь сисадмин - разработчик
![Page 33: Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhDevCom November 2014](https://reader034.vdocuments.mx/reader034/viewer/2022052400/559c1e431a28abde298b46ac/html5/thumbnails/33.jpg)
Спасибо за внимание!
Вопросы?
Максим Овсянников
vk.com/maksim.ovsyannikov