5

NGINX作者新开源软件NGINX Unit

 2 years ago
source link: https://blog.p2hp.com/archives/8219
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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.
v2-509f19499f219c3c0c410dd7817b1331_720w.jpg

Unit 现代应用服务器软件

v2-91ec73f880830a311a0e369cf4de22dd_720w.jpg

结合此图看Unit,以下是它的核心功能。

配置:完全动态,包括进程数、服务监听端口、证书等。
路由:灵活并且强大的路由功能,它会成为微服务的杀器功能。
语言:支持各种主流语言和版本,这对DevOps太友好了。
文件:支持静态资源服务,并且更好用。
代理:目前只有简单的轮循,成为完整的负载均衡只是时间问题。
容器:目前拥有隔离功能,一直在挑战做容器的事情。

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

v2-a65e4470353f078624eb7117f15eac37_720w.jpg

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解决了动态的问题,彻底放飞了。

v2-c3fb2b2bcde176ab26b4304438132c88_720w.jpg

Unit高性能

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

v2-4ddc4ec9bd9b537fc4c80661078da5d1_720w.png

NGINX+应用

v2-f1aca63ffbd50f2d1642cccdc19cf2d3_720w.png

纯Unit

v2-d0b82c6fcee4b278d01d60763718945c_720w.png

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

v2-8e27c48ef8756ab83279a76f3e4bf95e_720w.jpg
v2-7feca5f4212bc4a4dcacb64af92b2be7_720w.jpg

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

官方资料

文档:http://unit.nginx.org
代码:https://github.com/nginx/unit
计划:https://github.com/orgs/nginx/projects/1

公众号 程序员洪志道


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK