返回 登录
0

专访百度胡志广:百度日处理百亿PV的HHVM分析

2016年8月12日-13日,由CSDN重磅打造的互联网应用架构实战峰会、运维技术与实战峰会将在成都举行。

这是继SDCC 2016架构技术峰会(上海站,官网图文直播架构峰会PPT数据库峰会PPT)和SDCC 2016架构技术峰会(深圳站,官网图文直播架构峰会PPT数据库峰会PPT)圆满收官后的再一次相聚。上海站深圳站上,共计36位演讲嘉宾给超过700名的现场参会者带来了精彩分享。火爆程度超出主办方想象,为响应广大网友们的热情期盼,我们决定在8月12-13日,在成都,继续举办一场技术峰会,技术人相约成都,不说再见。

即将到来的SDCC 2016成都技术峰会讲师阵容强大,主办方邀请了来自于百度、阿里、腾讯、京东、华为、小米、乐视、美团、聚美优品、当当网、中国电信、云霁科技、亚信、YY互娱、ThoughtWorks等公司的技术骨干来为与会者分享演讲和交流。

本届大会,我们邀请了百度资深工程师胡志广,带来题为《支撑百亿级流量PHP引擎HHVM在百度的架构实战》的主题分享,内容主要涉及:baidu为什么用HHVM、HHVM in baidu、HHVM vs PHP7。

我们借此机会采访了胡志广老师,他分享了从HHVM在百度的应用,以及深度对比了HHVM和PHP。

受访嘉宾介绍:

图片描述

百度资深工程师胡志广

胡志广,百度资深工程师,2013年加入百度,2008到2012年在两家创业公司做技术负责人,2012-2013年在京东负责性能优化方向主要有hhvm,nginx;目前百度负责HHVM方向和百度私有云机器管理方向(包括检测,维修,环境管理)以及建设lamp.baidu.com。此外,他还擅长性能优化、网络、PHP、编译和分布式系统;开源社区多次贡献HHVM源码,并且在2013年9月Facebook在HHVM Blog对HHVM提出了肯定和感谢,多次进行技术和进度交流。

【以下为专访正文】

CSDN:请简单介绍下您和目前的工作,以及关注的领域。

胡志广: 2008年-2012年在2家创业公司分别担任技术负责人,主要负责过ERP、搜索引擎、爬虫、BI、舆情分析、大数据分析方向;2012-2013年加入京东负责京东性能优化包括nginx和HHVM;
2013年加入百度主要负责HHVM方向,实现了HHVM在百度生态并将大部分PHP服务切入HHVM;目前负责百度私有云机器管理方向(故障检测、环境管理、自动化维修)。

CSDN:HHVM目前在百度有着怎样的应用?

胡志广: HHVM在百度目前大业务线的PHP均上线了HHVM,覆盖几千台机器,日处理PV在近千亿,CPU节约50%左右(非IO型服务),并且百度已经支持了HHVM生态包括扩展框架、一键式部署、容灾容错、单测和回归方案;目前支持扩展30多个,通用扩展如protobuf、shmop、ap(yaf)等

CSDN:HHVM和PHP7相比的话,有没有可能会失去优势,因为性能差不了太多,但是需要的劳动比PHP7要多,大概意思就是HHVM有学习成本,PHP7几乎没有,未来HHVM的前途是怎么样的?

胡志广: 我觉得PHP7和HHVM 这个上面大家用哪个都可以,哪个方便用哪个,我建议小公司没必要折腾HHVM成本高,大公司我建议可以调研一些HHVM,肯定是有收益的;
PHP7从5到7其实飞跃还是很大的,性能提高也很多,但我觉得HHVM在PHP7的出现还是起到了决定性作用的,至少在2012年-2015年间HHVM 在性能上还是绝对领先的,那么我先说下PHP7的优化点:

  1. zval的优化从PHP5的24bytes优化到PHP7的16bytes;
  2. hashtable优化从链式优化为开放式,hashtable从72 bytes降到56 bytes ,bucket size从72 bytes降到32bytes,减少了cpu miss;
  3. 内存管理模式也借鉴了jemalloc的模式管理内存,并且提升了cpu cache;
  4. 添加了强类型支持;
  5. 编译环节增加了ast。

    PHP7优化点均摘自:《PHPNG a New Core for PHP7 @Dmitry Stogov》和《The Secret of PHP7’s Performance @Laruence》。
    

我们看下HHVM和PHP7对比:

  1. HHVM的数据结构TypeValue等价PHP的zval,HHVM的TypeValue也是16bytes,但是HHVM在12年的时候数据结构就已经做过类似PHP7的优化了,有兴趣大家可以看一下HHVM的TypeValue数据结构;
  2. hashtable HHVM 同样是开放式的,数据结构也和PHP 7是类似的;
  3. 内存管理模式最早HHVM用的是tcmalloc,后面用的是jemalloc;
  4. HHVM的hack语法是强类型;
  5. HHVM在hiphop时代就支持了ast;
  6. HHVM支持jit ,PHP7虽然也有jit支持但是目前不完善;
  7. async语法支持(PHP可用swoole等);
  8. opcache持久化,PHP无;
  9. HHVM多线程模型,PHP7多进程模型,HHVM支持http server。

所以我认为HHVM 相对来讲还是有一定的优势的(最大的优势来讲还是JIT),但是PHP7发展真的很快,百度内部其实一直没有停止2个引擎的调研,个人建议小公司的话可以用PHP7 提高性能,规模大一些的公司可以调研HHVM,HHVM 相对来讲还是有一些性能优势的,但是学习成本高些,但是可以用百度的免依赖版本尝试;

CSDN:HHVM和PHP7相比的话,有没有可能会失去优势,因为性能差不了太多。

胡志广: HHVM和PHP7性能差异我在上一个问题中有阐述,HHVM相对PHP7来讲目前还是性能还是有一定优势的,HHVM也在逐渐在做好兼容性。

但是需要的劳动比PHP7要多,大概意思就是HHVM有学习成本,PHP7几乎没有。

我不认为HHVM比PHP7劳动要多,相对来讲搞不定HHVM的一样搞不定PHP7。

对于使用者HHVM 有几个问题:

  1. 编译问题;
  2. 扩展支持问题;
  3. 功能支持和稳定性问题。

上面的几个问题在PHP7中同样会遇到,但是PHP7的编译依赖比HHVM少,相对编译速度也快很多,这个是PHP7的一个优势;

百度内部解决HHVM问题形成了HHVM 生态:

  1. 编译框架,依赖和HHVM源独立编译一键化编译,使用者无需关注HHVM;
  2. 扩展框架,扩展框架支持,包括单测框架、回归框架等;
  3. HHVM独立团队维护稳定性和优化。

在百度内部来讲HHVM是没有学习成本的,对于外部人员来讲其实只要搞定编译问题,大部分扩展已经支持,这些成本其实和PHP7是相似的,所以我认为HHVM学习成本也不是很大。

CSDN:未来HHVM的前途是怎么样的?

胡志广: 我觉得HHVM和PHP7是一个互相推进的项目,而且HHVM有Facebook独立团队支持,我个人觉得还是可以看到前景的,PHP7的发展速度也很速度,所以2个项目我都很看好,有竞争对于PHP用户来讲才是福音,但是我认为HHVM的重点应该在性能、异步和hack语言上。

CSDN:根据您多年的使用开发经历,HHVM目前的瓶颈是什么?

胡志广: HHVM来看,我之前和Facebook的开发者沟通过,他们认为HHVM的目标还是在性能上,但是目前HHVM已经实现了很好的性能,突破点已经很小了,这里是目前HHVM 的一个瓶颈。

此外,HHVM之前尝试过用LLVM优化jit但是最终没有性能优势只能作为一种调研性项目。

我认为HHVM后续的优化重点会在hack、异步、协程、还有特定的项目优化,但是再找到一个能够飞跃性的优化目前来看难度还是很大的,除非能够有一个特殊的模型或者其他突破能够让HHVM 100%兼容PHP时,并且性能卓越,我认为如果HHVM可以在协程发力将现有模型改为协程,也许会成为下一个GO,我觉得那时候也许HHVM会再度火热。

CSDN:这个东西在大厂用稳定性一般如何保证,或守护进程?

胡志广: 所有的程序都不能说100%的稳定,万物皆有BUG,但是你容错和保证线上稳定性是一个大问题,百度在使用HHVM 的稳定来讲做了如下几件事情:

  1. 旁路迁移,初期小流量上线时HHVM 做渲染,PHP引擎执行其他部分,通过shmop通信(共享内存),HHVM出现错误后,仍然回到PHP处理;
  2. webserver通过捕捉错误码跳转容错,如果HHVM挂了后,然后将流量切到PHP上执行,但是如果一旦全部挂则会出现雪崩,目前来讲都是双HHVM热备;
  3. HHVM挂掉后(crash、内存oom等)都会通过保活程序拉起;
  4. 对于稳定性问题(如Crash、内存泄露、Diff、死锁、CPU异常等)会及时跟进,第一时间处理解决问题。

稳定性对于百度这种大厂来讲是很重要的,所以在上线前都需要做各种的回归测试、线上监控和容错方案来让HHVM运行更稳定。

CSDN:你目前还会关注哪些新技术?给学习PHP或者HHVM的开发者一些建议吧。

胡志广: 我关注的领域比较多,比如虚拟机和编译领域我会关注如Pypy、Hippy、JVM这些;云方面会关注Docker、Kubernetes这些;其他方面如:Nginx、spdy、缓存服务、NoSQL等;

我建议PHP的开发者可以关注一些底层的实现这样更可以了解如何写好PHP,对于扩展实现和PHP虚拟机的结构了解后,能够更好写好PHP程序;我觉得PHP开发者不要局限于PHP语言,应该往更大的范围去看,如前端Web Server、Cache、到后端的Cache和DB层、分布式系统方面等。

CSDN:在本次SDCC 2016(成都站)大会上分享的话题是?

胡志广: 我这次分享内容主要涉及:baidu为什么用HHVM、HHVM in baidu、HHVM vs PHP7。

  1. baidu为什么用HHVM:讲述前期百度的调研选型;
  2. HHVM in baidu:HHVM使用问题、迁移方案、上线效果、HHVM百度生态、HHVM的百度优化及线上问题分析;
  3. HHVM vs PHP7中会讲:PHP7的优化,HHVM和PHP7的差异点和优缺点,HHVM原理和对于目前HHVM和PHP7选型困惑建议。

8月5日24点前,SDCC 2016架构&运维峰会·成都站,仍处于八折优惠票价阶段,单场峰会(含餐)门票只需799元,5人以上团购或者购买两场峰会通票更有特惠,限量供应,预购从速。票务详情链接)。

更多详细内容参见官网网址:SDCC数据库&架构峰会成都站大会报名

评论