Следите за новостями

Цифра дня

41% казахстанцев столкнулись с инцидентами кибербезопасности

Facebook изобретает виртуальную машину PHP

В компании отказались от трансляции кода PHP в C++ в пользу динамически генерируемого на сервере байт-кода

8 августа 2013 07:13, Computerworld.kz
Рубрики: Мир

Гигант социальных сетей 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, время обработки кода процессором не будет фактором, сдерживающим производительность, – указал он. – Основные затраты здесь связаны с обращением к базе данных и буферной памяти».