OpenResty 作者章亦春訪談實錄


【軟件簡介】

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

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

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

 因為 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.    能否給開源中國提些意見或者建議?
希望開源中國能不斷致力於開源文化和開源精神在中國的普及,包括在業界的普及以及在各高校的計算機相關專業內的普及。我覺得這才是開源的精髓。而開放源代碼的行為本身以及一個個具體開源項目的文檔和源碼包都只不過是形式罷了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM