Server Configuration

Ускоряем PHP с HipHop

Posted in HipHop, PHP, Performance on February 4th, 2010 by Yaroslav Vorozhko – 1 Comment

Сегодня Facebook анонсировал релиз HipHop.

Коротко, что такое HipHop для PHP:

  • HipHop – это компилятор кода PHP в C++. Т.е. он преобразует PHP код в C++ код для дальнейшей компиляции. Это не другой язык. И это не компилятор времени исполнения (JIT).
  • HipHop будет выпущен Facebook под opensource лицензией, под такой же как и основной код PHP. Facebook возлагает надежды, что разработчики улучшать HipHop и расширят его функциональность, таким образом HipHop сможет заменить больший набор функций PHP.
  • HipHop был одним из проектов в Facebook по улучшению его производительности. Все таки Facebook, второй сайт по объему траффика в интерент и в основном построенный на PHP. HipHop запущен на большинстве LAMP PHP серверах Facebook и в среднем улучшил производительность этих серверов в два раза.
  • HipHop достигает этого, путем исследования вашего PHP приложения и на его основе строить C++ проект. C++ проект потом компилируется и запускается на собственном веб серврере. Это дает возможность исключить PHP Zend engine и Apache из цепочки.
  • Учитывая что, некоторые возможности PHP не поддерживаются. Также, дополнения к PHP написанные на C, должны быть переписаны в HipHop C++ дополнения.
  • Преимущества в скороости HipHop достигаются благодаря статическому анализу, который парсит ваш PHP код ищя пути преобразования динамических частей в статические.
    Учитывая это, ваше улучшение производительности, может сильно варьроваться – более структурированный код получить наибольший прирост в производительности.

Что значит HipHop для вас:

  • Если ваш проект использует sharing хостинг – то ничего.
  • Если ваш проект использует 2 или менее серверов – то ничего.
  • Если у вас нет выделенного development и deployment окружения и у вас нет разработчика знающего C++ – то ничего.
  • Если вы разработчик open source приложения – то немного.
  • Если вы shared хостинг компания – то немного.
  • Если PHP не bottleneck вашего приложения – то пока еще ничего.
  • Если ваше приложения использует много серверов, и в основном на них работает PHP, а также у вас есть все исходники PHP кода, у вас есть немного знаний C/C++, тогджа ответ возможно.
  • Если вы разрабатываете php framework, то ответ иногда.
  • Если у вас есть сильно-связанные части архитектуры, которые удовлетворяют требованиям выше и эти части слабо связаны (через API) с остальной системой, то ответ много что.
  • Если вы обдумываете какой язык выбрать для реализации вашей системы, то ответ очень много.
  • Если вы обдумываете аргумент, переписать весь сайт на другой язык, то вы потеряли свой аргумент.

Есть очень много языковы возможностей, хороших или плохих, которые PHP должен поддерживать, а HipHop нет. Потому как HipHop уникальное решение, он никгода не заменит Zend Engine.

Статья является частичным переводом статьи Terry Chay Faster PHP fo shizzle—HipHop for PHP

Lighttpd создаем виртуальные хосты автоматически

Posted in Lighttpd, Server Configuration on December 6th, 2009 by Yaroslav Vorozhko – Be the first to comment

Для создания автоматических вартуальных хостов нам потребуется модуль evhost. Этот модуль идет в стандартной поставке Lighttpd.
В секции modules расскомментируйте соответсвующую строку или добавте новую, если модуля нет в списке.
Первое, что нам надо знать - это то как lighttpd читает и парсит URI с помощью этого модуля.

CODE:
  1. %% => % sign
  2.   %0 => domain name + tld
  3.   %1 => tld
  4.   %2 => domain name without tld
  5.   %3 => subdomain 1 name
  6.   %4 => subdomain 2 name
  7.   %_ => full domain name

Нас интересуют сабдомены первого уровня, которые хранятся в переменной %3.
Создадим для них специальный конфиг:

CODE:
  1. $HTTP["host"] =~ ".*\.example\.org" {
  2.       evhost.path-pattern = "/home/%3/public_html/"
  3.   }

Этим конфигом мы будем перехватытвать все запросы обращенные к example.org и всем его сабдоменам.
Директива evhost.path-pattern устанавливает document root для каждого сабдомена.
Note: не указывайте server.document-root как путь по умолчанию к вашим сабдоменам. Это может быть опасно.

Теперь каждый каталог в /home будет считатся сабдоменом для example.org.
Незабудте также прописать каждый сабдомен в DNS или /etc/hosts.
Перезапускаем Lighttpd и проверяем.
Спасибо!

HG Mercurial email уведомления

Posted in Mercurial HG, Server Configuration, Tips And Tricks on November 24th, 2009 by Yaroslav Vorozhko – Be the first to comment

В каждом серьезном проекте используется контроль версий и разработку зачастую ведет не один программист. Как минимум, кроме программиста есть еще и главный программист, который следит за качеством разработки.
С помощью hg mercural мы можем предоставить главному программисту мониторинг изменений в репозитории, особенно когда это касается обновления главной ветки.
В mercurial для этого есть замечательный встроенный плагин notify, который поможет нам настроить уведомления по email.

Схема репозиториев будет следующая:

  1. Главный /www/mybigsite.com/
  2. Транзитный /home/repos/mybigsite
  3. Репозиторий разработчика находится в его домашнем каталоге.

Когда разработчику надо отправить новую порцию изменений в главный репозиторий, он:

  1. Отправляет данные в транзитный репозиторий (команда hg pus)
  2. А потом главный разработчик проверяет изменения и обновляет главный репозиторий (команда hg pus && hg up)

Настроим два уведомления:

  1. По событию hg pus в транзитный репозиторий - будем отправлять diff изменений главному программисту. Таких обновлений (hg pus) разработчик или разработчики могут сделать несколько, до того как будет обновлен главный репозиторий.
  2. Главный программист получив уведомления об обновлении транзитного репозитория проверяет изменения и обновляет главный репозиторий. По этому событию мы отправляем главному разработчику новую порцию diff изменений, который содержит именно все порции обновлений, что попали на главный репозиторий.

Теперь перейдем к настройке уведомлений используя hghook notify.
Открываем файл команд hgrc транзитного репозитория, если файла нет, то создаем его /home/repos/mybigsite/.hg/hgrc и добавляем следующие строки

read more »