精品主題,實戰(zhàn)科普,最新行業(yè)熱點話題,隨時掌握云上咨訊。
網(wǎng)名:雪候鳥,大家尊稱鳥哥,惠新宸 @Laruence, 是國內(nèi)最有影響力的 PHP 技術(shù)專家,PHP 開發(fā)組核心成員,PECL 開發(fā)者,Zend 公司外聘顧問。他曾供職于雅虎,百度,現(xiàn)在新浪微博任平臺及數(shù)據(jù)部總架構(gòu)師兼首席 PHP 顧問?;菪洛肥?nbsp;PHP NG 核心開發(fā)者,PHP5.4,5.5 的主要開發(fā)者。作為 PECL 開發(fā)者貢獻了 Yaf ,Yar 以及 Yac、Taint 等多個優(yōu)秀開源作品,同時也是 APC,Opcache,Msgpack 等項目的維護者。
從一個在網(wǎng)上搜 PHP 教程的初學(xué)者,到 PHP 開發(fā)組核心成員,惠新宸覺得整個過程就像“打怪升級”。和 Java 一樣也被稱為藍領(lǐng)語言的 PHP,在他看來恰恰是能夠培養(yǎng)更多編程者的搖籃,而人人都能編程的時代,勢必會產(chǎn)生更多能夠推動技術(shù)進步的牛人。他在博客風(fēng)雪之隅上分享關(guān)于 PHP 語言和 Zend 引擎相關(guān)的研究、技術(shù)、新聞。左手代碼,右手詩。
問:你是如何開始對編程感興趣的?
我第一次進行“編程”好像還是在小霸王學(xué)習(xí)機上。后來大學(xué)學(xué)的是計算機,研究生的時候負(fù)責(zé)學(xué)校校園化建設(shè),主動或者被動地做了很多 Web 開發(fā)工作,包括當(dāng)時學(xué)校很多二級部門的網(wǎng)站,校園 BBS 的維護等。 想想好像也沒有那么一件事,或者一個契機說我就喜歡上編程了。就感覺很自然地就做了這個行業(yè),也沒有覺得不喜歡,就這么做下來了。
問:你是如何喜歡上 PHP 的?你又是如何成為 PHP 開發(fā)組核心成員的?
當(dāng)時在研究生的時候要做一個網(wǎng)站,完全不會的情況下就去網(wǎng)上搜,剛好搜到一個 PHP 的教程,教怎么做一個簡單的網(wǎng)站,于是試著照著做了一下,發(fā)現(xiàn)無論從安裝、部署(當(dāng)時還沒有那種集中化部署工具,不過也有很多教程教怎么部署 LAMP)、編寫代碼,測試都很方便,語法還和C語言很像,甚至很多 API 的名字也和 libc API 的一樣。于是就這樣開始了和 PHP 的不解之緣。
應(yīng)該是在 2011 年吧,那個時候為百度開發(fā)了 Ap(Yaf 的前身項目),當(dāng)時在百度內(nèi)部用的還不錯,于是我想著要貢獻到 PECL 上去,修改了一些以后,改名為 Yaf(Yet another framework,這個名字也是有點自嘲的意思,因為 PHP 的框架非常多),就發(fā)郵件到 PHP 的郵件組,因為英語比較爛,所以過程還是比較曲折,好在當(dāng)時 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ù)中,成為了開發(fā)組的一員。
至于說核心么,那是慢慢積累來的,其實也是一個互信的過程。如果你的工作大家認(rèn)可,那么就會尊重你的意見。我慢慢地和 Dmitry Stogov 變的熟了起來,得到了 Zend 核心部分的提交權(quán)限,提交了很多核心 Bug 的修復(fù)和新特性,再后來成為了 Zend 外聘顧問,慢慢成為了 Core Developer。
聽起來好像有點打怪升級的感覺吧。
問:你是在什么樣的契機下開發(fā)了 Yaf?當(dāng)時百度是如何支持 Yaf 開發(fā)的?
在 Yaf 之前,關(guān)于使用不使用框架其實一直有一個經(jīng)典的爭論就是:“使用框架會降低性能,而不使用框架會降低開發(fā)效率?!?/span>
當(dāng)時百度內(nèi)部的框架很多,包括開源的 Yii,ZF 之類的,也包括有的團隊自己寫的。這樣有一個問題就是類庫,一些周邊設(shè)施沒有辦法互通。
還有一個原因就是,很多框架作者把框架發(fā)布出去以后,會發(fā)現(xiàn)不同的人會對框架做各種修改,導(dǎo)致時間久了,一個框架發(fā)出去,就變成了各種變種,后續(xù)統(tǒng)一升級也變得不可能。
所以,我決定要用 PHP 擴展實現(xiàn)一個框架來解決這些問題,當(dāng)然在寫這個擴展之前其實也不是很有信心,不知道采用擴展能帶來多大的性能提升。好在最后的結(jié)果是很好的。
問:為什么選擇用C語言來寫 Yaf?
PHP 是C語言寫的,所以他的擴展也是采用C語言來寫的,于是就選擇了C語言來寫 Yaf。
問:為什么會離開百度,來到新浪微博?
這個其實原因很多,比如當(dāng)時在百度是 T7 了,業(yè)務(wù)上的事情參與得少了,感覺自己好像沒有那么多事情要做,有點虛度的感覺。
另外,我當(dāng)時在百度的商業(yè)搜索部,并不直接接觸訪問量大的系統(tǒng),所以也希望找個大的平臺再鍛煉下,而微博剛好就是這樣一個平臺。
來了微博以后,確實接觸到了很多之前沒有遇到過的挑戰(zhàn),也感覺自己的知識有了更大的舞臺可以發(fā)揮。
問:你現(xiàn)在在新浪微博具體負(fù)責(zé)的工作是什么?
我現(xiàn)在在微博技術(shù)部,帶著一個基礎(chǔ)服務(wù)小組,我們主要的工作也分階段,前兩年的主要工作就是做微博 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)碼服務(wù),通信平臺等等。
問:PHP7(PHPNG)有沒有把新浪微博平臺使用 PHP 的需求和痛點當(dāng)做重要的反饋?
這個當(dāng)然是有的,自從我加入開發(fā)組以來,和不少的其他成員有過類似的爭論就是:我認(rèn)為性能很重要,而有人會認(rèn)為新特性很重要,那么當(dāng)一個新特性影響性能的時候我們就會發(fā)生爭執(zhí)。
我很偏執(zhí)于性能提升,這也是為什么我后來和 Dmitry Stogov 合作比較多的原因,因為他也特別關(guān)心性能。
而我關(guān)心性能的主要原因就是,對于每1% 的性能提升能給微博這樣的國內(nèi)最大的 LNMP 平臺帶來的價值我有很真實的體會。目前我們微博的整體性能雖然相比兩年前有了很大的提升,但是我認(rèn)識到在不影響開發(fā)效率的情況下,進一步的提升只能依賴于 語言、環(huán)境的性能提升。所以這部分也就是微博對 PHP 的需求。
PHP7 在 WordPress 上相比于 5.6,有 100% 以上的真實性能提升(QPS),我相信明年,等 PHP7 發(fā)布以后,我們微博的整體 LAMP 平臺的各項業(yè)務(wù)也可以得到 100% 的性能提升。
問:你參與 PHP7(PHPNG)開發(fā)的流程是什么樣的?你是如何和其他開發(fā)組成員合作的?
PHPNG 當(dāng)時是一個秘密的項目,最初的參與者只有 Dmitry 和我,我還記得是今年開春的時候,當(dāng)時我們做的基于 PHP5 的 JIT 項目因為效果不理想所以擱置了,大家都比較郁悶。
Dmitry 說他有個想法,把 ZVAL 重新設(shè)計下,壓縮一下大小來減少內(nèi)存占用。然后我們倆個人討論了一下,因為其實我們每天都會有各種想法,所以當(dāng)時也只是覺得:嗯,這個想法也許能 Work。但還不是很有信心。
當(dāng)時的主要想法是趕緊做出一個能運行的原型來測試下效果。這個過程中我們主要是討論想法,然后各自實現(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 等等。
當(dāng)然,我們還有一個并行在做的 JIT 項目,只不過我很擔(dān)心這個項目能不能在 PHP7 發(fā)布的時候準(zhǔn)備就緒。
問:PHP 的新版本將跨過 PHP6 直接升級為 PHP7 嗎?為什么?
這個主要的原因是,當(dāng)年 PHP 有過一個開發(fā)版本叫做 PHP6,但后來這個版本失敗了,沒有發(fā)布。所以,這次的版本也就應(yīng)該是 PHP7 了。
問:Facebook 發(fā)布的語言 Hack 和 PHP 是什么關(guān)系?Hack 的目的是要取代 PHP 嗎?這兩種語言相比各自有什么優(yōu)勢?
沒什么太大的關(guān)系,Hack is not PHP。要說取代的話,我相信他們(Facebook)可能會有這樣的想法吧,不過這個要看社區(qū)接受不接受了。
對于 Hack 我不是特別熟悉,不好具體評價。
問:有人認(rèn)為由于 PHP 易于學(xué)習(xí),門檻低,所以導(dǎo)致一些并不適合編程的人涌了進來,你怎么看待這種觀點?
這個觀點我實在不敢贊同。我在本科畢業(yè)的時候,也嘗試找了一些開發(fā)工作,面試了幾個單位,都被拒了,也許在當(dāng)時面試我的那些人眼里,我就是一個不適合編程的人吧。
但是 PHP 因為門檻低,讓人可以很快看到自己“編程”的成果,會對新手產(chǎn)生一個正向反饋激勵的作用,讓有興趣的人變得更有興趣。 而編程的人越多,那么產(chǎn)生大牛、對整個技術(shù)進步做出貢獻的人出現(xiàn)的概率也越大。
并且,未來的編程語言一定是朝著易用性發(fā)展,進一步降低編程的門檻,也許會有一天人人都能編程也說不定呢!
問:一名合格的 PHP 工程師的知識結(jié)構(gòu)是怎樣的?
我記得以前有一句話說:“ PHP 工程師都是萬金油”,其實這句話不僅僅對 PHP 工程師適用,應(yīng)該對所有的工程師都適用。
知識結(jié)構(gòu)要很廣。Web 開發(fā)涉及的技術(shù)點是比較多的,HTML、CSS、JS、SQL 這些以外,還要懂得一些 Nginx、Linux、Mysql 的配置、維護、排錯常用的辦法,這些都應(yīng)該懂一些。
問:除了技術(shù)能力之外,你在面試的時候還會注重什么?
我會特別注意思維清晰、溝通、談吐。其實說穿了就是未來一起共事的話,會不會有障礙,以及成長潛力是否大。
問:曾經(jīng)的 phpe.net 站長陳伯樂現(xiàn)在在賣男人襪。你對未來的打算是什么?會一直都是一位 coder 嗎?
其實我是一個很懶的人,從來不會考慮得很遠(yuǎn),今朝有酒今朝醉。所以對未來其實我也不是很清楚,我只是覺得現(xiàn)在我還是喜歡編程,喜歡通過自己的工作讓大家受益并獲得社區(qū)的贊譽,我覺得這樣挺好的,我會繼續(xù)做下去的。