HHVM in baidu、HHVM VS. PHP7深度對比
大小:0.9 MB 人氣: 2017-10-09 需要積分:1
標(biāo)簽:hhvm(2079)php7(1741)
2016年8月12日-13日,由CSDN重磅打造的互聯(lián)網(wǎng)應(yīng)用架構(gòu)實戰(zhàn)峰會、運(yùn)維技術(shù)與實戰(zhàn)峰會將在成都舉行。這是繼SDCC 2016架構(gòu)技術(shù)峰會(上海站,官網(wǎng)、圖文直播、架構(gòu)峰會PPT、數(shù)據(jù)庫峰會PPT)和SDCC 2016架構(gòu)技術(shù)峰會(深圳站,官網(wǎng)、圖文直播、架構(gòu)峰會PPT、數(shù)據(jù)庫峰會PPT)圓滿收官后的再一次相聚。上海站和深圳站上,共計36位演講嘉賓給超過700名的現(xiàn)場參會者帶來了精彩分享?;鸨潭瘸鲋鬓k方想象,為響應(yīng)廣大網(wǎng)友們的熱情期盼,我們決定在8月12-13日,在成都,繼續(xù)舉辦一場技術(shù)峰會,技術(shù)人相約成都,不說再見。
即將到來的 SDCC 2016成都技術(shù)峰會講師陣容強(qiáng)大,主辦方邀請了來自于百度、阿里、騰訊、京東、華為、小米、樂視、美團(tuán)、聚美優(yōu)品、當(dāng)當(dāng)網(wǎng)、中國電信、云霽科技、亞信、YY互娛、ThoughtWorks等公司的技術(shù)骨干來為與會者分享演講和交流。
本屆大會,我們邀請了 百度資深工程師胡志廣,帶來題為 《支撐百億級流量PHP引擎HHVM在百度的架構(gòu)實戰(zhàn)》的主題分享,內(nèi)容主要涉及:baidu為什么用HHVM、HHVM in baidu、HHVM vs PHP7。
我們借此機(jī)會采訪了胡志廣老師,他分享了從HHVM在百度的應(yīng)用,以及深度對比了HHVM和PHP。
受訪嘉賓介紹
百度資深工程師胡志廣
胡志廣,百度資深工程師,2013年加入百度,2008到2012年在兩家創(chuàng)業(yè)公司做技術(shù)負(fù)責(zé)人,2012-2013年在京東負(fù)責(zé)性能優(yōu)化方向主要有hhvm,nginx;目前百度負(fù)責(zé)HHVM方向和百度私有云機(jī)器管理方向(包括檢測,維修,環(huán)境管理)以及建設(shè)lamp.baidu.com。此外,他還擅長性能優(yōu)化、網(wǎng)絡(luò)、PHP、編譯和分布式系統(tǒng);開源社區(qū)多次貢獻(xiàn)HHVM源碼,并且在2013年9月Facebook在HHVM Blog對HHVM提出了肯定和感謝,多次進(jìn)行技術(shù)和進(jìn)度交流。
專訪正文
CSDN:請簡單介紹下您和目前的工作,以及關(guān)注的領(lǐng)域。
胡志廣:2008年-2012年在2家創(chuàng)業(yè)公司分別擔(dān)任技術(shù)負(fù)責(zé)人,主要負(fù)責(zé)過ERP、搜索引擎、爬蟲、BI、輿情分析、大數(shù)據(jù)分析方向;2012-2013年加入京東負(fù)責(zé)京東性能優(yōu)化包括nginx和HHVM;
2013年加入百度主要負(fù)責(zé)HHVM方向,實現(xiàn)了HHVM在百度生態(tài)并將大部分PHP服務(wù)切入HHVM;目前負(fù)責(zé)百度私有云機(jī)器管理方向(故障檢測、環(huán)境管理、自動化維修)。
CSDN:HHVM目前在百度有著怎樣的應(yīng)用?
胡志廣:HHVM在百度目前大業(yè)務(wù)線的PHP均上線了HHVM,覆蓋幾千臺機(jī)器,日處理PV在近千億,CPU節(jié)約50%左右(非IO型服務(wù)),并且百度已經(jīng)支持了HHVM生態(tài)包括擴(kuò)展框架、一鍵式部署、容災(zāi)容錯、單測和回歸方案;目前支持?jǐn)U展30多個,通用擴(kuò)展如protobuf、shmop、ap(yaf)等。
CSDN:HHVM和PHP7相比的話,有沒有可能會失去優(yōu)勢,因為性能差不了太多,但是需要的勞動比PHP7要多,大概意思就是HHVM有學(xué)習(xí)成本,PHP7幾乎沒有,未來HHVM的前途是怎么樣的?
胡志廣:我覺得PHP7和HHVM 這個上面大家用哪個都可以,哪個方便用哪個,我建議小公司沒必要折騰HHVM成本高,大公司我建議可以調(diào)研一些HHVM,肯定是有收益的;
PHP7從5到7其實飛躍還是很大的,性能提高也很多,但我覺得HHVM在PHP7的出現(xiàn)還是起到了決定性作用的,至少在2012年-2015年間HHVM 在性能上還是絕對領(lǐng)先的,那么我先說下PHP7的優(yōu)化點:
zval的優(yōu)化從PHP5的24bytes優(yōu)化到PHP7的16bytes;
hashtable優(yōu)化從鏈?zhǔn)絻?yōu)化為開放式,hashtable從72 bytes降到56 bytes ,bucket size從72 bytes降到32bytes,減少了cpu miss;
內(nèi)存管理模式也借鑒了jemalloc的模式管理內(nèi)存,并且提升了cpu cache;
添加了強(qiáng)類型支持;
編譯環(huán)節(jié)增加了ast。
PHP7優(yōu)化點均摘自:《PHPNG a New Core for PHP7 @Dmitry Stogov》和《The Secret of PHP7’s Performance @Laruence》。
我們看下HHVM和PHP7對比:
HHVM的數(shù)據(jù)結(jié)構(gòu)TypeValue等價PHP的zval,HHVM的TypeValue也是16bytes,但是HHVM在12年的時候數(shù)據(jù)結(jié)構(gòu)就已經(jīng)做過類似PHP7的優(yōu)化了,有興趣大家可以看一下HHVM的TypeValue數(shù)據(jù)結(jié)構(gòu);
hashtable HHVM 同樣是開放式的,數(shù)據(jù)結(jié)構(gòu)也和PHP 7是類似的;
內(nèi)存管理模式最早HHVM用的是tcmalloc,后面用的是jemalloc;
HHVM的hack語法是強(qiáng)類型;
HHVM在hiphop時代就支持了ast;
HHVM支持jit ,PHP7雖然也有jit支持但是目前不完善;
async語法支持(PHP可用swoole等);
opcache持久化,PHP無;
HHVM多線程模型,PHP7多進(jìn)程模型,HHVM支持http server。
所以我認(rèn)為HHVM 相對來講還是有一定的優(yōu)勢的(最大的優(yōu)勢來講還是JIT),但是PHP7發(fā)展真的很快,百度內(nèi)部其實一直沒有停止2個引擎的調(diào)研,個人建議小公司的話可以用PHP7 提高性能,規(guī)模大一些的公司可以調(diào)研HHVM,HHVM 相對來講還是有一些性能優(yōu)勢的,但是學(xué)習(xí)成本高些,但是可以用百度的免依賴版本嘗試。
CSDN:HHVM和PHP7相比的話,有沒有可能會失去優(yōu)勢,因為性能差不了太多。
胡志廣:HHVM和PHP7性能差異我在上一個問題中有闡述,HHVM相對PHP7來講目前還是性能還是有一定優(yōu)勢的,HHVM也在逐漸在做好兼容性;
但是需要的勞動比PHP7要多,大概意思就是HHVM有學(xué)習(xí)成本,PHP7幾乎沒有。
我不認(rèn)為HHVM比PHP7勞動要多,相對來講搞不定HHVM的一樣搞不定PHP7。
對于使用者HHVM 有幾個問題:
編譯問題;
擴(kuò)展支持問題;
功能支持和穩(wěn)定性問題。
上面的幾個問題在PHP7中同樣會遇到,但是PHP7的編譯依賴比HHVM少,相對編譯速度也快很多,這個是PHP7的一個優(yōu)勢;
百度內(nèi)部解決HHVM問題形成了HHVM 生態(tài):
編譯框架,依賴和HHVM源獨(dú)立編譯一鍵化編譯,使用者無需關(guān)注HHVM;
擴(kuò)展框架,擴(kuò)展框架支持,包括單測框架、回歸框架等;
HHVM獨(dú)立團(tuán)隊維護(hù)穩(wěn)定性和優(yōu)化。
在百度內(nèi)部來講HHVM是沒有學(xué)習(xí)成本的,對于外部人員來講其實只要搞定編譯問題,大部分?jǐn)U展已經(jīng)支持,這些成本其實和PHP7是相似的,所以我認(rèn)為HHVM學(xué)習(xí)成本也不是很大。
CSDN:未來HHVM的前途是怎么樣的?
胡志廣:我覺得HHVM和PHP7是一個互相推進(jìn)的項目,而且HHVM有Facebook獨(dú)立團(tuán)隊支持,我個人覺得還是可以看到前景的,PHP7的發(fā)展速度也很速度,所以2個項目我都很看好,有競爭對于PHP用戶來講才是福音,但是我認(rèn)為HHVM的重點應(yīng)該在性能、異步和hack語言上。
CSDN:根據(jù)您多年的使用開發(fā)經(jīng)歷,HHVM目前的瓶頸是什么?
胡志廣: HHVM來看,我之前和Facebook的開發(fā)者溝通過,他們認(rèn)為HHVM的目標(biāo)還是在性能上,但是目前HHVM已經(jīng)實現(xiàn)了很好的性能,突破點已經(jīng)很小了,這里是目前HHVM 的一個瓶頸。
此外,HHVM之前嘗試過用LLVM優(yōu)化jit但是最終沒有性能優(yōu)勢只能作為一種調(diào)研性項目。
我認(rèn)為HHVM后續(xù)的優(yōu)化重點會在hack、異步、協(xié)程、還有特定的項目優(yōu)化,但是再找到一個能夠飛躍性的優(yōu)化目前來看難度還是很大的,除非能夠有一個特殊的模型或者其他突破能夠讓HHVM 100%兼容PHP時,并且性能卓越,我認(rèn)為如果HHVM可以在協(xié)程發(fā)力將現(xiàn)有模型改為協(xié)程,也許會成為下一個GO,我覺得那時候也許HHVM會再度火熱。
CSDN:這個東西在大廠用穩(wěn)定性一般如何保證,或守護(hù)進(jìn)程?
胡志廣:所有的程序都不能說100%的穩(wěn)定,萬物皆有BUG,但是你容錯和保證線上穩(wěn)定性是一個大問題,百度在使用HHVM 的穩(wěn)定來講做了如下幾件事情:
旁路遷移,初期小流量上線時HHVM 做渲染,PHP引擎執(zhí)行其他部分,通過shmop通信(共享內(nèi)存),HHVM出現(xiàn)錯誤后,仍然回到PHP處理;
webserver通過捕捉錯誤碼跳轉(zhuǎn)容錯,如果HHVM掛了后,然后將流量切到PHP上執(zhí)行,但是如果一旦全部掛則會出現(xiàn)雪崩,目前來講都是雙HHVM熱備;
HHVM掛掉后(crash、內(nèi)存oom等)都會通過?;畛绦蚶?;
對于穩(wěn)定性問題(如Crash、內(nèi)存泄露、Diff、死鎖、CPU異常等)會及時跟進(jìn),第一時間處理解決問題。
穩(wěn)定性對于百度這種大廠來講是很重要的,所以在上線前都需要做各種的回歸測試、線上監(jiān)控和容錯方案來讓HHVM運(yùn)行更穩(wěn)定。
CSDN:你目前還會關(guān)注哪些新技術(shù)?給學(xué)習(xí)PHP或者HHVM的開發(fā)者一些建議吧。
胡志廣:我關(guān)注的領(lǐng)域比較多,比如虛擬機(jī)和編譯領(lǐng)域我會關(guān)注如Pypy、Hippy、JVM這些;云方面會關(guān)注Docker、Kubernetes這些;其他方面如:Nginx、spdy、緩存服務(wù)、NoSQL等;
我建議PHP的開發(fā)者可以關(guān)注一些底層的實現(xiàn)這樣更可以了解如何寫好PHP,對于擴(kuò)展實現(xiàn)和PHP虛擬機(jī)的結(jié)構(gòu)了解后,能夠更好寫好PHP程序;我覺得PHP開發(fā)者不要局限于PHP語言,應(yīng)該往更大的范圍去看,如前端Web Server、Cache、到后端的Cache和DB層、分布式系統(tǒng)方面等。
CSDN:在本次SDCC 2016(成都站)大會上分享的話題是?
胡志廣:我這次分享內(nèi)容主要涉及:baidu為什么用HHVM、HHVM in baidu、HHVM vs PHP7。
baidu為什么用HHVM:講述前期百度的調(diào)研選型;
HHVM in baidu:HHVM使用問題、遷移方案、上線效果、HHVM百度生態(tài)、HHVM的百度優(yōu)化及線上問題分析;
HHVM vs PHP7中會講:PHP7的優(yōu)化,HHVM和PHP7的差異點和優(yōu)缺點,HHVM原理和對于目前HHVM和PHP7選型困惑建議。
?
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
