鳥哥談PHP的架構(gòu)與未來發(fā)展
惠新宸于2011年8月作為核心開發(fā)人員加入PHP語言官方開發(fā)組,目前是該組織的唯一一位國人,也是國內(nèi)最具影響力的PHP技術(shù)專家之一。 惠新宸作為知名PHP技術(shù)博客“風(fēng)雪之隅”(http://www.laruence.com/)的博主, 一直專注與PHP底層原理的研究和分享。 其中《深入理解PHP原理》系列文章被廣泛推薦, 成為國內(nèi)PHP語言深度使用和定制的經(jīng)典入門教材。他基于PHP擴(kuò)展開發(fā)的PHP框架Yaf, 被譽(yù)為最快的PHP開發(fā)框架。同時(shí)他還是Lua,Taint等PHP擴(kuò)展的作者。在PHP 5.4開發(fā)過程中,他一共為PHP貢獻(xiàn)了近400個(gè)交付。本次我們對惠新宸進(jìn)行了一次采訪,請他分享一下PHP框架和擴(kuò)展的知識,以及PHP發(fā)展的情況。
InfoQ:請簡單的介紹一下您自己,以及您目前所在團(tuán)隊(duì)的情況。
惠新宸:大家好,我是惠新宸,陜北人, PHP圈很多朋友叫我鳥哥,趁著這個(gè)機(jī)會(huì)和大家解釋下,我不是《Linux私房菜》的鳥哥,我只是IM昵稱叫”雪候鳥”,又因?yàn)樵诎俣鹊臅r(shí)候,我在工程師中算年長,所以大家才開始這么叫。
目前我在新浪微博應(yīng)用架構(gòu)團(tuán)隊(duì)工作,我們應(yīng)用架構(gòu)團(tuán)隊(duì)主要致力于新浪微博LAMP的架構(gòu)優(yōu)化,以適應(yīng)高性能和快速開發(fā)的需求。
微博每天PV數(shù)十億,產(chǎn)生數(shù)T級別的數(shù)據(jù), 處理過程中任何一個(gè)毫秒的優(yōu)化,一個(gè)byte的減少,對我們都是意義重大,這個(gè)工作非常有意思也很有挑戰(zhàn), 到目前為止,我們團(tuán)隊(duì)已經(jīng)通過一些不改動(dòng)業(yè)務(wù)邏輯的優(yōu)化方法,把微博首頁的響應(yīng)時(shí)間降低了44%,TPS提升了78%。另外,我們團(tuán)隊(duì)還負(fù)責(zé)技術(shù)提升和沉淀工作,這也是一項(xiàng)很有意思的工作,因?yàn)榉窒砟茏屛覀兪斋@更多。
InfoQ:作為PHP語言官方開發(fā)組的唯一一位國人,請您談?wù)劶尤脒@個(gè)組織之后的一些體會(huì)。
惠新宸:“唯一一位”這個(gè)稱號肯定是暫時(shí)的,我相信未來會(huì)有更多國內(nèi)開發(fā)者加入。我是去年8月份加入PHP開發(fā)組, 開發(fā)組是一個(gè)開源組織, 準(zhǔn)確的說,我們應(yīng)該被稱為Commiters(提交者),有很多不是開發(fā)組的同學(xué)為PHP提供Patch。
加入以后我對如何運(yùn)作一個(gè)開源項(xiàng)目有了一些新的體會(huì), 其中讓我感受最深的就是各種流程規(guī)范。大到發(fā)布一個(gè)版本的流程規(guī)范,小到一個(gè)新特性增加的流程規(guī)范,這些看似繁瑣的規(guī)范,雖然一定程度上導(dǎo)致響應(yīng)速度緩慢,但卻保證了PHP在成長過程中,盡量不出大事故。
還有一個(gè)體會(huì)就是, 英語對于技術(shù)工作者來說真的很重要,我現(xiàn)在特別后悔本科時(shí)沒好好學(xué)習(xí)英語, 雖然我閱讀資料沒什么問題,但是在日常交流的時(shí)候經(jīng)常鬧笑話,有個(gè)段子,就是開發(fā)組有個(gè)開發(fā)者說,要理解我說的話,需要像讀正則表達(dá)式一樣。
InfoQ:長期關(guān)注你博客的人都知道,你一直致力于PHP推廣工作,你個(gè)人也在國內(nèi)最大的幾家互聯(lián)網(wǎng)公司工作過,能談?wù)凱HP在國內(nèi)的發(fā)展?fàn)顩r嗎?
惠新宸:之前在我的博客上,我也分享過一個(gè)數(shù)字,就是全球前100萬的站點(diǎn)中,有超過70%的站點(diǎn)是使用PHP開發(fā)的。在我看來,PHP易學(xué)、易用、易擴(kuò)展是它能如此流行的主要原因, 易學(xué)易用我就不多說,這里我想主要說一下PHP可擴(kuò)展性。
PHP提供了一套很強(qiáng)大的擴(kuò)展構(gòu)建系統(tǒng), 使用這套擴(kuò)展構(gòu)建系統(tǒng),我們可以很方便的擴(kuò)展PHP功能,在PECL擴(kuò)展庫中,目前已經(jīng)有超過200個(gè)標(biāo)準(zhǔn)擴(kuò)展。
我在2008年開始做PHP擴(kuò)展時(shí),互聯(lián)網(wǎng)上幾乎沒什么相關(guān)的中文資料,而現(xiàn)在我們看到,網(wǎng)上資料非常豐富。 越來越多的開發(fā)者嘗試通過擴(kuò)展PHP來解決他們遇到的問題,而PHP的開源精神,又或多或少影響開發(fā)者把這些擴(kuò)展開源給社區(qū),這些正是我認(rèn)為PHP可以長期發(fā)展下去的主要?jiǎng)恿Α?/p>
InfoQ:您是開源框架Yaf的作者,請簡單介紹一下開源框架Yaf的特點(diǎn)。
惠新宸:長久以來,關(guān)于PHP要不要使用框架有很多爭論,比較常見的矛盾點(diǎn)是,使用框架后,開發(fā)速度變快但性能得不到保證。
Yaf是為了解決這個(gè)矛盾點(diǎn)而開發(fā)的,它是一個(gè)用PHP擴(kuò)展方式(C語言)實(shí)現(xiàn)PHP的MVC框架,它最大特點(diǎn)是高性能(相比于傳統(tǒng)用PHP實(shí)現(xiàn)的框架),低資源消耗,同時(shí)又能保證快速開發(fā)。
Yaf主要提供了路由,分發(fā),自動(dòng)加載,插件機(jī)制,以及一個(gè)簡單高性能的視圖引擎, 這些功能是每個(gè)MVC框架必備的,又具有一定不易變性, 所以適合用擴(kuò)展來實(shí)現(xiàn)。
InfoQ:關(guān)于Yaf框架,您下一步有什么開發(fā)計(jì)劃?
惠新宸:我的觀點(diǎn)是,Yaf未來應(yīng)該朝做精做專的方向發(fā)展,比如Yaf 2.0與Yaf 1.0相比,并沒有添加新功能,主要是架構(gòu)重新設(shè)計(jì)和性能調(diào)優(yōu)。 我不希望Yaf成為想要涵蓋一切功能的”超大全”,我只希望它能為追求高性能的開發(fā)者提供一個(gè)簡單高效及可擴(kuò)展的工具,為”低碳”生活做做貢獻(xiàn)。
另外,我想感謝喜歡Yaf的朋友們,Yaf目前在社區(qū)有很多使用者,這點(diǎn)是我最初發(fā)布Yaf的時(shí)候沒有想到的,一些很熱心的朋友為Yaf提供Windows下的發(fā)布,建立了使用者交流論壇、QQ群等,這些事情我有心但沒有精力做,他們的熱情是驅(qū)使我不斷完善Yaf的動(dòng)力,非常感謝這些朋友。
InfoQ:能否對Zend、Yii、CakePHP這幾個(gè)PHP框架進(jìn)行簡單的優(yōu)劣勢分析?
惠新宸:這幾個(gè)框架都是很優(yōu)秀的PHP框架,我在以前的項(xiàng)目中使用過Zend和Yii, 但可惜沒有機(jī)會(huì)用CakePHP, 說說我個(gè)人的理解吧。
Zend Framework是Zend公司開發(fā)的PHP開發(fā)框架,它設(shè)計(jì)精良,功能強(qiáng)大,有很廣的使用者,文檔齊全,社區(qū)也比較活躍。它的代碼寫得規(guī)范工整,非常適合PHP開發(fā)者去閱讀和學(xué)習(xí)。缺點(diǎn)就是稍顯臃腫,性能偏低。
我對Yii印象最深刻的是AR,在實(shí)際開發(fā)中非常方便, 并且提供了系統(tǒng)的自動(dòng)生成工具,我個(gè)人非常喜歡Yii。 然而AR的缺點(diǎn)也很明顯,資源占用很大,不適合大數(shù)據(jù)量應(yīng)用。
InfoQ:請推薦三個(gè)您開發(fā)的PHP擴(kuò)展,為什么您推薦這三個(gè)擴(kuò)展?
惠新宸:我寫擴(kuò)展開源出來的就4個(gè),按照時(shí)間順序是Yaf,Lua,Taint,Couchbase。它們各自要解決的問題不同, 我簡單介紹一下這幾個(gè)擴(kuò)展吧。
Yaf前面介紹過了,這里不再重復(fù)。
Lua是在PHP擴(kuò)展中對Lua引擎的封裝,支持在PHP中運(yùn)行Lua腳本,并能與Lua腳本交換數(shù)據(jù)。 Taint是一個(gè)XSS,Sql&Shell injection檢測擴(kuò)展,它主要是為了彌補(bǔ)一些靜態(tài)檢測腳本不能覆蓋到的點(diǎn)。
Couchbase是一個(gè)對Couchbase Client的封裝,Couchbase Server是一個(gè)高性能高實(shí)時(shí)性的K-V數(shù)據(jù)庫。 順便提一下,我們新浪微博應(yīng)用架構(gòu)團(tuán)隊(duì),還在為新浪微博開發(fā)一些擴(kuò)展,這些擴(kuò)展是為微博解決一些實(shí)際問題, 等這些擴(kuò)展可用性和穩(wěn)定性得到驗(yàn)證之后,我們會(huì)開源出來回饋社區(qū)的。
相關(guān)文章:
1. PHP循環(huán)與分支知識點(diǎn)梳理2. 無線標(biāo)記語言(WML)基礎(chǔ)之WMLScript 基礎(chǔ)第1/2頁3. 讀大數(shù)據(jù)量的XML文件的讀取問題4. 解析原生JS getComputedStyle5. ASP基礎(chǔ)入門第三篇(ASP腳本基礎(chǔ))6. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)7. ASP實(shí)現(xiàn)加法驗(yàn)證碼8. 前端從瀏覽器的渲染到性能優(yōu)化9. 利用CSS3新特性創(chuàng)建透明邊框三角10. css代碼優(yōu)化的12個(gè)技巧
