
Проработав несколько дней на VDS я сразу же наступил на первые попавшиеся грабли — нагрузка. Казалось бы, с одной стороны, у меня теперь выделенный сервер, все ресурсы мои. Но, как оказалось, ресурсы-то не резиновые, как мечталось.
Естественно, генерация веб-страницы не дает такой нагрузки на процессор как, например, упаковка файлов или терхмерая грушка. Но на одном компьютере в стрелялку обычно играет один человек, занимает все ресурсы на 100%, а сайт обычно просматривает несколько сотен человек в час, так что все запросы должны успевать обрабатываться в реальном времени.
Опытным путем я установил, что основную нагрузку сайты создают не на процессор, как ожидалось, а на оперативную память. Да, скрипты требовательны к памяти, а тем более скрипты систем управления содержимыми. Любая CMS за один раз проверяет множество параметров безопасности, автоматически производит сжатие страниц и многое другое. И все это производится в оперативной памяти.
Даже если допустить, что на обработку одного запроса пользователя уходит 16 мегабайт оперативной памяти, а при возможности одновременного обращения даже пяти пользователей нужно уже как минимум 90 мегабайт. Также стоит иметь в виду, что операционная система, под которой все это работает тоже занимает память и дополнительные процессы веб-сервера тоже должны где-нибудь размещаться.
Как только появляется ограничение по памяти сразу возникает крайняя необходимость ее экономить. Выходов, как всегда, несколько.
Во-первых, оперативную память можно дополнить файлом подкачки. Когда закончится оперативная память, операционная система начнет сливать страницы память на жесткий диск в файл подкачки, а затем, по необходимости, забирать их обратно. Выход хороший, операционная система и все приложения будут считать, что памяти больше чем есть. Но у медали есть и вторая сторона — жесткий диск компьютера работает намного медленнее, чем оперативная память, поэтому как только память заполнится, начнется процесс подкачки и работа с пользователями несколько замедлится. Конечно, это компенсируется более мощным процессором, но тоже только до определенной степени, пока количество посетителей не превысит количества, когда важнее станет процессор, чем оперативная память.
Во-вторых, если сайт обновляется не раз в несколько минут как, например, новостной, то все пользователи видят одни и те же страницы, которые много раз генерируются на основе одних и тех же исходных данных. Соответственно, нет смысла каждый раз генерировать одни и те же страницы, а лучше хранить уже готовых html-код и в нужный момент выдавать его пользователю. Такая технология называется кэшированием. Ее поддерживают большинство систем управления содержимым и включается она где-нибудь в настройках. И здесь тоже есть свои грабли =) Предположим, мы имеем активно комментируемый форум, где посты появляются раз в 5 минут, а время жизни кэша 15 минут, тогда страницы в кэше будут обновляться только раз в 15 минут, то есть не так часто, как появляются новые комментарии. К счастью, многие движки умеют перестраивать кэш как только меняется состав данных, на основе которых он строится. И вторые грабли, о которых никак нельзя забыть упомянуть — работа с жестким диском происходит медленнее, чем с оперативной памятью и кэш надо где-то хранить, так что за экономию оперативной памяти и процессорного времени мы расплачиваемся местом на диске.
Снижение нагрузки на сервер — серьезная задача, которую нельзя решить одинаково в разных проектах, для каждого нужен индивидуальный подход.
Pingback: Мои материалы за 2010 год « Александр Бармин. Блог о Joomla, web и самоорганизации