51CTO专访清无:Nginx_lua的应用及性能对比

51CTO专访清无:Nginx_lua的应用及性能对比

2012-07-13 10:57 小林 51CTO.com 字号:T | Tphp

一键收藏,随时查看,分享好友!

对于Web高性能服务器上的选择,这个是不少人头痛的问题。对于Apache、lighttpd、Nginx都用他们优势,在什么状况下咱们如何去选择适合本身的Web高性能服务器,如何去搭建一个适合本身的架构环境,这个是一个很麻烦的事情。接下来,在ADC 2012(Alibaba Developer Conference 2012)大会上,51CTO记者有幸采访到了一淘数据平台与产品部技术专家——清无(花名),为咱们解读Nginx_lua的一些优点及劣势,以及在高性能服务器上的选择。前端

AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!java

对于Web高性能服务器上的选择,这个是不少人头痛的问题。对于Apache、lighttpd、Nginx都用他们优势,在什么状况下咱们如何去选择适合本身的Web高性能服务器,如何去搭建一个适合本身的架构环境,这个是一个很麻烦的事情。接下来,在ADC 2012(Alibaba Developer Conference 2012)大会上,51CTO记者有幸采访到了一淘数据平台与产品部技术专家——清无(花名),为咱们解读Nginx_lua的一些优点及劣势,以及在高性能服务器上的选择。nginx

 

王晓哲:花名清无,一淘网技术专家。任职于一淘数据部,负责量子恒道总体技术架构搭建。对海量数据处理、高性能高可用的Web服务相关技术有浓厚兴趣。程序员

清无你好,lua咱们都知道是一种嵌入式的脚本语言,而它最著名的是应用在暴雪的魔兽世界和网易的大话西游中。那么在淘宝上的应用lua主要是应用在那块?web

清无:目前在一淘网这边Nginx_lua主要应用在两块地方,一块是传统的一淘数据库量子统计店铺经,数据接口部分彻底是用Nginx_lua来作。另外一块是一淘的广告部门有一部分数据接口也使用着Nginx_lua。数据库

具个人了解,你开始接触nginx应该是2008年的。在08年时,不少高性能的WEB服务器也很是多,好比apache、lighttpd等等。这些都是高性能的开源服务器,你选择nginx是由于什么?它那方面比较吸引你?apache

清无:08的时候高性能WEB服务器除了Nginx之外其实只有lighttpd是开源的,lighttpd和Nginx比较的话有一个很明显的缺点是lighttpd的模块机制设计的很很差,lighttpd的模块机制过多的把模块自己的请求处理逻辑和底层的网络事件的处理组合在一块儿,因此不像Nginx的模块结构这么清晰,固然Nginx的模块设计很大程度上也借鉴了Apache的这种模块设计,因此这块有一个先天的优点。当时其实我最先接触lighttpd,而后Nginx出来之后,就对比它们模块结构上的差别后,以为Nginx彷佛更有优点一些。实测对于咱们这种网络I/O密集型的应用来讲,只要不是你实现的这个逻辑有多大缺陷,其实在放lighttpd或者Nginx差异不是特别大。编程

Nginx的优点你刚刚也讲了,你有没有哪nginx和其余的开源web服务器作过一些性能比较?能够跟咱们网友进行一些分析。浏览器

清无:比较的话是这样,首先架构若是有问题的话不管你实现如何它都是有问题的,因此个人比较首先在架构搭建上,每链接或者每请求单线程单进程这种服务模型,直接就被刷掉,确定不可能作到很高的服务能力。余下来清一色的都是基于RO多路**的这种结构体系,那么在这个体系上咱们才去检验这个*****,实际上拿一个IPP的请求来压测看它实现的质量如何,一般来讲这部分一旦架构体系决定之后,实测这个性能差别不是特别的大,除非说是某个特性一个实现另外一个没实现这种状况,咱们测出来的差别一般是在10%-20%上下波动而已。

lua目前最高的版本是5.2,大家如今使用的是哪一个版本?

清无:咱们如今使用的是5.1.2,后面那个是补丁号。

若是我认为它的版本越高,性能越强你认为对吗?

清无:呵呵,不太对。对于lua来讲每个版本的变化意味着它将加入新的语法元素或者变动了内部的一些实现的方式。严格意义上并不说明它的性能就好,好比对5.2和5.1来讲,无论对于环境表或者其余的一些机制的修改上面,严格的来讲他都是一种新的语言了。因此目前来讲迁移到5.2最大的障碍其实仍是5.2里面对于底层接口的这种概念的变化。由于5.1里面对于//造成隔离//方面下了不少工夫,而后使用它的全局表加环境表这种机制,可是5.2里面完全取消了全局表的概念,也取消了CU级别上一系列对环境表操做的接口,对咱们来讲确定是不能平滑的迁移到5.2,若是有这个需求的话,咱们能够作,但目前尚未看到这个需求。另一个阻碍咱们升级版本号的问题是LuaJIT,luaJIT的性能比标准的lua要高不少,因此//深层//里面咱们一般用JIT,可是luaJIT目前对lua5.2的支持并非那么紧,它目前仍是以5.1为主,因此这块我没可能较长的时间跟着luaJIT的脚步来。

据我了解lua的特色是体积小、快速、简单,做为独立编程并非它的主要使用方式,由于它不像java那样有一个完善的库,必须嵌入到其余的大型语言中才能发挥出它的并发能力和灵活性。大家目前的主语言是什么?

清无:实际上咱们是分场景,根据具体的业务场景来选择最合适的语言。对一淘数据库来讲像Java,PHP,C++和lua都用。

在个人印象中不少人仍是选择nginx+php这种组合搭配,你的选择是nginx+lua,那么nginx+lua比和php的组合优点在哪里?

清无:首先,Nginx+php之间是要有进程之间通讯的,这样以来基础的性能开销就很大。lua是嵌在Nginx进程内部的,它不须要有两套进程在那里独立工做。因此这块从结构上来讲就有决定性的优点在里面。再加上线程之间通信的时候须要大量的反序列化和序列化的工做,而后两套进程带来额外状况是更多的进程更多的切换开销,因此单机上面Nginx_php要比Nginx_lua要低不少。可是相对来讲仍然要回到咱们作什么事情上面,由于Nginx_lua目前最大的劣势就是周边的模块至关的不健全,咱们须要大量的时间来积累这些模块。php积累了十几年的时间了,若是说你对性能的要求并非那么高,个人并发数就是几十,那么你用php就是最合适的。可是若是像一淘数据的数据接口,机器数就那么一点,由于个人大量成本在MySQL集群上面,它是这块的主力,那么对外的数据接口我但愿尽量降成本,并发数又很是大,php确定是不行,那么咱们就要选择Nginx_lua。但这块的话对模块的劣势看起来不是那么大,由于它的逻辑相对来讲较为固定,咱们能够忍受这样的成本,咱们去为这个逻辑来定制一些模块。

你认为目前nginx+lua能知足你如今的需求吗?有没有尝试或寻找其余最佳的搭档?

清无:对于咱们数据接口的这部分需求是彻底能够知足的,至于其余的需求咱们还要具体发现,寻找最佳决解方案。由于在计算机行业没有一招吃遍天这种事。

做为一名技术架构师,在性能这块你认为到何处为止?仍是无止境的追求?

清无:这个要看咱们是在作生意仍是在我的事情,若是是在公司,好比在具体的事情上面,而后是一个团队协做的状况下,那么盲目的追求性能的极限是一个不合适的行为,由于你的追求是要付出相应的成本和开销的,而每每在一个企业的环境里面这个是不可容忍的。最合适的架构每每是针对你去解决问题的那个架构,而不是去追求效率最高的架构。因此咱们具体在企业里面作项目的时候,显然适可而止是最好的。盖过了你这个用户的最大需求你就不必去付出更多的精力来作,由于其余的问题有不少,你不必停留在性能这个问题上,性能只是其中的一个问题,在一个问题上不必投入太大的精力。可是,从开发人员我的的角度来讲,追求性能的极限是一个很好的想法和行为,由于开发者本身对性能极限的追求体现出对完美的追求,对于完美的追求意味着它能够从上层到底层的专研,而专研是提高我的素质最有效的动力。因此是分开来看这个问题。

你刚刚在大会上也讲了一些nginx lua的优点和劣势,能不能在这里也给咱们网友分享一些?

清无:刚才也说了一个是周边模块不完善,不健全。若是你用到的这个东西比较复杂的时候可能生产力上不去,目前Nginx_lua最适合的人员是数据接口层,以及全部的网络中间层,你须要最求并发,高性能的网络中间层。由于它自己的逻辑相对来讲比较简单,或者彻底用lua自己就能够变现出来,这个用起来收效比例是最大的。那么若是你目前要作一个复杂的WEB访问站,有大量模板要套,有大量的复杂逻辑嵌在里面,而后要访问mail要访问其余服务的话,目前来讲我以为仍是php或者其余比较成熟的语言。就咱们目前应用来讲也是这样,中间层会大量的使用lua,可是前端展示层的话要么所有移到浏览器上面用JS+模板的形式来实现,要么就是用PHP这样来作。另外的劣势就是调试的辅助工具不太多,由于高级点的php程序员会每每会使用XDebug或者其它的调试工具,能够单步调试,在线调试。跟php相比目前还欠缺这样的一个机制。到时候咱们会仿照XDebug 去实现DPT V2协议,咱们实现兼容DPT V2这样的一种机制内连到Nginx_lua里面,那样Nginx_lua也能够单步调试。到时候咱们也会分享给你们。

相关文章
相关标签/搜索