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 现代应用服务器软件
结合此图看Unit,以下是它的核心功能。
配置:完全动态,包括进程数、服务监听端口、证书等。
路由:灵活并且强大的路由功能,它会成为微服务的杀器功能。
语言:支持各种主流语言和版本,这对DevOps太友好了。
文件:支持静态资源服务,并且更好用。
代理:目前只有简单的轮循,成为完整的负载均衡只是时间问题。
容器:目前拥有隔离功能,一直在挑战做容器的事情。
NGINX,全球头号Web服务器软件
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解决了动态的问题,彻底放飞了。
架构图
Unit高性能
NGINX团队最拿手的就是开发高性能软件,Unit的低延迟非常优秀,让它可以处理更多的请求。还有不得不提它的低内存消耗。
纯应用
NGINX+应用
纯Unit
读取时间 处理时间 响应时间
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