欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

用 HHvm 运行 Wordpress 是用 Apache 好还是 Nginx 好一点?

程序员文章站 2022-05-06 19:29:33
...
最近想研究一下 HHvm,但是在网上没找到详细的技术文档,所以想自己做一个 Wordpress 实例研究一下,选择 Web 服务器时让我犹豫了一下:
系统: Ubuntu OR RedHat
因为我自己对 Nginx 没有太多研究(我只钟爱Apache)。不知道它支不支持虚拟路径。
所以在这里问一下懂 HHvm 的人,是选 Apache 或是 Nginx 好一点?
也可以提供相关技术文档。
注:我是一个菜鸟……

回复内容:

HHVM通常搭配Nginx比较多,Apache当然也可以,通信方式走fastcgi。

HHVM的介绍如下:
HHVM是一个开源的PHP虚拟机,使用JIT的编译方式以及其他技术,让PHP代码的执行性能大幅提升。据传,可以将当前版本的原生PHP代码提升5-10倍的执行性能。

HHVM起源于Facebook公司,Facebook早起的很多代码是使用PHP来开发的,但是,随着业务的快速发展,PHP执 行效率成为越来越明显的问题。为了优化执行效率,Facebook在2008年就开始使用HipHop,这是一种PHP执行引擎,最初是为了将 Fackbook的大量PHP代码转成 C++,以提高性能和节约资源。使用HipHop的PHP代码在性能上有数倍的提升。后来,Facebook将HipHop平台开源,逐渐发展为现在的 HHVM。


HHVM提升PHP执行性能的方式

HHVM提升PHP性能的途径,采用的方式就是替代Zend引擎来生成和执行PHP的中间字节码(HHVM生成自己格式的中间字节 码),执行时通过JIT(Just In Time,即时编译是种软件优化技术,指在运行时才会去编译字节码为机器码)转为机器码执行。Zend引擎默认做法,是先编译为opcode,然后再逐条 执行,通常每条指令对应的是C语言级别的函数。如果我们产生大量重复的opcode(纯PHP写的代码和函数),对应的则是Zend多次逐条执行这些C代 码。而JIT所做的则是更进一步,将大量重复执行的字节码在运行的时候编译为机器码,达到提高执行效率的目的。通常,触发JIT的条件是代码或者函数被多 次重复调用。

用 HHvm 运行 Wordpress 是用 Apache 好还是 Nginx 好一点?

普通的PHP代码,因为无法固定变量的类型,需要额外添加判断类型的逻辑代码,这样PHP代码是不利于CPU执行和优化 的。因此,HHVM通常需要用到Hack写法(为了兼容某种特性而额外添加的技巧性质的代码)的PHP代码来“配合”,就是为了让变量类型固定,方便虚拟 机编译执行。PHP追求以一种形式来容纳一切类型,而Hack则可以将被容纳的一切标记上确定的类型。

PHP代码的Hack写法的例子:

用 HHvm 运行 Wordpress 是用 Apache 好还是 Nginx 好一点?

上面的例子中,PHP代码主要被添加上了变量类型。Hack写法的总体方向,就是将之前“动态”的写法变为“静态”的写法,来配合HHVM。

HHVM因为它的高性能而吸引了不少人的关注,一些一线互联网公司也开始跟进使用。从纯语言执行性能测试结果来看,HHVM领先了开发中的PHP7版本不少。

用 HHvm 运行 Wordpress 是用 Apache 好还是 Nginx 好一点?

不过,从具体业务场景来看,HHVM和PHP7的差距并没有那么大,以WordPress开源博客首页为测试场景的结果中,他们目前的差距并不明显。

用 HHvm 运行 Wordpress 是用 Apache 好还是 Nginx 好一点?

但是,PHP7目前还在开发中,就已经可用的技术方案来看,目前的HHVM略胜一筹。不过,HHVM的部署和应用都存在一些的问题:

  1. 服务部署比较复杂,有一定维护成本。
  2. 对PHP原生代码并非完整支持,PHP拓展也需要做适当的兼容。
  3. HHVM是个新虚拟机,长时间运行有内存泄露。(据说,一线互联网公司在应用这个技术时,是通过自己打Patch的方式解决内存泄露)
PS:PHP7是PHP官方社区的下一个大版本,旨在提升PHP代码的执行性能。

我之前整理的两个社区的科普文:
PHP7和HHVM的性能之争介绍 想知道答案的方法,就是自己去实践。以下内容仅供参考:

apache / nginx 两者侧重点不同,前者适合搭配各种apache旗下软件使用,后者是单纯的前端代理软件。如果你单纯的跑给站的话,hhvm自己就可以,但是如果要权衡前端缓存,反响代理,细致的客户端缓存设置,还是用nginx吧。

而且如果你没有特殊的需求(svn?hadoop?)的话,nginx完全可以满足你的各种需求,而且配置简单。

至于热加载,你需要的是tengine,支持dso(动态加载模块)。

关于安装和配置,可以参考:
  • 配置Ubuntu WebServer基础环境
  • 简单配置服务端代理Apache
  • 简单配置服务端代理Tengine
如果涉及上传,参考php的设置,在/etc/hhvm/php.ini 设置upload_limit/post_limit...

如果你用hhvm跑前端代理和runtime两个角色的话,那么请参考官方文档。

最后,如果只是通过网站响应速度来评定好坏的话,可以参考:
天下武功,唯快不破 标题中的『好』在哪里?不太明白。

先简单来说下 PHP 运行方式,大概有三种:
1. 命令行(解释器),这个跟 Web Server 无关
2. mod_php,这个就是说 Apache 的模块
3. fpm,官方提供的 FastCGI 协议管理程序,走 FastCGI 协议,Apache 和 Nginx 都可以做 FastCGI 协议代理转发,不过这种方式一般人都会选择 Nginx

对于上面的 2、3 中,个人建议采用 Apache(mod_php)方式来运行,主要是简单,稳定,省事,等你折腾到 PHP 自身(优化、配置)的时候再考虑 Nginx 方式。

楼主提到 HHVM 是另外一个东西,这里有个文章:HHVM 是如何提升 PHP 性能的? 请看鸟哥的测试:laruence.com/2014/12/18 博客的话,简单就好。如@smallfish所言。
nginx的话主要是高并发,性能高。 Apache对于多用户访问采用的是每一个用户一个fork,对内存,线程切换开销可想而知。
Apache对于第三方插件可以“热”插拔,重启apache即可。Nginx则需要重新编译。
Hackshell和php与@smallfish说的一样,fadtcgi,可以说是php的“虚拟机”,相当于是php自身是个服务器,apache和nginx是用来做代理用,处理http请求的一些细节。 这件事情取决于你博客的访问量. 大部分人的博客访问量, 对apache+phpmod或者nginx+php-fpm, 压力不会太大, 这点区别, 跟在wordpress启用页面cache插件比, 还是比较小的.

你提供的场景信息太少, 没法做详细的分析 nginx + hhvm 运行时候, 跟nginx + php-fpm 运行时候。hhvm 此时等同于 php-fpm 的。都是监听端口或者unix 本地 sock解释PHP的。就是HHVM解析速度快,目前感受是废一点内存,CPU省一半儿, 兼容性良好, 就是稳定性大概我用HHVM3.3.0 2个月进程意外崩一次, 目前的HHVM 3.5应高好一点。

最快最省服务器的,是 nginx + HHVM(hhvm监听本地sock, 比如 /dev/shm/hhvm.sock)这样是最快最好的 ,也很稳定。 听说最好的办法不是nginx+apache+php(wordpress)吗?