Обычно, я не рассказываю читателю о технической стороне работы моего сайта, но некоторыми вещами захотелось поделиться.
До недавнего времени мой ресурс целиком и полностью отдавался по домашнему ADSL Annex B каналу, исходящая скорость на котором не превышает 600 Кбит/с. В принципе, канала хватало, но ровно до тех пор, пока я не начал развешивать в каждом посте по десятку фотографий.
Главная страница моего блога весит от 5 до 8 мегабайт. Для того, чтобы отдать весь контент посетителю за 10 секунд, нужно иметь скорость соединения не менее 10 мегабит. А если кидаешь ссылку на форум о наличии вновь опубликованного поста, то в раз к тебе приходят до 20 человек. Здесь нужно уже иметь гигабитный интерфейс, чтобы для каждого посетителя процесс загрузки фотографий остался незаметным.
На моей машине помимо блога размещены такие вещи, которые нельзя перенести на VPS, поэтому целиком и полностью отказываться от домашнего сервера я не спешу. К тому же интерес пропадает, и платить по $10 за урезанные возможности не хочется.
Задача была решена следующим образом.
Начиная с версии 2.6 в WordPress появилась замечательная возможность указания пути размещения и загрузки для контента и плагинов (см. wp-config.php). Т.е. владелец блога может указать следующие вещи:
1. Локальный путь к папке wp-content, в которой находится контент:
define( 'WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] . '/wp-content' );
2. Полный URI путь–префикс к папке wp-content:
define( 'WP_CONTENT_URL', 'http://wp-content.ksn.name');
3. Локальный путь к папке plugins:
define( 'WP_PLUGIN_DIR', $_SERVER['DOCUMENT_ROOT'] . '/wp-content/plugins' );
4. Полный URI путь–префикс к папке plugins:
define( 'WP_PLUGIN_URL', 'http://ksn.name/wp-content/plugins');
Конечный слэш («/») не указывается!
Как вы уже догадались, я воспользовался возможностью определения полного URI путь–префикса к папке wp-content и перенёс (на самом деле продублировал) весь контент на другой субдомен. Теперь стало возможным отдавать тяжёлый статический груз WordPress блога с совершенно другого сервера/хостинга (или нескольких серверов, если правильно настроить DNS).
В качестве сервера для контента послужила виртуальная win–площадка Мастерхост за 150 рублей в месяц. Почему windows, скажете вы… Всё дело в том, что в отдаче статического контента IIS равных нет. К тому же, я давно задумывал родить несколько сервисов на ASP.NET (windows–хостинг был выбран без колебаний).
Итак, я скопировал всё содержимое директории wp-content на хостинг и определил константы в файле wp-config.php.
После проделанного сайт работоспособен, но… URI пути к фотографиям в постах остались прежними и начинаются с http://ksn.name, т.е. основная нагрузка трафика остаётся на прежний канал. Открывать каждый пост и переписывать пути занятие нецелесообразное, поэтому дополнительно был применён швейцарский нож URL преобразований — mod_rewrite, и в корневой файл .htaccess были внесены две строчки (для папки загрузок и фотографий):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-content/gallery/(.*)$ http://ksn.name/wp-content/gallery/$1 [R=303,L]
RewriteRule ^wp-content/uploads/(.*)$ http://ksn.name/wp-content/uploads/$1 [R=303,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_HOST} !=ksn.name
RewriteRule ^(.*) http://ksn.name/ [R=301]
</IfModule>
Таким образом, при запросе картинки с адресом http://ksn.name/wp-content/uploads/2009/12/S-MPH-0895_11.jpg Apache сообщит браузеру посетителя «смотри по адресу http://wp-content.ksn.name/uploads/2009/12/S-MPH-0895_11.jpg», и картинка будет загружена с веб–сервера wp-content.ksn.name.
Отныне, ежедневный груз в размере нескольких гигабайт сброшен на плечи Мастерхоста.
На что следует обратить внимание?
P.S. Переопределением путей для папки плагинов работает полноценно, но с ним, на мой взгляд, лучше не экспериментировать.
31 октября 2006 года между Microsoft и Zend Technologies была подписана договорённость, согласно которой первая должна была продвигать продукт PHP в своих решениях. В частности, была поставлена задача, чтобы хостеры включали поддержку PHP на хостинге Windows (что называется, «из коробки»).
Пётр Диденко представил отчёт о выполненой трёхлетней работе, о полезности которой ещё долго можно спорить. Безусловно, здорово, что PHP скрипты «без проблем» можно запускать на Win–хостинге, но вопрос дальше слова можно не стоит.
В виду того, что отрицательные отзывы ценятся намного больше, чем похвала, я решил написать на его статью мини–рецензию.
Пётр пишет:
WinCache — совсем недавний продукт, акселератор (opcode cache) для PHP на IIS7. С ним PHP-приложения на Windows работают в 3-4 раза быстрее, бесплатный.
Действительно, кэширование это здорово, но в купе с модулем URL Rewrite эта штука становится бесполезной. Проявляется это так: если время кэширования задано 30 секунд и кем–то открывается главная страница сайта, то при переходе по ссылке, например «Контакты», любым пользователем в течении времени кэширования (30 секунд) будет показана закэшировавшаяся до этого главная страница.
Теперь вернёмся к слову можно:
Десятки самых популярные PHP–приложений (например, WordPress, Drupal, Joomla) были проверены на предмет правильной работы на Windows. То есть, мы взяли и посмотрели всё ли хорошо. Где было не очень — поработали с авторами на предмет совместимости и теперь всё хорошо.
Действительно, все эти приложения прекрасно запускаются на Windows–хостинге, но с нагрузкой в 10 пользователей не справляется даже WordPress. Мы установили WordPress на Windows–хостинг компании Мастерхост и выполнили команду теста производительности ab -n 100 -c 10 http://www.example.net/ — результат не заставил себя долго ждать. Сайт моментально лёг с 503 ошибкой. За разъяснением ситуации обратились в службу поддержки. Получили следующий ответ:
Установленный «из коробки» WordPress под нагрузкой, создаваемой ПО типа apache benchmark в нашей текущей хостинговой среде в 100% случаев будет работать следующим образом:
При обращении к php-скрипту модуль FastCGI в IIS будет запускать процесс php-cgi.exe, который будет обслуживать запросы к сайту.
Поскольку в случае с WordPress потребление его скриптами процессорных ресурсов можно вкратце охарактеризовать, как «чудовищное», то под большим количеством запросов процесс будет потреблять все доступные ему ресурсы CPU, что на практике означает 100% загрузку одного процессорного ядра каждым процессом php-cgi.exe. Если ресурсов одного процессорного ядра не хватит для своевременной обработки запросов к сайту (что в случае с использованием ab довольно вероятно), то FastCGI запустит второй процесс php-cgi.exe. И так далее.В нашей хостинговой среде количество процессов FastCGI на данный момент не может быть больше четырёх для каждого пула приложений (для каждой виртуальной площадки используется собственный пул приложений). При использовании wordpress и ab на сервере с двумя четырёхядерными процессами это может означать продолжительное потребление до 50% ресурсов CPU сервера.
При таком использовании ресурсов почти немедленно будет срабатывать встроенная в IIS система лимитирования нагрузки, которая принудительно перезапустит все процессы в соответствующем пуле приложений виртуальной площадки. ab при этом будет получать 503-ю ошибку до тех пор, пока не закончится перезапуск этих процессов.
Таким образом, если вы планируете размещать на виртуальном хостинге посещаемый сайт с WordPress, то мы рекомендовали бы вам использовать кеширование, например, с помощью Wincache, в связке с популярным плагином Hyper Cache. Это обычно позволяет снизить потребление сайтом ресурсов CPU сервера до приемлемых величин.
Отдельно хочу поблагодарить специалистов Мастерхоста за подробные объяснения, это всегда радует. Именно поэтому я всегда обращаюсь к ним — они нацелены на результат.
Что хочется отметить? В ответе чётко видно, что мне не предложили –nix. И вообще, ни одного слова про –nix даже близко не было. Это радует — если клиент выбрал Windows, значит надо. Также в ответе чётко сказано — предлагаемый хостинг не предназначен для работы приложений под высокой нагрузкой. А значит не предназначен для серьёзных приложений вообще.
Пётр:
Буду рад, если вы присоединитесь ко мне в моей радости по поводу трехлетия сотрудничества с PHP–сообществом, а также, возможно, предложите что же ещё мы можем сделать для вас! Ура ;-)
Я буду рад, если мне ответят на следующие два три вопроса:
Предфинальная версия Windows 7 RC будет действительна до 1 июня 2010 года. По истечении данного срока, она начнет перезагружать через каждые 2 часа.
Многие после покупки ноутбука с предустановленной операционной системой Windows Vista меняют её на XP.
После покупки ноутбука с лицензионной Windows Vista могу однозначно сказать, что практически все задачи (которые приходится мне решать) с лёгкостью руки можно выполнить и на ней: программирование (Visual Studio), инженерные вычисления (Matlab R2007b), web-вёрстка и графика (Adobe CS4). Однозначно, не стоит возвращаться на XP (игры — разговор отдельный).
Если вы всё же надумали отказаться от Windows Vista, то следует хорошо подумать о способе восполнения таких прелестей, как восстановление первоначальной конфигурации системы и связки «операционная система — BIOS», а также уточнить вопрос с гарантией.
http://chich8.livejournal.com/1716.html:
Есть очень разное отношение у компаний к тому, кого они считают своим потребителем. Возьмем, к примеру, Microsoft. На Cаммите Лидеров Управления в 2005 году, Дергунова Ольга, будучи руководителем Microsoft в России, говорила, что ее компания активно следит за тем, чтобы на ее продуктах партнеры Мicrosoft зарабатывали не менее 70%. Я удивился, но запомнил.
Моё мнение: Евгений неправильно её понял. Речь шла не о продажах продуктов, предназначенных частным пользователям (операционные системы, Office и т.п. ), а о продуктов для разработчиков (MSSQL, Visual Studio, Microsoft Project). На них, действительно, можно и на порядок больше заработать.
В Microsoft заявили о выпуске на рынок новой версии браузера Internet Explorer — IE8, которая, как надеются в компании, сумеет победить конкурентов.
Браузер позволяет заметить и блокировать попытки третьей стороны отследить историю посещений веб-сайтов, что впоследствии используется для рекламной рассылки.
В компаниях, занимающихся интернет-рекламой, уже выражали озабоченность тем, что такая функция нового браузера Microsoft может негативно повлиять на всю модель рекламного бизнеса в сети.
Самое интересное:
Другой опцией нового браузера является возможность начинать новую сессию, не сохраняя в памяти компьютера посещенные до этого веб-страницы.
http://news.bbc.co.uk/hi/russian/international/newsid_7852000/7852625.stm