vlambda博客
学习文章列表

NGINX Unit:来看NGINX作者又一神作

Unit,已经出道好几年

Unit是NGINX作者Igor Sysoev亲自设计,NGINX团队核心人员开发的,发布第一个版本是2017年。有着活跃的社区和专业的开发能力,我有幸成为其中正式一员。

Changes with Unit 1.24.0   27 May 2021......Changes with Unit 0.1      06 Sep 2017 *) First public release.

Unit 现代应用服务器软件

NGINX Unit:来看NGINX作者又一神作结合此图看Unit,以下是它的核心功能

配置:完全动态,包括进程数、服务监听端口、证书等。

路由:灵活并且强大的路由功能,它会成为微服务的杀器功能。

语言:支持各种主流语言和版本,这对DevOps太友好了。

文件:支持静态资源服务,并且更好用。

代理:目前只有简单的轮循,成为完整的负载均衡只是时间问题。

容器:目前拥有隔离功能,一直在挑战做容器的事情。


NGINX,全球头号Web服务器软件

NGINX Unit:来看NGINX作者又一神作

2004年Igor Sysoev开源了NGINX,本来只是个人的兴趣而已,没想到2021年NGINX正式超越Apache,成为全球头号Web服务器软件,并且这个趋势看着会一直持续下去。

20年前的计算机体系架构跟现在相比已经发生非常大的变化,NGINX从最早版本到现在最核心的代码几乎没有变过。客观讲NGINX的架构已经非常优秀了,也说明年轻时的Igor已经具备非常强的设计和编码能力。

然而深谙NGINX源码的开发者仔细思考的话,会发现NGINX最大的问题就是动态能力不够。比如reload需要创建新的进程,这对长连接服务是没法忍受的,当然通过其它方式已经有成熟的解决方案。比如不能修改头部等,也可通过其它方式解决。这些的本质还是架构和数据结构设计的问题,放在10多年前这些都不是问题,互联网没有今天这么复杂。

得益于NGINX的模块化,NGINX的生态发展如此迅速,反过来看也正是因为模块化,限制了NGINX的重构机会,因为第三方模块依赖了NGINX的API。这也是Igor多年来一直在思考解决的问题。NGINX Unit就这样出现了。


Unit,更好的架构设计
Unit跟NGINX是两个完全独立的软件,没有人比NGINX团队更清楚哪些设计更需要改进。Unit内部引入了level hash,动态内存池,动态共享内存等。得益于这些基础数据结构,Unit解决了动态的问题,彻底放飞了。

NGINX Unit:来看NGINX作者又一神作

架构图


Unit高性能

NGINX团队最拿手的就是开发高性能软件,Unit的低延迟非常优秀,让它可以处理更多的请求。还有不得不提它的低内存消耗。


纯应用

NGINX Unit:来看NGINX作者又一神作
NGINX+应用

NGINX Unit:来看NGINX作者又一神作

纯Unit

NGINX Unit:来看NGINX作者又一神作

                               读取时间  处理时间   响应时间


https://itnext.io/performance-comparison-between-nginx-unit-and-uwsgi-python3-4511fc172a4c


Unit稳定吗? 稳定

NGINX社区的风格就是开发出来的东西都是产品级别的,虽然目前Unit功能相对较少,但发布出来的都是稳定可用的。


Unit更简单好用

以wordpress为例,只需一个Unit软件就行。以下是它的配置。

{ "listeners": { "*:80": { "pass": "routes"        }    }, "routes": [ { "match": { "uri": [ "*.php", "*.php/*", "/wp-admin/" ]            }, "action": { "pass": "applications/wordpress/direct" } }, { "action": { "share": "/path/to/app/", "fallback": { "pass": "applications/wordpress/index" } } }    ], "applications": { "wordpress": { "type": "php", "targets": { "direct": { "root": "/path/to/app/"                }, "index": { "root": "/path/to/app/", "script": "index.php" } } } }}


目前用Unit可以做什么

假如你想做应用服务器,所有主流语言都可以跑在Unit上面,更好用性能更高。已经完全是产品级别的。"hello Unit, byebye {php-fpm, etc}"

其它功能像文件服务,代理等比较简单,适合做开发使用。


Unit未来可期

Unit背后有强大的团队,它是NGINX作者亲自设计,NGINX核心团队开发的,相信Unit未来大有可为。


官方资料

文档:http://unit.nginx.org

代码:https://github.com/nginx/unit

计划:https://github.com/orgs/nginx/projects/1


微博交流

https://weibo.com/5271531443/KlgeXaMUZ