Facebook已将HHVM/JIT用于其开发和产品中
Facebook宣布,他们已经在产品中使用了 HHVM这款支持JIT编译的HipHop虚拟机,这种方案统一了开发和部署两种环境,同时为开发者带来了显著的性能收益。
因为页面加载的性能问题,Facebook决定实现一套从PHP向C++转换的工具链, 该工具链即 HipHop PHP,已于2010年开源,其中的编译器称为HPHPc。该工具将PHP转化为一种抽象语法树(Abstract Syntax Tree,AST),之后AST被转化为C++代码,最后静态编译为x64二进制代码。虽然这种方案能够加速Web页面,但是也给开发带来了一个问题,由于Facebook 的所有开发者都有网站代码的一份完整拷贝,在开发时他们必须等待整个代码库编译完成。Facebook的工程总监David Mortensen在 QCon SF 2012上讨论HPHPc时提到,因为网站以很高的速率持续增长,编译阶段延长到了十分钟左右,大量开发人员都要等待。
为了解决该问题,Facebook做出以下决定:在产品代码中仍然使用编译器,同时为开发代码创建一个解释器(HPHPi),希望此举能消除编译停滞时间。这又使产品环境与开发环境出现了差异,其中存在一个问题,出于性能考虑两种环境使用了不同的AST,而且据Facebook的工程师 Drew Paroski介绍, HPHPi甚至比引入HipHop之前的原始Zend引擎还要慢。
面对这个新问题,Facebook 的一个工程师小团队设计了一款名为HHVM(HipHop VM)的虚拟机,而且 自2011年起就将其应用于开发中了。在对JIT进行了几个月的调校之后,HHVM被引入了产品中,用于执行已部署的代码。Paroski宣布, HHVM的性能已经赶上了HPHPc,甚至在页面加载时间上的表现还要好一点。这意味着,在Facebook开发和部署可以使用统一的环境了;而且随着JIT引擎的进一步调校,性能还有改进空间。Paroski指出:
利用HHVM,从运行时和基本库,到生成的裸机机器代码,我们能够为PHP开发栈选择范围更广的优化策略了。在未来几年,我们计划利用这种灵活性让Facebook的Web层更为高效。
能够持续改进HipHop的开发体验,我们也非常兴奋。改进主要体现在两个方面,一个是安装和开发流程更容易且更灵活了,另一个是支持的流行PHP 应用和框架越来越多了。
目前HipHop是一种混合环境,其中部分代码解释执行,但大部分代码以JIT方式编译执行。据Paroski介绍:
HHVM这样运行PHP程序,先将PHP源代码转换为HipHop字节码( HHBC),然后使用字节码解释器和x64 JIT编译器来执行字节码。这里的解释器和编译器可以无缝地进行互操作。HHVM会尽可能使用JIT,万不得已时才将解释器作为执行引擎。
Facebook现在已将 HHVM开源,同时弃用了HPHPi并移除了对它的构建支持。到2013年中期,他们将不再支持 HPHPc。HHVM提供了 支持Ubuntu 12.04的预构建包以及 支持CentOS 6.3的构建说明,而对FreeBSD 9和Mac OS的支持将于明年HPHPc退役之后再提供。
查看英文原文: Facebook Now Uses HHVM/JIT both in Development and Production
相关厂商内容
《JavaScript语言精粹》作者Douglas Crockford确认参会
GitHub研发团队成员Corey Donoho QCon分享Github架构设计与团队合作
Google商用Apps创始人Derek Parham确认参加QCon北京2013
相关赞助商
QCon北京2013,Node专场:NodeJS如何在大企业应用落地发挥成效, 详情请点击!