一文看透NGINX生态城
397 次浏览
发表于 2020-10-24 18:34

俄罗斯人Igor Sysoev于2004年创建了NGINX并将其开源。如今全球超过25%的网站选择NGINX作为web服务器。尤其对高并发网站来说,NGINX已成为首选。本文将全面探讨整个NGINX的生态。


时间线


NGINX自1995年Apache横空出世以来,几乎成为web服务器的标配,一家独大。系统管理员出身的Igor Syeoev却创建了他强烈个人风格的开源软件。核心代码行数小到5万行不到。

Lua 这里我特别把lua标出来,是因为如今Lua已经成为NGINX的标配,得益于OpenResty。Lua是巴西3个有明显数学特点的人创建的小型语言。时至今日,可以说Lua是与C语言结合最好的语言,没有之一。Lua5.1在其发展史上是一个非常重要的分水岭,但是其性能跟后面的LuaJIT和官方的Lua5.4比,有一定的差距。这也是为什么会有LuaJIT的出现。但是LuaJIT只支持Lua5.1的语言,看着也没有跟进后面版本的计划,这就变成了另一个完全独立的东西,类似tengine之于NGINX。GC一直是脚本语言最重要的特性,Lua5.2, 5.3, 5.4的GC实现一直在进化。国内的Lua骨灰级专家@云风,对Lua5.4有不错的反馈。这个版本应该也是Lua性能最好的一个版本了。


Tengine阿里在NGINX的发展上做出了非常独特的贡献。虽然到了2012年NGINX才真正有了自己的商业公司,但是在2015年之前,相对于如今应用需求这么丰富的背影下,NGINX本身的功能还是偏弱的。在2011年,Tengine fork了NGINX,明显在运维使用方面做了自己独有的改进。


OpenResty 2012年,@agentzh开源了以lua为嵌入语言的模块,极大丰富了NGINX的应用处理能力。它早期支持Lua5.1和LuaJIT,如今已经只支持LuaJIT,并且LuaJIT由OpenResty维护。OpenResty贡献了NGINX生态里最重要的模块,也是最成功的生态。


NGINX时间前进到2015年,NGINX看着开始发力了,不管是软件本身,还是其周边的。支持了stream模块,之前有@yaoweibin tcp proxy module;支持了spdy/http2,这其中google和cloudflare贡献了很大的力量;支持了TLS 1.3;支持更多AIO特性;支持线程池;等等。与此同时,这对Tengine来说,怎么跟进官方是个问题。OpenResty倒是没这方面问题,从一开始他的设计就是不入侵NGNIX源码。


NJS 
也是2015年,Igor亲自实现了NJS,一个纯C的JS引擎。不得不说他的代码能力真是硬核。我也有幸成为其中的开发者。Igor实现了ECMAScript 5.1,但现在主流的JS是ECMAScript 6。初期只有他一人开发,实现了非常小的JS子集。后面由@xeioex接手,Igor帮忙Review。对开发者来说,模块化可以说是语言里必不可少的,我也是因为这个需求贡献了NJS的模块化机制实现,后面就上了这条船。目前又加入了一个很有经验的开发者。这也是NGINX的团队风格,人非常少,但是代码质量要求非常高。


Kong 这几年,API网关呼声越来越高。2018年出现的Kong应该是市面上最有份量的API网关之一。

APISIX2019年,不到两年的APISIX以轻量级受很多人的欢迎,目前在Apache基金组里,未来可期。


nginx-lua-module 本文作者的模块,支持官方Lua5.4语言。NGINX在直播领域也有它的位置,nginx-rtmp模块作者@arut本身是流媒体的专家。Python是他的个人喜欢的语言。在2016年,他开源了nginx-python模块,其优秀的设计很值得学习。目前他也是以njs为主的nginx-js-module的负责人。nginx-lua-module很大程度上借鉴了nginx-python和njs个人始终觉得官方Lua语言应该纳入NGINX的生态里,我相信进化的力量,这语言一直保持活跃和进化。以同社区的极致简单风格维护这个模块。

utopia lua实现的API网关框架,1K行左右。


关系网



[lua] https://www.lua.org

[Lua 5.4 的改进及 Lua 的版本演进] https://blog.codingnow.com/2018/04/lua_54_nil_in_table.html

[nginx] http://nginx.org

[tengine] https://github.com/alibaba/tengine

[openresty] https://github.com/openresty/lua-nginx-module

[njs] https://github.com/nginx/njs

[kong] https://github.com/Kong/kong

[apisix] https://github.com/apache/apisix

[nginx-python-module] https://github.com/arut/nginx-python-module

[nginx-lua-module] https://github.com/hongzhidao/nginx-lua-module





如果您觉得不错,就打赏支持一下吧〜
已有 0 人进行打赏
发表评论
发表者

洪志道

NGINX官方团队成员

  • 11

    文章

  • 1

    关注

  • 40

    粉丝

活动推荐
版权所有©F5 Networks,Inc.保留所有权利。京ICP备16013763号-5