NGINX作者新开源软件NGINX Unit

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

黄色部分:读取时间 绿色部分:处理时间 橙色部分:响应时间

itnext.io/performance-c

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背后有强大的研发团队,它是NGINX作者亲自设计,NGINX核心团队开发的,相信Unit未来大有可为。

官方资料

文档:unit.nginx.org
代码:github.com/nginx/unit
计划:github.com/orgs/nginx/p

公众号 程序员洪志道

NGINX作者新开源软件NGINX Unit
标签: