Эта статья будет полезна тем людям, у которых уже есть свой сайт или которые планируют его открыть.
Статья будет особенно интересна амбициозным веб-мастерам, которые чувствуют, что звездный час их проекта уже не за горами, и хотят подготовиться к наплыву посетителей страниц.
Даже те, кто только мечтает о тысячах пользователей на своем сайте, наверняка задавались вопросом: «Сколько пользователей будет поддерживать мой сайт, если они войдут в систему одновременноЭ» Мне сразу вспоминается известное выражение «Хабраэффект» — явление отказа сайта, не готового к многочисленным переходам на него после появления ссылки в Интернете.
Предположим, что сайт уже есть (или скоро будет): где его разместить? Это должен быть классический хостинг или VPS-сервер? Если vps, то какой и как его лучше настроить? А может разницы вообще нет и проще выбрать то, что подешевле? В этой статье мы рассмотрим несколько вариантов и на практике увидим, какой из них лучше подойдет для нашего сайта.
Будем экспериментировать: задавать разные режимы работы сервера и измерять производительность.
Смоделировать нагрузку на сайт будем с помощью сервиса Loaddy.com. Там вы можете задать количество пользователей, возрастающий тип нагрузки, а график покажет, как на них реагирует сервер.
Считается, что один пользователь генерирует примерно один запрос на сайт в течение 10 секунд. В качестве тестового сайта возьмем демо-интернет-магазин на cms moguta. Он будет наполнен тестовыми «товарами», которые отображаются на главной странице по нескольким критериям (то есть при создании страницы ведется работа с базой данных и т. д.).
Так или иначе, это позволит вам сравнивать режимы между собой.
В качестве тестовой площадки мы создадим VPS-сервер на ОС Ubuntu. Его конфигурация будет [1 ядро, 1 ГБ ОЗУ].
Будем считать, что это серверы начального уровня, которые создаются в большинстве случаев для новых проектов.
Тестовая версия интернет-магазина будет доступна по IP-адресу http://130.193.44.219/ Также пригодится классический хостинг, на который мы также загрузим тот же интернет-магазин для проведения тестов.
Вы можете сами пойти по нашему пути и провести такие же тесты на своем проекте! Так как в большинстве случаев вместе с впс предлагается панель управления, основные изменения в настройках мы будем вносить именно в нее.
На vps сервере нам доступны 3 режима работы:
- Апач;
- Apache в режиме CGI;
- Nginx + php-fpm (без Apache).
Классический недорогой хостинг
Результат доступен по адресу связь .
Ошибки появляются, когда количество посетителей превышает 50 человек.
Хостинг прекращает подачу контента, и если мы зайдем в панель управления хостингом, то увидим примерно следующее:
Ваш сайт был ограничен в течение последних 24 часов.Ну, конечно, хостинг есть хостинг, тем более недорогой.Ресурсы процессора вашего сайта ограничены.
Вы достигли лимита на процессы ввода (количество одновременно запущенных PHP и CGI-скриптов, запланированных заданий и сеансов консоли) 126 раз.
Можно, конечно, найти тариф, который предоставит больше возможностей, но все это нужно учитывать, и как-то узнавать точные данные ограничений у каждого хостинг-провайдера.
VPS: Апач
На очереди наш тестовый VPS с режимом Apache, который, кстати, предлагается по умолчанию при установке панели управления провайдера.
Результат доступен по адресу связь .
Проблемы начинаются, когда количество пользователей превышает 90. Если мы зайдем на наш сервер по ssh и в этот момент посмотрим на список процессов с помощью команды top, отсортированный с помощью Shift+M (по объему потребляемой памяти), мы увидим что-то вроде этого:
Мы видим, что процесс apache2 разросся до множества детей и они съели всю оперативную память нашего vps-сервера.
Здесь необходимо сделать небольшое замечание.
Дело в том, что для сервера Apache теоретически существует режим, позволяющий вместо большого количества дочерних процессов для каждого соединения создавать несколько так называемых мультипотоков, каждый из которых обслуживал бы несколько соединений.
Этот режим называется рабочий , в отличие от стандартного превилка .
Но установить его непросто, в панелях типа ISP это сделать невозможно, а если вы озадачитесь и попытаетесь сделать это через ssh, то обнаружите, что для этого недостаточно выключить префорк и включить рабочий вам также понадобится потокобезопасная версия php. А если используются такие модули, как Zend или IonCube, то они тоже должны быть потокобезопасными.
Во всяком случае, официальный сайт PHP не рекомендует установите этот режим.
ВПС: компьютерная графика
Давайте посмотрим, что произойдет при использовании режима CGI. Для этого вам необходимо в панели управления интернет-провайдера включить использование PHP в режиме CGI; это делается в разделе «Учётные записи – Пользователи – Настройки пользователя».
Результат доступен по адресу связь .
Картина оказалась мрачной.
Сервер отказывается обслуживать контент даже при 55+ посетителях, оперативная память вся съедается «php» процессами.
Дальше идет попытка восстановить работоспособность, но она все равно заканчивается практически 100% неудачей.
VPS: Nginx + PHP-FPM
Настало время режима, в котором сервер Apache вообще не используется, вместо него работает Nginx, а php обрабатывается модулем php-fpm. Если вы используете панель управления интернет-провайдера, вам необходимо включить этот режим для пользователя.Это также делается в разделе «Учетные записи – Пользователи – Настройки пользователя».
Этот режим также должен быть доступен в разделе «Настройки – Возможности – Веб-сервер (www)».
Результат доступен по адресу связь .
Именно то, что нужно! Доступность 100%, при этом скорость загрузки и время ответа сервера находятся на приемлемом уровне, хотя и увеличиваются с ростом нагрузки.
Тем не менее, сервер справляется!
Посмотрим на таблицу процессов в момент максимальной нагрузки на сервер:
Мы видим, что у нас еще есть запас доступной оперативной памяти.
А дочерние процессы php-fpm7.0 не разрастаются массово, а ограничиваются 5 копиями, каждая из которых обслуживает несколько потоков.
Что ж, похоже, «режим-победитель» определен.
Давайте выясним, сколько одновременных посетителей может обслужить наш сервер в этом режиме.
Но перед этим сделаем небольшой «тюнинг».
Во-первых, поскольку при такой работе сервера Apache не используется, его можно полностью отключить.
Сделаем это в панели управления интернет-провайдером в разделе «Система – Службы».
Во-вторых, немного изменим принцип запуска процессов php-fpm. По умолчанию он динамический.
Это означает, что дочерние процессы будут зависать в памяти, даже если они не нужны.
При этом память не освобождается и со временем эти процессы могут разрастись больше, чем хотелось бы.
Поэтому предлагается установить режим «ondemand» — по требованию.
И задайте количество дочерних процессов и время таймаута для них.
Для этого вам нужно будет зайти на сервер по ssh и прописать эти настройки в файле конфигурации php. Удобно это сделать в файле для пользователя, для которого создан домен в провайдере.
Обычно он находится в /etc/php/7.0/fpm/pool.d. Так:
Там мы видим следующие настройки по умолчанию:sudo nano /etc/php/7.0/fpm/pool.d/www-root.conf
[www-root]
pm = dynamic
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_children = 5
pm.max_spare_servers = 5
Чтобы режим по требованию заработал, вам нужно заменить это на:
pm = ondemand
pm.max_children = 5
pm.process_idle_timeout = 10s
И перезапустите php-fpm командой
sudo service php7.0-fpm restart
После этого процессы php-fpm7.0 будут создаваться по требованию (если есть нагрузка), максимальное их количество будет = 5, и через 10 секунд простоя процесс будет убит, освободив оперативную память.
На всякий случай проведем наш тест еще раз, чтобы убедиться, что вся эта самодеятельность не отразилась негативно на работе сайта:
Результат доступен по адресу связь .
Теперь давайте запустим Loaddy с большим количеством посетителей, чтобы увидеть, сколько соединений может обработать наш сервер:
Результат доступен по адресу связь .
Хорошая новость в том, что все запросы были обработаны, хоть и с большой задержкой, но с большим количеством их в секунду.
Время ответа сервера приближается к 10 секундам при количестве запросов 190+.
Но давайте вспомним график режима apache, где мы получили 4 секунды ответа сервера уже при 80+ пользователях, а в режиме php-fpm аналогичные лаги наблюдаются при 130 запросах, которые мы специально выделили курсором на графике выше.
Но это тот же VPS.
Таблица топ процессов по итогам теста (200 пользователей):
Обратите внимание, что после завершения тестирования память, используемая pfp-fpm, была освобождена:
Это означает, что наш сервер готов к новым нагрузкам.
Необходимо помнить, что сайт работает в режиме nginx+php-fpm, это означает, что не используется apache2 и, как следствие, не используется .
htaccess. Это может показаться неудобным, но это самый быстрый доступный вариант, и поисковые системы ранжируют более быстрые сайты.
Заключение
В заключение еще один маленький момент: Если вы настроили на сервере все, что хотели, и решили отключить панель управления интернет-провайдером, или у вас истек срок действия лицензии на нее, имейте в виду, что «основной» процесс от нее так и останется висеть ваш сервер.По прошествии месяцев он может вырасти больше, поэтому лучше его «убить» и удалить из автозапуска и кроны.
Если вы хотите протестировать сайт самостоятельно с помощью Loaddy или других методов, он доступен по адресу http://130.193.44.219/ Теги: #Nginx #Оптимизация сервера #Хостинг #Apache #php-fpm #сайт #vps #веб-сервер
-
Что Такое Алгоритм?! Первая Часть
19 Oct, 24 -
Timeagoinwords На Русском Языке
19 Oct, 24 -
Бесплатная Сотовая Связь Началась!
19 Oct, 24 -
Новые Фавориты. Теперь Удобно И С Этикетками
19 Oct, 24 -
Нотариальный Лед Тронулся
19 Oct, 24