Гигант социальных сетей Facebook предпринял еще один шаг к ускорению выполнения кода, написанного на языке веб-программирования PHP. Компания разработала виртуальную машину PHP, которая при запуске программ, написанных на PHP, в больших системах способна увеличить скорость их выполнения в девять раз.
«Наша цель заключается в том, чтобы действительно заставить PHP работать быстро», — указал руководитель группы инженеров Facebook Джоел Побар. В этом году на всех серверах Facebook была установлена виртуальная машина HipHop Virtual Machine (HHVM).
HHVM — уже не первая попытка Facebook добиться ускорения выполнения кода PHP. Язык PHP является интерпретируемым, то есть его исходный код обрабатывается напрямую. В общем случае программы, написанные на интерпретируемых языках, выполняются не так быстро, как программы на Си или C++, которые предварительно переводятся на машинный язык компилятором. Facebook сохраняет приверженность PHP, потому что этот язык хорошо знаком большинству веб-программистов, работающих в компании.
Для удовлетворения растущих потребностей пользователей в Facebook ранее был разработан компилятор HipHop, осуществляющий перевод кода PHP на язык C++. После этого код C++ компилируется, благодаря чему достигается увеличение быстродействия.
Несмотря на то что в Facebook были довольны значительным приростом производительности, который на протяжении нескольких лет обеспечивала первая версия HipHop, в компании продолжали искать и другие способы ускорения передачи динамически создаваемых веб-страниц миллиарду своих пользователей. «В нашей стратегии повышения производительности постоянно происходят какие-то изменения», — подтвердил Полар.
Следующим шагом стало проектирование HHVM. Виртуальная машина, на создание которой ушло три года, работает по тому же принципу, что и виртуальная машина Java (JVM). В состав HHVM входит JIT-компилятор (Just In Time), который по мере необходимости на лету переводит исходный код, написанный человеком, в байт-код, читаемый машиной. (От использования предыдущей версии HipHop, переименованной в HPHPc, в Facebook решено отказаться.)
«Компиляция на лету позволяет виртуальной машине принимать оптимизирующие решения непосредственно в процессе выполнения кода, — пояснил Полар. — К примеру, если базе данных MySQL передается запрос на считывание строки данных, HHVM может на лету определить, к какому типу эти данные относятся (например, являются ли они целочисленными или строковыми). После этого опять-таки на лету генерируется код, который лучше подходит для обработки конкретного типа данных».
Старая версия HipHop анализировала кодовую базу Facebook и формировала специализированный код по результатам этого анализа. Но она не могла принимать все решения самостоятельно. В кодовой базе присутствовали части, анализ которых был запрещен.
По оценкам Побара, HHVM работает примерно в два раза быстрее HPHPc и в девять раз быстрее чистого PHP.
Код HHVM был помещен Facebook на сервис GitHub в надежде на то, что им воспользуются и другие разработчики, желающие ускорить функционирование своих сайтов PHP.
Виртуальная машина HHVM оптимизирована для управления очень большими и загруженными кодовыми базами PHP. По оценкам Побара, использование HHVM на сайтах стандартных размеров (например, на блог-хостинге Wordpress) дает только пятикратный прирост производительности.
«Если взять код PHP и запустить его в HipHop, время обработки кода процессором не будет фактором, сдерживающим производительность, — указал он. — Основные затраты здесь связаны с обращением к базе данных и буферной памяти».
Соцсеть «ВКонтакте» стала работать вдвое быстрее
В результате перевода всего программного кода на специальный язык программирования KPHP социальная сеть «ВКонтакте» стала работать в два раза быстрее, сообщил на своей странице сообщил основатель ресурса Павел Дуров. Как утверждается, KPHP совместим с большинством спецификаций «обычного» PHP, однако является не интерпретируемым, а компилируемым, что обеспечивает генерацию гораздо более эффективного кода. Кроме того, язык предоставляет дополнительные возможности оптимизации. Как поообещал Дуров, в перспективе доступ к коду KPHP будет открыт.
К своему посту Дуров добавил несколько графиков, на которых видно, что среднее время загрузки страниц сократилось с 0,25 до 0,1 секунды, время загрузки новостей — с 0,25 до 0,1 секунды, а загрузка диалогов теперь происходит менее чем 0,1 секунды по сравнению с предыдущими 0,175 секунды.
Как добавил Дуров, в конце мая посещаемость «ВКонтакте» достигла очередного рекордного значения — почти 50 млн пользователей.