HipHop

Facebook神秘之PHP项目HipHop for
PHP终于揭秘面纱。这个类别由于一个PHP到C++的变换程序,一个重实现之PHP运行库,和众常用PHP扩展的重写版本构成,目的是旨在加快和优化PHP。

为此Facebook官方博客(无法直接看)上种负责人赵海平(北大1987暨遗传和分子生物专业,普林斯顿电脑是博士)的语说,HipHop项目针对Facebook影响巨大。它时一度支撑了Facebook
90%之Web流量。由于HipHop,Facebook
Web服务器上之CPU使用平均压缩了50%,从而大大减少了服务器的需要。为了为这同样改善为造福社区,他们操纵拿的起源,希望能够更帮扶提高再多大型复杂PHP网站的可伸缩性。

图片 1

PHP和Facebook的问题

眼看,Facebook的前端主要是故PHP写的。赵海平说,过去六年Facebook从PHP语言的拓上收入良多。PHP非常简单,易学易用,好读好调试,因此新工程师成长迅速,有利地力促了Facebook的重快的换代。

PHP是均等栽脚本语言,其利是编程效率高,能够支持产品之速迭代。但是同民俗的编译语言相比,脚本语言的CPU和内存以频率不好。随着Ajax技术之泛运用,加上SNS对动态要求于高,这些毛病还亮突出。对于每月超过4000亿不行PV的Facebook来说,如何兑现扩大,尤其具有挑战性。

广泛的方法是直接用C++重写PHP应用中比较复杂的有些,作为PHP扩展。实际上,PHP就转吗平种植胶水语言,连接前端HTML和C++应用逻辑。从技术角度讲这也不曾问题,但是多了技术要求,能够当普应用上行事之工程师数量就是大大减少了。学习C++只是编写PHP扩展的首先步,接下去还要懂得Zend
API。由于Facebook的工程团队较小,每个工程师要支持100万以上的用户。有些代码不是组织里每个人都能看明白,这对于Facebook是无法接受之。

Facebook网站本身的可伸缩性更拥有挑战性,因为几每次页面浏览都是发出个性化体验的报到用户发起。浏览主页
时,系统要查询有朋友、朋友最好重大之状态更新、
根据隐私设置筛选结果,然后还要亮评论、照片等等动态,这总体还亟待在平秒内竣工
成。

起2007年以来,Facebook都描写过几栽不同方式解决这些题材。其中包括用任何
一种语言重写Facebook,但是出于开发之复杂性和速度相当原因,未能实现。他们还更写了PHP的主干部分Zend引擎,并付诸给了PHP项目,但说到底或尚未博得所待的性能。最后,他们选择了HipHop,终于得偿所愿意。

发了HipHop,工程师可以编制代码,用PHP编写组合最后页面的逻辑,并能延续快速迭代,同时后端服务以C++,
Erlang, Java, Py thon编写,提供新闻提要、搜索、聊天及另外中心力量。

HipHop开发故事

赵海平透露,项目初期是来自几年前Facebook公司同破Hackathon活动(员工以一个夜间自由发挥,实验新的想法),他手工将PHP转换为C++代码,虽然语法上特别接近,但是不论CPU还是内存以,转换后的C++代码都大大优于PHP。于是他惦记,如果构建一个系统,编程实现转移,会怎么样呢?

在此之前,已经起了不少改良PHP性能的方法。Zend引擎在运转时换PHP源代码为运行于Zend虚拟机上之opcode。开源项目APC和eAccelerator将出口缓存,为大部分PHP网站所祭。此外,还有Zend
Server这样的商贸产品,通过opcode优化和缓存,提高PHP速度。赵海平选择了其它一样漫长道路,将PHP直接转为C++,然后再变成本地机器码。当然,有诸多开源项目也是一模一样的笔触,Roadsend和phc编译为C,Quercus编译为Java,而Phalanger编译为.NET。

Hackathon之后8个月,赵海平用出了原型,足以说明这长达总长可走通,编译后的代码的确还快。不久,Iain
Proctor和Minghui
Yang加入进来。接下来还要出了10独月,在生服务器上测试了6只月。然后正式达成线部署,6个月下,Facebook
90%上述的Web流量都动了HipHop。

按部就班赵海平的说法,凭借HipHop,Facebook
Web服务器上的CPU使用平均压缩了50%,从而大大减少了服务器的需。项目针对Facebook影响巨大。为了为这无异于改善为造福社区,他们操纵拿之始源,希望能进一步帮助提高再多大型复杂PHP网站的可伸缩性。

图片 2

HipHop的原理

HipHop将PHP代码转换为高度优化的C++代码,然后又就此g++编译器编译。它可保语义等模拟地履源代码,但为了增进性,牺牲了一些十分少用到之特征,比如eval()。

HipHop开发中之重要困难在,在PHP和C++这有限种植好无雷同的言语里怎么落实转移。虽然PHP也足以形容一些颇抢眼的动态特性,但是多数PHP代码还是非常简单的。if
(…) {…} else {..} 比foo($x) { include $x; }
肯定还广。这吗性提高供了机遇。HipHop生成的代码尽可能地采取函数和变量的静态绑定。同时,还采用项目推演来选出变量最可能对应之之一项目,从而节省内存。

转移过程分三步:

  1. 静态分析。收集声明提到以及仰关系相当消息。

  2. 花色推演。选择最宜的门类,是C++的标量?还是String, Array, classes,
    Object或者Variant。

  3. 代码生成。大部分直接用PHP语词和表达式对诺为C++的口舌和表达式。

当开发进程遭到,还有一个副产品:HPHPi,是一个实验性的解释器。通过它们,不编译PHP源代码也堪运行。它就用于HipHop自身之调试中。

HipHop在保障了PHP优点的还要,也兼任得矣C++的性能优势。项目总计发生30万履代码,5000几近个单元测试。所有这些还以以PHP开源许可证形式披露暨GitHub。

重多信息,可以申请加入HipHop的邮件列表:

http://groups.google.com/group/hiphop-php-dev

相关文章