OpenResty 做者章亦春訪談實錄

【軟件簡介】

OpenResty (也稱爲 ngx_openresty)是一個全功能的 Web 應用服務器。它打包了標準的 Nginx 核心,不少的經常使用的第三方模塊,以及它們的大多數依賴項。php

 經過衆多 進行良好設計的 Nginx 模塊,OpenResty 有效地把 Nginx 服務器轉變爲一個強大的 Web 應用服務器,基於它開發人員可使用 Lua 編程語言對 Nginx 核心以及現有的各類 Nginx C 模塊進行腳本編程,構建出能夠處理一萬以上併發請求的極端高性能的 Web 應用。css

 OpenResty 致力於將你的服務器端應用徹底運行於 Nginx 服務器中,充分利用 Nginx 的事件模型來進行非阻塞 I/O 通訊。不只僅是和 HTTP 客戶端間的網絡通訊是非阻塞的,與MySQL、PostgreSQL、Memcached、以及 Redis 等衆多遠方後端之間的網絡通訊也是非阻塞的。html

 由於 OpenResty 軟件包的維護者也是其中打包的許多 Nginx 模塊的做者,因此 OpenResty 能夠確保所包含的全部組件能夠可靠地協同工做。前端

【訪談實錄】

1.    可否先介紹一下你本身,包括技術背景、工做經歷、學習經歷等等
個人技術背景有些雜,前端工程師、運維工程師、系統開發工程師都幹過。07年我從計算機專業畢業後一直在阿里巴巴集團下的子公司工做,先是在雅虎中國的搜索部門幹了兩年。而後又在淘寶的數據部門幹了近兩年的時間。

2.    你在阿里巴巴主要是作哪方面的開發?
我開發過 Firefox 插件,而後作過通用 web service 平臺,後來又搞基於 Gecko 和WebKit核心的網頁視覺識別和自動抽取,再後來從新設計了淘寶量子統計的前端系統,並實現了其中的核心部分,包括客戶端 JavaScript 框架。還有服務器端的數據接口平臺,以及數據融合中間件。在雅虎時還開發過一些運維工具。

3.    那你是何時接觸Nginx的?
我是09年9月開始正式學習它的源碼的,再早前有些零星接觸,但很少。

4.    是在淘寶的工做須要嗎?
準確的講,是個人openresty項目的須要。只不過正好能夠和淘寶數據部門的業務需求結合到一塊兒。我也正是那會兒才加入淘寶數據部門的,以前還在淘寶導購搜索團隊。

5.    那你爲何會想到要作OpenResty這個項目?
OpenResty最先是雅虎中國的一個公司項目,起步於 2007 年 10 月。當時興起了OpenAPI的熱潮,因而老大們也想作一個相似的東西,能夠支持各類 web service 的需求。在部門老大們的支持下,最先的OpenResty實現從一開始就開源了。最初的定位是服務於公司外的開發者,像其餘的OpenAPI那樣,但後來 愈來愈多地是爲雅虎中國的搜索產品提供內部服務。這是第一代的OpenResty,當時的想法是,提供一套抽象的 web service,可以讓用戶利用這些 web service 構造出新的符合他們具體業務需求的 web service 出來,因此有些「meta web servie」的意味,包括數據模型、查詢、安全策略均可以經過這種 meta web service 來表達和配置。同時這種 web service 也有意保持 REST 風格。與這種概念相對應的是純 AJAX 的 web 應用,即 web 應用幾乎都使用客戶端 JavaScript 來編寫,而後徹底由 web service 讓 web 應用「活」起來。用戶把 .html, .js, .css, .jpg 等靜態文件下載到 web browser 中,而後js開始運行,跨域請求雅虎提供的通過站長定製過的 web service,而後應用就能夠運行起來。不過隨着後來的發展,公司外的用戶畢竟仍是少數,因而應用的重點是爲公司內部的其餘團隊提供 web service,好比雅虎中國的全能搜索產品,及其外圍的一些產品。從那之後,開發的重點便放在了性能優化上面。終於在我加入淘寶數據部門的量子團隊之 後,我決定對OpenResty進行從新設計和完全重寫,並把應用重點放在支持像量子統計這樣的 web 產品上面,因此量子統計 3.0 開始也幾乎徹底是 web service 驅動的純 AJAX 應用。

6.    這是第二代的OpenResty嗎?
是的,我通常稱之爲ngx_openresty,以便和第一代基於 Perl 和 Haskell 實現的OpenResty加以區別。我和個人同事王曉哲一塊兒設計了第二代的OpenResty。在王曉哲的提議下,咱們選擇基於nginx和lua進行開發。

7.    你如今哪裏工做呢?
我在過去的一年中沒有正式的工做。我把力量都放在了ngx_openresty爲主的開源項目上面 :) 在國內外用戶的需求推進下保持工做 :)

8.    那你作這個事情有收入嗎?
在過去的一年中只有來自用戶公司和我的的一些捐贈,微薄的捐贈,呵呵。主要想法仍是給本身放一個長假 :)集中力量系統地作一些我最想作的事情。

9.    那你未來的打算呢?
我一貫沒有太長遠的打算,我是一個隨性的人。從這個月底(2012年6月)開始,我將結束 jobless 的狀態。由於美國(舊金山)有一家公司願意讓我在他們那裏全職作ngx_openresty,他們也是ngx_openresty的應用大戶。

10.    OpenResty剛開始是雅虎的項目,他們是放棄了版權嗎?
是雅虎中國,當時已是阿里巴巴集團的一部分。後來咱們重寫OpenResty時,放棄了第一代的全部代碼。就像我當時重寫量子統計前端應用時,放棄了原先的幾乎全部代碼同樣。

11.    爲何要取OpenResty這個名字呢?
OpenResty最先是順應OpenAPI的潮流作的,因此 Open 取自「開放」之意,而Resty即是 REST 風格的意思。雖而後來也能夠基於ngx_openresty實現任何形式的 web service 或者傳統的 web 應用。

12.    也就是說Nginx再也不是一個簡單的靜態網頁服務器了?
是的,也再也不是一個簡單的反向代理了。第二代的openresty致力於經過一系列nginx模塊,把nginx擴展爲全功能的 web 應用服務器。

13.    能夠運行 Java Web 應用嗎?
把 JVM 嵌入nginx絕對不是一個好主意 :)或許將來咱們能夠把 Java 編譯爲Lua哈哈!目前咱們只支持Lua語言。不過有計劃經過把 PHP 等其餘語言編譯爲Lua或者Lua字節碼來實現其餘語言在ngx_openresty上的直接運行。王曉哲已經工做在 php2lua 項目上了,呵呵。

14.    你是怎麼讓別人知道OpenResty這個項目的?
我沒有專門從事ngx_openresty的推廣工做,由於咱們在淘寶時的工做重點一直是首先支撐淘寶量子統計的業務。由於ngx_openresty在 形式上是由一系列相對獨立但又能夠隨意組合起來一塊兒協同工做的nginx模塊組成的,因此人們可能是經過nginx社區首先了解到咱們的一二個模塊,直至最 後知曉ngx_openresty這整個大項目的。一開始咱們的許多用戶的反饋也可能是直接發給我或者王曉哲,以及發到nginx官方的英文郵件列表。隨着 網上搜索「OpenResty」的人愈來愈多,咱們才以爲有必要創建一個 openresty.org 首頁。因而咱們就這麼作了。幾個月前,在Zoon.Quiet同窗的推進下,咱們又把 Google Groups 上的openresty郵件組給啓用起來了,目前可能是中國用戶訂閱並在那裏討論nginx或者openresty 相關的問題,也有好多位國外的用戶在那裏用英文交流。

15.    也就是說你這個項目,一開始就有不少國外的用戶參與?
是的,ngx_openresty是用戶驅動的項目,後來也有很多國內用戶的參與,從 openresty.org 的點擊量分佈上看,國內和國外的點擊量基本持平。

16.    目前開發和維護OpenResty的人員有哪些?
目前主要是我在領導,同時王曉哲仍在作一些基礎而核心的開發工做,但只是業餘時間。咱們有許多比較活躍的貢獻者,好比波蘭的Nginx黑客 PiotrSikora,CloudFlare的系統工程師MatthieuTourne,Turner BroadcastingSystem 的架構師 Brian Akins,一淘量子團隊的林青和支家樂,去哪兒網的珣新和郭穎,新浪網的drdrxp(網名),而淘寶核心系統部的靜龍(花名)、淘李子(花名)、姚偉 斌、Simon Liu等多位工程師今年以來也很活躍。StickyAdsTv公司的 CTO,AntoineBonavita,也爲咱們的測試工具鏈作了不少貢獻。此外,還有很多貢獻者我在這裏並無說起,向他們致歉。

17.    也就是說這個項目目前是由你領導的一些純興趣愛好者在開發。可是這些開發人員都由各自的公司支持來開發這個項目?
這些貢獻者都是其所在的公司的業務需求推進的。咱們不多由於「好玩」而去作一件事情。因此我雖然最近一直在家裏,卻仍被許多公司的業務需求給間接着推進着,呵呵。

18.    我以爲這個項目是我見到國人發起的生態環境很是好的一個項目,向大家致敬!
謝謝。相比其餘開源做者,我自覺得我作得比較好的一個地方是,我老是嘗試及時回覆用戶的各類郵件,即便我還有全職工做的時候。

19.    你知道國內除了淘寶之外,還有哪些公司在用OpenResty嗎
網易,騰訊,去哪兒網、新浪、天涯、CloudFlare, Reblaze.com、EMS、網龍……

20.    那網易、騰訊他們有沒有對這個項目有所貢獻?
網易和騰訊的工程師給了很多反饋,報告過一些問題,可能也貢獻過一些補丁,但我不太能把我的和公司名字聯繫起來,由於開源世界可能是匿名的。我也沒有詢問英 雄出處的習慣。新浪的工程師貢獻過一些補丁,去哪兒網有一些雅虎和淘寶的老同事,也是活躍的貢獻者。還有一些公司由於特別交待須要保密,因此我也不方便在 這裏列出它們的名字:)

21.    大家平時是經過郵件列表交流嗎?
咱們平時經過郵件、微博、Gtalk/MSN 等各類方式交流。同時github也是很不錯的交流平臺。

22.    你的美國老闆是讓你過去全職作OpenResty這個項目嗎?你的工做是否會徹底開源?
固然。

23.    你去年一年都在家作開源項目。你說主要力量放在了ngx_openresty上面,還有其餘開源項目嗎?
還有 Test::Nginx測試模塊mockeagain測試工具opsboy之類。

24.    目前和OpenResty相似的項目有哪些?相比之下OpenResty有和特色和優點?
ngx_openresty目前有兩大應用目標:
1. 通用目的的 web 應用服務器。在這個目標下,現有的 web 應用技術均可以算是和OpenResty或多或少有些相似,好比 Nodejs, PHP 等等。ngx_openresty的性能(包括內存使用和 CPU 效率)算是最大的賣點之一。
2. Nginx的腳本擴展編程,用於構建靈活的 Web 應用網關和 Web 應用防火牆。有些相似的是NetScaler. 其優點在於 Lua編程帶來的巨大靈活性。

25.    OpenResty未來的發展方向?是否是仍是由公司的需求推進?
ngx_openresty從一開始就是公司實際的業務需求的產物。在過去的幾年中的大部分開發工做也是由國內外許多公司和我的的實際業務需求驅動的。這 種模型在實踐中工做得很是好,能夠確保咱們作的就是你們最迫切須要的。在此過程當中,慢慢造成了ngx_openresty的兩大應用方向,也就是前面提到 的那兩大方向。是咱們的用戶幫助咱們確認了這兩個方向,事實上,這並不等同於第一代OpenResty的方向,而是變得更加底層和更加通用了。

26.    你也應該知道國內基本上沒有太流行的開源項目,而國外卻有不少。可否談談你對開源的理解以及對國內外差距的見解?
開源精神的核心是分享而非追求流行。畢竟開源界不是娛樂圈,也不是時尚圈。若是咱們的開源項目有愈來愈多的人開始使用,只是一個「happy accident」,咱們天然會很高興,但這並非咱們真正追求的。
開放源碼只是開源項目生命週期中的「萬里長征第一步」,國內的許多開源項目止步於開放源碼,而沒有後續投入長期的時間和精力去跟進響應用戶的各類需求和反饋,但難免夭折。這種現象在國外的很多開源項目中也很常見。
國外成功的開源項目比較多,或許跟許多發達國家的程序員們的精神狀態有關係。好比我認識的一些國外的黑客都很是心思單純,熱情似火。他們在精神上的束縛非 常少,作起事來可能是不拘一格。有的人即使長期沒有工做單純靠抵押和捐贈過活,也會竭盡全力地投身於開源項目。而我接觸到的國內許多程序員的精神負擔通常比 較重,經濟上的壓力也比較大,天然難有「玩開源」的心思。
不過,國內也是有一些程序員擁有國外優秀黑客的素質的,並且他們經過網絡和全球的黑客緊密聯繫在一塊兒,因此咱們徹底能夠期待他們將來有挎奮人心的產出。
在互聯網時代的今天,或許按國界的劃分來討論這樣的問題會變得愈來愈不合時宜。

27.    你有沒有什麼建議給編程的初學者?以及對於新手建立本身的開源項目,你是什麼見解?
對於編程的初學者,我最主要的建議就是打開門去看世界,多經過 IRC、郵件列表等途徑和世界各國(天然也包括國內)的黑客聯結到一塊兒。和他們多溝通多交流,儘量地多和他們一塊兒經過網絡遠程協做,好比參與一些有趣的 開源項目。爲了作到這一點,也須要把英語學好。語言是交流和學習的前提。在此過程當中,把本身的功利心放下,以真誠單純的心爲開源世界乃至整個計算世界多貢 獻。
對於建立開源項目的新手,我建議必定要及時響應用戶以及其餘開發者的反饋,千萬不要止步於開放源代碼。同時多參與和關注其餘的開源項目,觀察那些比較成功的開源項目具體是如何運做的。

28.    可否給開源中國提些意見或者建議?
但願開源中國能不斷致力於開源文化和開源精神在中國的普及,包括在業界的普及以及在各高校的計算機相關專業內的普及。我以爲這纔是開源的精髓。而開放源代碼的行爲自己以及一個個具體開源項目的文檔和源碼包都只不過是形式罷了。
nginx

相關文章
相關標籤/搜索