От команды «ВКонтакте»: вариант PHP — KPHP

9 сообщений в этой теме

В конце мая, перед началом сезона отпусков, суточная посещаемость ВКонтакте достигла очередного рекорда — почти 50 млн. пользователей. Именно тогда мы завершили перевод всего кода ВКонтакте на компилируемый язык программирования, который разрабатывали более года, — KPHP. В результате практически все страницы сайта стали грузиться более чем 2 раза быстрее.

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

6xPDj5BQmrA.jpg

 

fWyh8VEeQEo.jpg

Mp8mJsNQ3ys.jpg

IN86oGPcrNE.jpg

Павел Дуров
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хотите убрать блок рекламы? Авторизуйтесь

Loading...

очень интересно. еще был видеть сам язык

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Или же одумаются и не выложат, тк этим явно захотят воспользоваться конкурентные соцсети

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Или же одумаются и не выложат, тк этим явно захотят воспользоваться конкурентные соцсети

Юрий, основа социальной сети — богатый, удобный функционал и интересные фишки. Оптимизация не играет основополагающей роли в проекте. KPHP выложат и продолжат развивать мировым сообществом разработчиков.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

богатый, удобный функционал и интересные фишки. Оптимизация не играет основополагающей роли в проекте
как раз таки влияет именно скорость работы и оптимизация, т.к это экономит миллионы баксов в итоге. 
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

богатый, удобный функционал и интересные фишки. Оптимизация не играет основополагающей роли в проекте

как раз таки влияет именно скорость работы и оптимизация, т.к это экономит миллионы баксов в итоге.

Юрий, она одна из главных, но, повторяю, не основополагающая.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пользователь «Хабрахабра» Teodorix пообщался о kPHP (написание «KPHP» — неправильно) с ребятами из команды «ВКонтакте» — Олегом Илларионовым и Василием Бабичем:

Олег, Василий, привет. Итак, что же такое kPHP? В чём его суть?

Олег Илларионов:

Привет! kPHP — транслятор PHP в С++, который, в том числе, анализирует код, выводит типы переменных, а там, где однозначно вывести не удалось — использует универсальные переменные, в которых могут храниться данные любого типа.
Конечно, kPHP это не штука которая скомпилирует любой PHP-код и он будет работать — на деле kphp очень хороший статический анализатор кода, который находит ошибки, как потенциальные так и фактические. Кстати, при переводе сайта (речь идёт о ВКонтакте) даже было запущено несколько небольших нововведений, которые были сделаны давно, но из-за багов в коде не стали доступны широкой публике.

Много вопросов связано как с поддержкой основных методов PHP, так и с ООП. Кроме уже озвученного — как о стандарте, так и об ограниченной поддержке ООП, можете что-то добавить?

ОИ:
В kPHP Есть огромная масса всего, даже вещи которые мы (ВКонтакте) не используем, но пока что нет некоторых очень серьезных штук — например, DOMDocument.
Что касается ООП, то на данный момент оно в kPHP не поддерживается, за исключением нескольких стандартных объектов PHP. Одной из задач при переводе сайта на kPHP было полное избавление от ООП. Но это отсутствие было сделано скорее как фича, основным вектором при разработке kPHP была скорость, Это играет не в пользу поддержки ООП и, кроме того, ООП хорош в первую очередь тогда, когда у вас на проекте есть сотня разработчиков либо в нём обилие интерфейсов.

В комментариях прозвучал классический вопрос: «быстрее ли kPHP чем Java C# Go»?

ОИ:
Зависит от того, что именно тестировать и от того, как написать код. С kPHP очень интересно: например, скорость зависит от того, как именно он выведет тип отдельных переменных. Вообще, kPHP планировался как несовместимый с PHP язык, там есть ряд конструкций, которые, например, позволяют явно задавать типы переменных, чтобы ускорить выполнение. Но из-за того, что у нас много кода (скомпилированный бинарник весит около 300 мегабайт), компиляция занимает не считанные секунды, как планировалось, а минуты — несмотря на то, что kPHP перекомпилирует только изменившуюся часть кода — приходится разрабатывать фичи на обычном PHP, и это пока что не позволяет нам использовать все преимущества.

Василий Бабич:
Сравнение с Java C# Go сложное — скорость kPHP, как уже отметил Олег, очень зависит от кода, который им компилируют — если он хороший, то скорость работы сильно выше, чем у Java / C# — фактически, это чистый С++. А вот если код не очень хороший, то работает помедленнее. Наверное, если очень постараться, то можно придумать синтетический пример, где код аналогичный, но kPHP работает медленнее — но мы такой целью не задавались :)

Мы уже видели красивые графики ускорения загрузки основных страниц ВКонтакте благодаря переходу на kPHP. А какие ещё выгоды может принести использование kPHP?

ОИ:
Существенное преимущество в использовании памяти.

ВБ:
Да, с kPHP значительно меньше использование процессора и оперативной памяти. Насколько я знаю, мы стали использовать почти в два раза меньше серверов для обработки запросов, при том, что они занимаются не только этим — на них еще какие-то системы иногда работают, вроде memcache. Конечно, kPHP в первую очередь предназначен для highload-проектов, что не удивительно, учитывая те задачи, для решения которых мы ведём его разработку.

Некоторые хабровчане критически отнеслись к двойному приросту скорости ВКонтакте, указывая на то, что ускорение в 10 раз было бы, конечно, намного более впечатляющим результатом. Так что, в 2 раза всего?

ОИ:
Нужно понимать, что факт ускорения сайта в 2 раза не значит, что kPHP быстрее PHP в два раза, это не так. Дело в том, что помимо выполнения кода очень существенная часть времени тратится на обращения к базам, движкам и так далее. Думаю, само выполнение кода ускорилось более чем в 10 раз.
И ещё по поводу скорости: в kPHP встроен веб-сервер, то есть, в комбинации с ним не нужен Apache.

ВБ:
Да, большую часть времени генерации страницы сейчас занимает не исполнение PHP-кода, а ожидание ответа на запросы за данными (к другим серверам). Конечно, мы стараемся это время ожидания как-то использовать, но реально получается, что ожидания всё равно очень много, его kPHP не ускоряет. Как и сказал Олег, фактический рост скорости значительно выше.
Олег, ты упомянул базы и в этой связи вопрос про них: используете собственные наработки или что-то стандартно-допиленное?
 
Олег, ты упомянул базы и в этой связи вопрос про них: используете собственные наработки или что-то стандартно-допиленное?

ОИ:
Сейчас мы практически не используем MySQL, разве что только там, где небольшие нагрузки и пока не дошли руки перенести на собственные движки. Там, где данных хранится много они используются уже давно. Их написано гигантское множество, теперь уже сложно представить задачу с которой нельзя справиться без MySQL.
Вообще, целый ряд наших стандартных функций, которые мы предсмотрительно вынесли в отдельную библиотеку, реализованы на C++.
Правда, это решение мы использовали и до kPHP — как известно, в PHP тоже можно добавлять новые функции, написанные на C.

А есть ли в планах ускорение или (вдруг!) раскрытие движков для общественности?

ВБ:
Те, которые написаны нашими ребятами (вместо MySQL) и работают по memcache-протоколу уже достаточно сильно ускорены. Однако, этот протокол не позволяет ускорить всё настолько, насколько мы могли бы. Поэтому мы постепенно уходим от memcache-протокола к своему собственному, который похож на mtproto, описанный в конкурсе для Android — но для серверной стороны (для общения между серверами, отвечающими на запрос и серверами с данными).
Про открытие общественности — да, мы планировали движки на memcache-протоколе открывать, но пока не дошли руки.

Возвращаясь к kPHP, какие у вас планы по его развитию и поддержке? Будете пилить или отдадите на откуп сообществу?

ОИ:
Из ближайшего — ребята планируют добавить ООП, так как если мы захотим встроить mtproto, разработчикам оно понадобится.

Спасибо! И, напоследок, самый главный вопрос: что же такое k?

ВБ:
K — это префикс от слова kitten, которое уже стало традицией в разработках наших ребят :)

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как же сейчас с новым интерфейсом вконтакте?
Мне кажется что там ещё есть над чем работать. Мягко говоря...

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пожалуйста, войдите для комментирования

Вы сможете оставить комментарий после входа



Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу