Вернемся к теме производительности в facebook. Что было сделано специалистами компании для того, чтобы была обеспечена достойная скорость обработки данных и приемлемое время предоставления самой разной информации своим пользователям. Статья подготовлена по мотивам презентации Адитья Агарвал (Aditya Agarwal,  Director of Engineering at Facebook), который является директором по разработкам в Facebook. Он внес вклад в разработке поисковой машины Facebook Search Engine. Он также является одним из соавторов Thrift, популярного фреймворка с открытым исходным кодом(open-source RPC framework). До Facebook Адитья работал в компании Oracle.


оригинал

Итак, начнем разговор с архитектуры решения. Мы уже начинали разговор об архитектуры системы (см. начало), поэтому не будем повторяться в этой статье, опустим детали, которые мы описывали ранее.

PHP

Оратор в своей презентации рассказал о преимуществах и недостатках использования тех или иных решений, о которых мы говорили в прошлой статье. Большое внимание уделено плюсам и минусам выбранному языку - php, который существенно проигрывал С++ (компилируемый язык программирования) и Java (компилируемо-интерпретируемый язык программирования).

В результате анализа плюсов и минусов было принято решение разработать собственный продукт HipHop, являющийся транслятором кода, написанного на php в высокооптимизированный код на языке С++. Оговоримся, что предыдущим шагом была оптимизация текcтов исходного кода на php, которая длилась не один год. И только следующим этапом стала разработка собственного продукта по ретрансляции исходного кода (высокооптимизированного исходного кода на php) в исходный код на С++. Данное решение компанией выложено в широкий доступ, поэтому каждый может попробовать использовать его в своих приложениях. Но и на этом компания не остановилась: она модернизировала это же решение, а также создала свой язык программирования. Подробнее - смотрите статьи в ресурсах, ссылки на которые даны в конце статьи.

Подробнее о об опыте использования решения можно прочитать в ресурсах, ссылки на которые размещены в конце статьи.

Сервисы

Следующее направление работы по оптимизации и развитию решений стала работа над сервисами и над платформой Thrift. Если ранее компания озвучивала php как один из основных языков написания сервисов, то в дальнейшем она сфокусировалась на других языках программирования, более оптимальных для решения тех или иных задач.

Scribe - это следующая часть архитектуры решения, о которой мы подробно говорили в предыдущей статье. Scribe является сервером для агрегирования данных журналов в   режиме реального времени с большого количества серверов. В githab

 

Настройка параметров доступа к сервисам осуществляется с помощью инструмента SCM:

Также система предполагает мониторинг сервисов:

Далее оратор подробно рассказал о том, как создаются уникальные страницы пользователей (более 400 миллионов уникальных страниц), как формируется лента новостей для каждого пользователя на примере изменения статуса одного пользователя и работы сервиса новостей и модуля Scribe для реагирования на действия и сохранения.

На втором шаге мы уже используем изменения данных связанных с нами пользователей для формирования ленты новостей. В этом случае php использует Thrift для доступа к агрегированным данным.

Leaf Server - очень прост (одноуровнивая хеш таблица) - ИД пользователя и значение (действие пользователя).  Leaf Server используется для хранения данных, а агрегатор - для выборки данных.

Memcached

Очень просто и очень быстро.

 Мы достаточно подробно говорили об этом уровне в предыдущей статье, поэтому только сошлемся на слайды оригинальной презентации:

 

База данных

 Интересный факт обнаружили специалисты компании: MySQL - надежная, простая и быстрая база данных.

Более 6000 серверо-лет работы без потери данных. Используется простая архитектура данных: одна таблица с двумя столбцами : ИД и данные. Более подробно мы уже останавливались на отношении компании к базе данных и принципах использования.

Оратор остановился на теме загрузки и работы с фотографиями.

Работа с фотографиями с помощью файловой системы оказалась проблематичной. Критичным становятся операции ввода-вывода, требующие большой объем оперативной памяти. Ч то обычно делают для оптимизации работы? Кеширование, использование в размерах и объемах фотографии для предпросмотр, для исключения операции загрузки "тяжелой" фотографии и масштабирования фотографии на странице.

Но специалисты компании Facebook пошли дальше: они предложили хранить фотографии в базе данных в виде blob-ов.

 

 

Компания добилась большей эффективности системы при работе с фотографиями по сравнению с оригинальной системой и по сравнению с другими оптимизированными системами (Cassandra и др.)

Как оратор описал философию своей команды и вообще философию успешной ИТ-команды?

- Быстро двигаться и ломать стереотипы,

- Оказывать огромное влияние, работая в  небольшими группами,

- Быть твердыми и инновационными.

 Для сравнения эффективности работы своих инженеров компания привела интересную статистику: количество активных пользователей на одного инженера.

Итак, проект Facebook не стоит на месте, он растет и развивается, радуя своих поклонников высокой производительностью, а ИТ специалистов новыми интересными решениями.

Так, развивая подход по трансляции кода PHP в C++компанией выпущена виртуальная машина, окружение и JIT-компилятор для PHP под названием HipHop VM for PHP или просто HHVM, который позволил повысить производительности в пять-девять раз.

HHVM работает по образцу JVM (Java Virtual Machine): JIT-компилятор транслирует исходный код в машинные коды, когда это нужно, и позволяет учитывать различные факторы при генерации машинного кода. Например, если там вызов к базе данных MySQL, то JIT-компилятор посмотрит, какой тип данных вызывается, и сгенерирует соответствующий код на лету.

Также компания анонсировала новый язык Hack, который является прямым потомком PHP, основан на его синтаксисе. Hack создан специально для виртуальной машины HHVM (Hip Hop Virtual Machine). Команда Facebook полностью перевела разработку на новый язык и называет эту миграцию большим успехом. Однако Facebook не отказывается от поддержки PHP и планирует доработать поддержку PHP5 в HHVM. 

Итак, жизнь не останавливается, все течет и развивается дальше. А мы будем время от времени следить за тем, чем новеньким могут порадовать нас команды, которые реально работают с высоконагрузочными системами.

Ресурсы:

Сборка и запуск HipHop-PHP

Несколько незамеченных подробностей о HipHop PHP

Facebook ускорил PHP в девять раз благодаря HipHop VM

Команда Facebook выложила в открытый доступ язык Hack

Вверх