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

相关文章
相关标签/搜索