Задача подготовки сайта к высоким нагрузкам является комплексной: любое из звеньев системы, участвующих в формировании конечной страницы сайта, может оказаться слабым в ответственный момент и привести к проблемам в работе сайта. В ходе нагрузочных испытаний проводилось последовательная оптимизация каждого из звеньев системы, обеспечивающих работу сайта, а затем тестирование системы в целом.
В качестве платформы для сайта Государственной Думы был использован 1С-Битрикс версии 9.5, редакция «Портал».
Оптимизация системы
Тестирование системы
Оптимизация системы
Аппаратное обеспечение
Заказчиком был предоставлен сервер с характеристиками, превышающими или равными заявленным в конкурсной документации:
| Подсистема | Характеристики |
|---|---|
| Процессор | Dual Intel Xeon E5530 Quad-Core (2,4Gh 8Mb) |
| Оперативная память | 24 Gb |
| Жесткие диски 2.5" | 16х147Gb SAS (10000 rpm) 2,5" |
Программное обеспечение
Использовалась типовая в таких случаях двухуровневая конфигурация веб-серверов из nginx 0.8.x в виде frontend и Apache 2.x в виде backend-сервера.
Nginx
Nginx в нашем случае выполняет несколько функций:
- Самостоятельная отдача статичных файлов css, js, изображений и др.;
- Передача веб-серверу Apache php-запросов;
- Возможность просмотра flv-видео с произвольного места;
- Переадресация пользователя при получении запроса на страницы старой версии сайта.
Для файлов формата css, js, а также для html-страниц было включено gzip-сжатие. Для всех статичных файлов было установлено максимальное «время жизни»:
expires max;
Количество рабочих процессов nginx worker_processes было задано равным количеству ядер.
Apache
Apache принимает локальные запросы по внутреннему порту от nginx. Для корректной передачи IP-адресов пользователей был использован модуль RPAF.
Из расчета расходования оперативной памяти (бралось 40 Мб на процесс) и загрузки процессора Apache были выбраны следующие параметры его работы:
StartServers 40 MinSpareServers 40 ServerLimit 200 MaxClients 200 MaxRequestsPerChild 200
При длительной работе процесса наблюдался регресс в сторону увеличения потребления оперативной памяти, поэтому значение MaxRequestsPerChild было уменьшено до 200.
PHP
Что касается интерпретатора PHP, все процедуры настройки достаточно стандартные.
Была установлена последняя стабильная версия PHP 5.2.x и eAccelerator 0.9.6.x. Опытным путем был определено достаточное количество выделяемой оперативной памяти для eAccelerator:
eaccelerator.shm_size="256"
Во избежание утечек памяти были добавлены разумные ограничения работы PHP:
max_execution_time = 60 max_input_time = 60 memory_limit = 32M
MySQL
При настройке конфигурации СУБД уделялось повышенное внимание выделению памяти под те или иные задачи, отдельно рассматривалась настройка InnoDB. Учитывались рекомендации модуля «Производительность» 1С-Битрикс.
Настройка 1С-Битрикс
Кеширование
Наиболее эффективным средством ускорения работы 1С-Битрикс является встроенная система кеширования. В последних редакциях она стала еще удобнее с появлением технологии Сache Dependencies. Были проведены стандартные процедуры проверки и настройки использования кеширования компонентами сайта. Небольшой доработки потребовал механизм кеширования в управляемых таблицах из-за своего сложного устройства и богатых возможностей.
В качестве способа хранения был выбран стандартный файловый кеш. Показатели работы с memcached нас не устроили, кроме того наблюдались проблемы со сбросом кеша в memcached в определенных ситуациях.
Модули сайта
Одним из способов ускорения сайта на 1С-Битрикс является отключение наиболее ресурсоемких модулей, отказ от которых возможен в определенных ситуациях. Это, например, модули Проактивная защита, Веб-аналитика и другие. В нашем случае мы смогли отказаться лишь от модуля Компрессия, функции которого выполняет nginx. Остальные модули входят требования технического задания и необходимы для полноценной работы сайта.
Тестирование системы
Тестирование базовой нагрузочной способности. Сценарии тестирования
Сначала нами была проанализирована статистика посещения прежней версии сайта Государственной Думы. В список наиболее популярных страниц входили:
| Страница | % от общего числа |
|---|---|
| Всего запросов | 100,00% |
| Главная страница (/) | 46,10% |
| Страницы новостей | 38,59% |
| Поиск по законопроектам (/faces/lawsearch) | 11,33% |
| Поиск по сайту | 1,44% |
| Статистика законодательной деятельности (/lawstat/) | 0,32% |
| Прямая трансляция заседаний (/livevideo.ram) | 0,28% |
| Обращение в ГД (letter_pr.html) | 0,09% |
Далее мы учли в данном списке разделы нового сайта, которых ранее не было, но которые, как ожидалось, вызовут интерес у пользователей:
| Страница | % от общего числа |
|---|---|
| Всего запросов | 100,00% |
| Главная страница (/) | 46,10% |
| Страницы новостей (/news/) | 38,59% |
| Поиск по законопроектам (/systems/law/) | 11,33% |
| Страница/список депутатов (/structure/deputies/) | 1,72% |
| Блоги депутатов (/blogs/bogomolov/post/11/) | 1,62% |
| Поиск по сайту (/search/) | 1,44% |
| Статистика законодательной деятельности (/legislative/statistics/) | 0,32% |
| Прямая трансляция заседаний (/analytics/tv/livevideo.ram) | 0,28% |
| Обращение в ГД (/representative/addresses/leave/) | 0,09% |
На основе данного списка было сформировано 8 сценариев посещения страниц пользователями, которые эмулировали бы естественную нагрузку на сайт при его реальной работе, а также подобрано их процентное соотношение так, чтобы суммарная статистика сходилась с данными приведенной выше таблицы. За верхний порог базовой нагрузки было взято 3 млн. хитов в сутки.
| Код | Описание | Цепочка | % от общего числа | Количество хитов |
|---|---|---|---|---|
| news | Чтение новости | / /news/273/26797/ | 36,91% | 1 107 300 |
| deputy | Поиск депутата через раздел Депутаты и просмотр страницы депутата | / /structure/deputies/ /structure/deputies/23501/ | 1,14% | 34 200 |
| se_deputy | Переход на страницу депутата из поисковика | /structure/deputies/23501/ / | 0,57% | 17 100 |
| search | Поиск материала через Поиск по сайту и переход | / /search/ /news/273/26797/ | 1,44% | 43 200 |
| law_search | Поиск по законопроектам: зашел на форму и посмотрел результаты поиска | / /systems/law/ /systems/law/ /systems/law/ | 5,67% | 170 100 |
| address | Обращение граждан | / /representative/addresses/leave/ | 0,09% | 2 700 |
| video | Просмотр видео-трансляции | / /analytics/tv/livevideo.ram | 0,28% | 8 400 |
| blog | Переход на запись блога с rss | /blogs/bogomolov/post/11/ | 1,62% | 48 600 |
| Всего хитов | 3 062 100 | |||
Все сценарии выполнялись в режиме неавторизованного пользователя.
Сценарийное тестирование проводилось с помощью средства jMeter.
Пиковая нагрузочная способность
Определение пиковой нагрузочной способности проводилось с помощью средства ab. Результаты тестирования в 1,5-2 раза превышают значения требований технического задания.
