点赞
评论
收藏
分享
举报
一文看透NGINX生态城
发表于2020-10-24 18:34

浏览 1.6k

俄罗斯人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





已修改于2023-03-09 02:06
本作品系原创
创作不易,留下一份鼓励
洪志道

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
洪志道
这家伙很懒还未留下介绍~
11
文章
0
问答
54
粉丝
相关文章
安装使用:1)安装下载ngx_trace模块并且编译nginx %./configure--add-module=/path/to/ngx_trace&&make 确保nginx二进制代码可以工作 %./objs/nginx-V 准备nginx的运行环境 %mkdirmynginx %mkdirmynginx/logs %cp-rconfmynginx/ %cp-rhtmlmynginx/ 编辑nginx配置文件nginx.conf.确保nginx以前台模式运行在单进程结构下。还要确保使用的socket端口当前用户可以使用。 daemonoff; master_processoff; ... http{ server{ li
点赞 2
浏览 1.4k
介绍 在使用markdown格式的过程中,经常需要上传图片,但是常常很复杂,image,在csdn上也很麻烦,在我有阿里云的情况下,用nginx实现我的图片服务器. 安装OpenResty OpenResty,以前用过,所以就按照文档快速安装. apt-getinstalllibpcre3-devlibssl-devperlmakebuild-essentialcurl ./configure make makeinstall 默认目录:/usr/local/openresty/ 添加配置文件 cd/usr/local/openresty/ mkdirconf/ vinginx.conf 配置文件具体内容 worker_processes1; error_loglogs/error.log; events{ worker_connections1024; } http{ server{ listen8080; location~.*.(gif|jpg|jpeg|png)${ expires
点赞 4
浏览 1.3k
Kubernetes已成为容器化应用系统受到在其生产环境中。在本博文中,我们通过NGINXIngressControllerforKubernetes 并三个指标性能测试的结果介绍 NGINX和Kubernetes 决定应用。中wrk 40Gb到。Controller静态内容NGINXWeb服务器以下的硬件计算机网络客户端1个英特尔XL71040GbEQSFP+主要节点1个英特尔XL71040GbEQSFP+辅助节点1个英特尔10GbX540AT2所用软件用 版本4.1.0,按照相关取自 版本1.4.3(包括NGINX开源版本1.15.8 版本1.13.1全OpenSSL版本1.1.0gFlannel我们运行了测试三项性能指标: ●  每秒可处理的请求数(取固定时间段内平均值)。的Controller将请求代理到上游Pod,以获取客户端请求的静态内容。静态内容是一个。每秒SSL/TLS事务(TPS) Controller支
点赞 0
浏览 915