網名:雪候鳥,你們尊稱鳥哥,惠新宸 @Laruence, 是國內最有影響力的 PHP 技術專家,PHP 開發組核心成員,PECL 開發者,Zend 公司外聘顧問。他曾供職於雅虎,百度,如今新浪微博任平臺及數據部總架構師兼首席 PHP 顧問。惠新宸是 PHP NG 核心開發者,PHP5.4,5.5 的主要開發者。做爲 PECL 開發者貢獻了 Yaf ,Yar 以及 Yac、Taint 等多個優秀開源做品,同時也是 APC,Opcache,Msgpack 等項目的維護者。php
從一個在網上搜 PHP 教程的初學者,到 PHP 開發組核心成員,惠新宸以爲整個過程就像「打怪升級」。和 Java 同樣也被稱爲藍領語言的 PHP,在他看來偏偏是可以培養更多編程者的搖籃,而人人都能編程的時代,勢必會產生更多可以推進技術進步的牛人。他在博客風雪之隅上分享關於 PHP 語言和 Zend 引擎相關的研究、技術、新聞。左手代碼,右手詩。web
問:你是如何開始對編程感興趣的?面試
我第一次進行「編程」好像仍是在小霸王學習機上。後來大學學的是計算機,研究生的時候負責學校校園化建設,主動或者被動地作了不少 Web 開發工做,包括當時學校不少二級部門的網站,校園 BBS 的維護等。 想一想好像也沒有那麼一件事,或者一個契機說我就喜歡上編程了。就感受很天然地就作了這個行業,也沒有以爲不喜歡,就這麼作下來了。sql
問:你是如何喜歡上 PHP 的?你又是如何成爲 PHP 開發組核心成員的?編程
當時在研究生的時候要作一個網站,徹底不會的狀況下就去網上搜,恰好搜到一個 PHP 的教程,教怎麼作一個簡單的網站,因而試着照着作了一下,發現不管從安裝、部署(當時尚未那種集中化部署工具,不過也有不少教程教怎麼部署 LAMP)、編寫代碼,測試都很方便,語法還和C語言很像,甚至不少 API 的名字也和 libc API 的同樣。因而就這樣開始了和 PHP 的不解之緣。緩存
應該是在 2011 年吧,那個時候爲百度開發了 Ap(Yaf 的前身項目),當時在百度內部用的還不錯,因而我想着要貢獻到 PECL 上去,修改了一些之後,更名爲 Yaf(Yet another framework,這個名字也是有點自嘲的意思,由於 PHP 的框架很是多),就發郵件到 PHP 的郵件組,由於英語比較爛,因此過程仍是比較曲折,好在當時 Pierre Joye 幫助我了不少,讓 Yaf 進入了 PECL。性能優化
另外在提交 Yaf 以前我其實一直都在研究 PHP 的源代碼,因此也提交了很多 Bug 和 Fix,好比我記得有一天中午,Rasmus(PHP 之父)在 IRC 上說發現一個 Bug,我差很少 5 分鐘後就給出了 Fix。架構
等慢慢的和一些人熟悉,獲得了你們的信任之後,我就發起申請,以後就得到了 PHP 核心代碼的提交權限,參與到 PHP 的直接開發和 Bug 修復中,成爲了開發組的一員。框架
至於說核心麼,那是慢慢積累來的,其實也是一個互信的過程。若是你的工做你們承認,那麼就會尊重你的意見。我慢慢地和 Dmitry Stogov 變的熟了起來,獲得了 Zend 核心部分的提交權限,提交了不少核心 Bug 的修復和新特性,再後來成爲了 Zend 外聘顧問,慢慢成爲了 Core Developer。編程語言
聽起來好像有點打怪升級的感受吧。
問:你是在什麼樣的契機下開發了 Yaf?當時百度是如何支持 Yaf 開發的?
在 Yaf 以前,關於使用不使用框架其實一直有一個經典的爭論就是:「使用框架會下降性能,而不使用框架會下降開發效率。」
當時百度內部的框架不少,包括開源的 Yii,ZF 之類的,也包括有的團隊本身寫的。這樣有一個問題就是類庫,一些周邊設施沒有辦法互通。
還有一個緣由就是,不少框架做者把框架發佈出去之後,會發現不一樣的人會對框架作各類修改,致使時間久了,一個框架發出去,就變成了各類變種,後續統一升級也變得不可能。
因此,我決定要用 PHP 擴展實現一個框架來解決這些問題,固然在寫這個擴展以前其實也不是頗有信心,不知道採用擴展能帶來多大的性能提高。好在最後的結果是很好的。
問:爲何選擇用C語言來寫 Yaf?
PHP 是C語言寫的,因此他的擴展也是採用C語言來寫的,因而就選擇了C語言來寫 Yaf。
問:爲何會離開百度,來到新浪微博?
這個其實緣由不少,好比當時在百度是 T7 了,業務上的事情參與得少了,感受本身好像沒有那麼多事情要作,有點虛度的感受。
另外,我當時在百度的商業搜索部,並不直接接觸訪問量大的系統,因此也但願找個大的平臺再鍛鍊下,而微博恰好就是這樣一個平臺。
來了微博之後,確實接觸到了不少以前沒有遇到過的挑戰,也感受本身的知識有了更大的舞臺能夠發揮。
問:你如今在新浪微博具體負責的工做是什麼?
我如今在微博技術部,帶着一個基礎服務小組,咱們主要的工做也分階段,前兩年的主要工做就是作微博 LAMP 的性能優化,包括各類基礎框架,工具研發,環境優化,規範制定等等。
這兩年,微博的 LAMP 架構已經趨於穩定,總體性能也有幾倍的提高。咱們也有了一套本身的高性能 LAMP 總體解決方案。因此 LAMP 優化的工做少了一些。如今主要精力都放在基礎設施的研發上,好比緩存中間層,轉碼服務,通訊平臺等等。
問:PHP7(PHPNG)有沒有把新浪微博平臺使用 PHP 的需求和痛點當作重要的反饋?
這個固然是有的,自從我加入開發組以來,和很多的其餘成員有過相似的爭論就是:我認爲性能很重要,而有人會認爲新特性很重要,那麼當一個新特性影響性能的時候咱們就會發生爭執。
我很偏執於性能提高,這也是爲何我後來和 Dmitry Stogov 合做比較多的緣由,由於他也特別關心性能。
而我關心性能的主要緣由就是,對於每1% 的性能提高能給微博這樣的國內最大的 LNMP 平臺帶來的價值我有很真實的體會。目前咱們微博的總體性能雖然相比兩年前有了很大的提高,可是我認識到在不影響開發效率的狀況下,進一步的提高只能依賴於 語言、環境的性能提高。因此這部分也就是微博對 PHP 的需求。
PHP7 在 WordPress 上相比於 5.6,有 100% 以上的真實性能提高(QPS),我相信明年,等 PHP7 發佈之後,咱們微博的總體 LAMP 平臺的各項業務也能夠獲得 100% 的性能提高。
問:你參與 PHP7(PHPNG)開發的流程是什麼樣的?你是如何和其餘開發組成員合做的?
PHPNG 當時是一個祕密的項目,最初的參與者只有 Dmitry 和我,我還記得是今年開春的時候,當時咱們作的基於 PHP5 的 JIT 項目由於效果不理想因此擱置了,你們都比較鬱悶。
Dmitry 說他有個想法,把 ZVAL 從新設計下,壓縮一下大小來減小內存佔用。而後咱們倆我的討論了一下,由於其實咱們天天都會有各類想法,因此當時也只是以爲:嗯,這個想法也許能 Work。但還不是頗有信心。
當時的主要想法是趕忙作出一個能運行的原型來測試下效果。這個過程當中咱們主要是討論想法,而後各自實現要作的部分,再合併。
合做的主要工具仍是靠 Skype,不過由於他在聖彼得堡,和咱們有時差,因此也會藉助於郵件交流,經過 Github 來 Review 代碼。
等到後來項目差很少有告終論,咱們發現,「嘿,這個主意不錯,起做用了」。而後就公開了。以後就變成了正常的你們協做模式,有想法就提交 RPC,提交 Patch,投票,你們 Reivew,而後合併。
問:PHP7 到目前爲止已經增長或減小了哪些特性?在發佈以前,還將如何提高性能?
有不少,除了 PHPNG 這個分支主要提供性能提高之外,咱們還有 AST(抽象語法樹)的支持,Uniform Variable syntax,64bits length string supports,一些新的語法糖,以及最近的 Native TLS 等。
PHP7 將在 2015 年 10 月正式發佈, 在這以前,咱們還有一些想法要嘗試,好比使用 zend_array 直接替代 Hashtable;好比經過指定函數從新分節,排序來減小 iTLB miss;好比把 JIT 的一部分優化手段(類型推倒)引入到 PHP 中,配合一些類型專有的 OPCodeHandler 來提速;再好比進一步提升代碼數據局部性減小 Cache miss 等等。
固然,咱們還有一個並行在作的 JIT 項目,只不過我很擔憂這個項目能不能在 PHP7 發佈的時候準備就緒。
問:PHP 的新版本將跨過 PHP6 直接升級爲 PHP7 嗎?爲何?
這個主要的緣由是,當年 PHP 有過一個開發版本叫作 PHP6,但後來這個版本失敗了,沒有發佈。因此,此次的版本也就應該是 PHP7 了。
問:Facebook 發佈的語言 Hack 和 PHP 是什麼關係?Hack 的目的是要取代 PHP 嗎?這兩種語言相比各自有什麼優點?
沒什麼太大的關係,Hack is not PHP。要說取代的話,我相信他們(Facebook)可能會有這樣的想法吧,不過這個要看社區接受不接受了。
對於 Hack 我不是特別熟悉,很差具體評價。
問:有人認爲因爲 PHP 易於學習,門檻低,因此致使一些並不適合編程的人涌了進來,你怎麼看待這種觀點?
這個觀點我實在不敢贊同。我在本科畢業的時候,也嘗試找了一些開發工做,面試了幾個單位,都被拒了,也許在當時面試個人那些人眼裏,我就是一個不適合編程的人吧。
可是 PHP 由於門檻低,讓人能夠很快看到本身「編程」的成果,會對新手產生一個正向反饋激勵的做用,讓有興趣的人變得更有興趣。 而編程的人越多,那麼產生大牛、對整個技術進步作出貢獻的人出現的機率也越大。
而且,將來的編程語言必定是朝着易用性發展,進一步下降編程的門檻,也許會有一天人人都能編程也說不定呢!
問:一名合格的 PHP 工程師的知識結構是怎樣的?
我記得之前有一句話說:「 PHP 工程師都是萬金油」,其實這句話不只僅對 PHP 工程師適用,應該對全部的工程師都適用。
知識結構要很廣。Web 開發涉及的技術點是比較多的,HTML、CSS、JS、SQL 這些之外,還要懂得一些 Nginx、Linux、Mysql 的配置、維護、排錯經常使用的辦法,這些都應該懂一些。
問:除了技術能力以外,你在面試的時候還會注重什麼?
我會特別注意思惟清晰、溝通、談吐。其實說穿了就是將來一塊兒共事的話,會不會有障礙,以及成長潛力是否大。
問:曾經的 phpe.net 站長陳伯樂如今在賣男人襪。你對將來的打算是什麼?會一直都是一位 coder 嗎?
其實我是一個很懶的人,歷來不會考慮得很遠,今朝有酒今朝醉。因此對將來其實我也不是很清楚,我只是以爲如今我仍是喜歡編程,喜歡經過本身的工做讓你們受益並得到社區的讚譽,我以爲這樣挺好的,我會繼續作下去的。