惠新宸@Laruence,是國內(nèi)最有影響力的PHP技術(shù)專家募胃,PHP開發(fā)組核心成員旗唁,PECL開發(fā)者畦浓,Zend公司外聘顧問痹束。他曾供職于雅虎,百度,現(xiàn)在新浪微博任平臺及數(shù)據(jù)部總架構(gòu)師兼首席PHP顧問〉?祝惠新宸 是PHP NG核心開發(fā)者砰嘁,PHP5.4,5.5的主要開發(fā)者阔挠。作為PECL開發(fā)者貢獻了Yaf,Yar以及Yac、Taint等多個優(yōu)秀開源作品嘉汰,同時也是APC,Opcache状勤,Msgpack等項目的維護者鞋怀。
從一個在網(wǎng)上搜PHP教程的初學者,到PHP開發(fā)組核心成員持搜,惠新宸覺得整個過程就像“打怪升級”密似。和Java一樣也被稱為藍領(lǐng)語言的PHP,在他看來恰恰是能夠培養(yǎng)更多編程者的搖籃葫盼,而人人都能編程的時代残腌,勢必會產(chǎn)生更多能夠推動技術(shù)進步的牛人。他在博客風雪之隅上分享關(guān)于PHP語言和Zend引擎相關(guān)的研究、技術(shù)抛猫、新聞蟆盹。左手代碼,右手詩闺金。
問:你是如何開始對編程感興趣的日缨?
我第一次進行“編程”好像還是在小霸王學習機上。后來大學學的是計算機掖看,研究生的時候負責學校校園化建設(shè)匣距,主動或者被動地做了很多Web開發(fā)工作,包括當時學校很多二級部門的網(wǎng)站哎壳,校園BBS的維護等毅待。 想想好像也沒有那么一件事,或者一個契機說我就喜歡上編程了归榕。就感覺很自然地就做了這個行業(yè)尸红,也沒有覺得不喜歡,就這么做下來了刹泄。
問:你是如何喜歡上PHP的外里?你又是如何成為PHP開發(fā)組核心成員的?
當時在研究生的時候要做一個網(wǎng)站特石,完全不會的情況下就去網(wǎng)上搜盅蝗,剛好搜到一個PHP的教程,教怎么做一個簡單的網(wǎng)站姆蘸,于是試著照著做了一下墩莫,發(fā)現(xiàn)無論從安裝、部署(當時還沒有那種集中化部署工具逞敷,不過也有很多教程教怎么部署LAMP)狂秦、編寫代碼,測試都很方便推捐,語法還和C語言很像裂问,甚至很多API的名字也和libc API的一樣。于是就這樣開始了和PHP的不解之緣牛柒。
應該是在2011年吧堪簿,那個時候為百度開發(fā)了Ap(Yaf的前身項目),當時在百度內(nèi)部用的還不錯焰络,于是我想著要貢獻到PECL上去戴甩,修改了一些以后,改名為Yaf(Yet another framework闪彼,這個名字也是有點自嘲的意思甜孤,因為PHP的框架非常多)协饲,就發(fā)郵件到PHP的郵件組,因為英語比較爛缴川,所以過程還是比較曲折茉稠,好在當時Pierre Joye幫助我了很多,讓Yaf進入了PECL把夸。
另外在提交Yaf之前我其實一直都在研究PHP的源代碼而线,所以也提交了不少Bug和Fix,比如我記得有一天中午恋日,Rasmus(PHP之父)在IRC上說發(fā)現(xiàn)一個Bug膀篮,我差不多5分鐘后就給出了Fix。
等慢慢的和一些人熟悉岂膳,得到了大家的信任以后誓竿,我就發(fā)起申請,之后就獲得了PHP核心代碼的提交權(quán)限谈截,參與到PHP的直接開發(fā)和Bug修復中筷屡,成為了開發(fā)組的一員。
至于說核心么簸喂,那是慢慢積累來的毙死,其實也是一個互信的過程。如果你的工作大家認可喻鳄,那么就會尊重你的意見扼倘。我慢慢地和Dmitry Stogov變 的熟了起來,得到了Zend核心部分的提交權(quán)限诽表,提交了很多核心Bug的修復和新特性唉锌,再后來成為了Zend外聘顧問隅肥,慢慢成為了Core Developer竿奏。
聽起來好像有點打怪升級的感覺吧。
問:你是在什么樣的契機下開發(fā)了Yaf腥放?當時百度是如何支持Yaf開發(fā)的泛啸?
在Yaf之前,關(guān)于使用不使用框架其實一直有一個經(jīng)典的爭論就是:“使用框架會降低性能秃症,而不使用框架會降低開發(fā)效率候址。”
當時百度內(nèi)部的框架很多种柑,包括開源的Yii岗仑,ZF之類的,也包括有的團隊自己寫的聚请。這樣有一個問題就是類庫荠雕,一些周邊設(shè)施沒有辦法互通稳其。
還有一個原因就是,很多框架作者把框架發(fā)布出去以后炸卑,會發(fā)現(xiàn)不同的人會對框架做各種修改既鞠,導致時間久了,一個框架發(fā)出去盖文,就變成了各種變種嘱蛋,后續(xù)統(tǒng)一升級也變得不可能。
所以五续,我決定要用PHP擴展實現(xiàn)一個框架來解決這些問題洒敏,當然在寫這個擴展之前其實也不是很有信心,不知道采用擴展能帶來多大的性能提升疙驾。好在最后的結(jié)果是很好的桐玻。
問:為什么選擇用C語言來寫Yaf?
PHP是C語言寫的荆萤,所以他的擴展也是采用C語言來寫的镊靴,于是就選擇了C語言來寫Yaf。
問:為什么會離開百度链韭,來到新浪微博偏竟?
這個其實原因很多,比如當時在百度是T7了敞峭,業(yè)務上的事情參與得少了踊谋,感覺自己好像沒有那么多事情要做,有點虛度的感覺旋讹。
另外殖蚕,我當時在百度的商業(yè)搜索部,并不直接接觸訪問量大的系統(tǒng)沉迹,所以也希望找個大的平臺再鍛煉下睦疫,而微博剛好就是這樣一個平臺。
來了微博以后鞭呕,確實接觸到了很多之前沒有遇到過的挑戰(zhàn)蛤育,也感覺自己的知識有了更大的舞臺可以發(fā)揮。
問:你現(xiàn)在在新浪微博具體負責的工作是什么葫松?
我現(xiàn)在在微博技術(shù)部瓦糕,帶著一個基礎(chǔ)服務小組,我們主要的工作也分階段腋么,前兩年的主要工作就是做微博LAMP的性能優(yōu)化咕娄,包括各種基礎(chǔ)框架,工具研發(fā)珊擂,環(huán)境優(yōu)化圣勒,規(guī)范制定等等徐块。
這兩年,微博的LAMP架構(gòu)已經(jīng)趨于穩(wěn)定灾而,整體性能也有幾倍的提升胡控。我們也有了一套自己的高性能LAMP整體解決方案。所以LAMP優(yōu)化的工作少了一些∨蕴耍現(xiàn)在主要精力都放在基礎(chǔ)設(shè)施的研發(fā)上昼激,比如緩存中間層,轉(zhuǎn)碼服務锡搜,通信平臺等等橙困。
問:PHP7(PHPNG)有沒有把新浪微博平臺使用PHP的需求和痛點當做重要的反饋?
這個當然是有的耕餐,自從我加入開發(fā)組以來凡傅,和不少的其他成員有過類似的爭論就是:我認為性能很重要,而有人會認為新特性很重要肠缔,那么當一個新特性影響性能的時候我們就會發(fā)生爭執(zhí)夏跷。
我很偏執(zhí)于性能提升,這也是為什么我后來和Dmitry Stogov合作比較多的原因明未,因為他也特別關(guān)心性能槽华。
而我關(guān)心性能的主要原因就是,對于每1%的性能提升能給微博這樣的國內(nèi)最大的LNMP平臺帶來的價值我有很真實的體會趟妥。目前我們微博的整體性能雖然相比兩年前有了很大的提升猫态,但是我認識到在不影響開發(fā)效率的情況下,進一步的提升只能依賴于語言披摄、環(huán)境的性能提升亲雪。所以這部分也就是微博對PHP的需求。
PHP7在Wordpress上相比于5.6疚膊,有100%以上的真實性能提升(QPS)义辕,我相信明年,等PHP7發(fā)布以后酿联,我們微博的整體LAMP平臺的各項業(yè)務也可以得到100%的性能提升终息。
問:你參與PHP7(PHPNG)開發(fā)的流程是什么樣的?你是如何和其他開發(fā)組成員合作的贞让?
PHPNG當時是一個秘密的項目,最初的參與者只有Dmitry和我柳譬,我還記得是今年開春的時候喳张,當時我們做的基于PHP5的JIT項目因為效果不理想所以擱置了,大家都比較郁悶美澳。
Dmitry說他有個想法销部,把ZVAL重新設(shè)計下摸航,壓縮一下大小來減少內(nèi)存占用。然后我們倆個人討論了一下舅桩,因為其實我們每天都會有各種想法酱虎,所以當時也只是覺得:嗯,這個想法也許能Work擂涛。但還不是很有信心读串。
當時的主要想法是趕緊做出一個能運行的原型來測試下效果。這個過程中我們主要是討論想法撒妈,然后各自實現(xiàn)要做的部分恢暖,再合并。
合作的主要工具還是靠Skype狰右,不過因為他在圣彼得堡杰捂,和我們有時差,所以也會借助于郵件交流棋蚌,通過Github來Review代碼嫁佳。
等到后來項目差不多有了結(jié)論,我們發(fā)現(xiàn)谷暮,“嘿脱拼,這個主意不錯,起作用了”坷备。然后就公開了熄浓。之后就變成了正常的大家協(xié)作模式,有想法就提交RPC省撑,提交Patch赌蔑,投票,大家Reivew竟秫,然后合并娃惯。
問:PHP7到目前為止已經(jīng)增加或減少了哪些特性?在發(fā)布之前肥败,還將如何提升性能趾浅?
有很多,除了PHPNG這個分支主要提供性能提升以外馒稍,我們還有AST(抽象語法樹)的支持皿哨,Uniform Variable syntax,64bits length string supports纽谒,一些新的語法糖证膨,以及最近的Native TLS等。
PHP7將在2015年10月正式發(fā)布鼓黔, 在這之前央勒,我們還有一些想法要嘗試不见,比如使用zend_array直接替代Hashtable;比如通過指定函數(shù)重新分節(jié)崔步,排序來減少iTLB miss稳吮;比如把JIT的一部分優(yōu)化手段(類型推倒)引入到PHP中,配合一些類型專有的OPCodeHandler來提速井濒;再比如進一步提高代碼數(shù)據(jù)局部性減少Cache miss等等灶似。
當然,我們還有一個并行在做的JIT項目眼虱,只不過我很擔心這個項目能不能在PHP7發(fā)布的時候準備就緒喻奥。
問:PHP的新版本將跨過PHP6直接升級為PHP7嗎?為什么捏悬?
這個主要的原因是撞蚕,當年P(guān)HP有過一個開發(fā)版本叫做PHP6,但后來這個版本失敗了过牙,沒有發(fā)布甥厦。所以,這次的版本也就應該是PHP7了寇钉。
問:Facebook發(fā)布的語言Hack和PHP是什么關(guān)系刀疙?Hack的目的是要取代PHP嗎?這兩種語言相比各自有什么優(yōu)勢扫倡?
沒什么太大的關(guān)系谦秧,Hack is not PHP。要說取代的話撵溃,我相信他們(Facebook)可能會有這樣的想法吧疚鲤,不過這個要看社區(qū)接受不接受了。
對于Hack我不是特別熟悉缘挑,不好具體評價集歇。
問:有人認為由于PHP易于學習,門檻低语淘,所以導致一些并不適合編程的人涌了進來诲宇,你怎么看待這種觀點?
這個觀點我實在不敢贊同惶翻。我在本科畢業(yè)的時候姑蓝,也嘗試找了一些開發(fā)工作,面試了幾個單位维贺,都被拒了它掂,也許在當時面試我的那些人眼里,我就是一個不適合編程的人吧溯泣。
但是PHP因為門檻低虐秋,讓人可以很快看到自己“編程”的成果,會對新手產(chǎn)生一個正向反饋激勵的作用垃沦,讓有興趣的人變得更有興趣客给。 而編程的人越多,那么產(chǎn)生大牛肢簿、對整個技術(shù)進步做出貢獻的人出現(xiàn)的概率也越大靶剑。
并且,未來的編程語言一定是朝著易用性發(fā)展池充,進一步降低編程的門檻桩引,也許會有一天人人都能編程也說不定呢!
問:一名合格的PHP工程師的知識結(jié)構(gòu)是怎樣的收夸?
我記得以前有一句話說:“ PHP工程師都是萬金油”坑匠,其實這句話不僅僅對PHP工程師適用,應該對所有的工程師都適用卧惜。
知識結(jié)構(gòu)要很廣厘灼。Web開發(fā)涉及的技術(shù)點是比較多的,HTML咽瓷、CSS设凹、JS、SQL這些以外茅姜,還要懂得一些Nginx闪朱、Linux、Mysql的配置钻洒、維護奋姿、排錯常用的辦法,這些都應該懂一些航唆。
問:除了技術(shù)能力之外胀蛮,你在面試的時候還會注重什么?
我會特別注意思維清晰糯钙、溝通粪狼、談吐。其實說穿了就是未來一起共事的話任岸,會不會有障礙再榄,以及成長潛力是否大。
問:曾經(jīng)的phpe.net站長陳伯樂現(xiàn)在在賣男人襪享潜。你對未來的打算是什么困鸥?會一直都是一位coder嗎?
其實我是一個很懶的人,從來不會考慮得很遠疾就,今朝有酒今朝醉澜术。所以對未來其實我也不是很清楚,我只是覺得現(xiàn)在我還是喜歡編程猬腰,喜歡通過自己的工作讓大家受益并獲得社區(qū)的贊譽鸟废,我覺得這樣挺好的,我會繼續(xù)做下去的姑荷。