Loading... # [Nginx Unit 初探及其性能对比分析 & 压测](https://mp.weixin.qq.com/s/nsOrp-R2ZueH11Sf2Erg0Q) 1. Nginx Unit初探 Nginx Unit是一个开源的,以Nginx为基础、支持多语言的Web服务器,它支持Python,PHP,Go等多语言应用程序,可以在不中断服务的情况下完成部署配置更改,以多种语言运行代码。而它运行多种语言的能力是基于内部路由器进程之间的隔离,路由器进程可终止传入的HTTP请求,以及应用程序进程的分组,路由器进程是持久的,不重新启动。 它具有以下特征: 使用RESTful JSON API进行动态重配置服务器; 同时支持多语言,多版本应用; 即将支持的特性有: 动态语言的进程管理功能; TLS支持; TCP,HTTP,HTTPS,HTTP/2路由和代理。 下面我们以一个简单的php-test应用为例介绍nginx unit的安装和使用。 2. 安装Nginx Unit 以centos 6.9为例。 创建/etc/yum.repos.d/unit.repo。 1[unit] 2name=unit repo 3baseurl=https://packages.nginx.org/unit/centos/$releasever/$basearch/ 4gpgcheck=0 5enabled=1 开始安装 1# yun install unit 3. 配置和运行 每个单独的应用,都可以在NGINX Unit的配置文件中,使用JSON语法来定义一个applications。下面以配置一个应用为例,名为php-test,该应用的本地路径为/data0/www/htdocs/nginxUnit/。 首先,我们创建一个目录并进入相应目录。 1# cd /data0/www/htdocs/nginxUnit/ 在该目录下创建一个index.php文件用于测试。 1<?php 2echo "hello world"; 3?> 在/data0/www/htdocs目录下创建一个名为phpConfig.json的配置文件。 1{ 2 "listeners": { 3 "*:8100": { 4 "application": "php-test" 5 } 6 }, 7 "applications": { 8 "php-test": { 9 "type": "php", 10 "processes": 20, 11 "root": "/data0/www/htdocs/nginxUnit", 12 "index": "index.php" 13 } 14 } 15} 该配置文件包含一个监听器和应用配置。当应用被通过HTTP访问时,须定义至少一个监听器 listeners。监听器是一个IP地址和一个被定义的端口,当用户访问时,Unit的监听器会返回正确的结果,IP地址可以是一个完整的IP地址(如127.0.0.1:8100)或(*:8100)。 在命令行执行如下命令来创建一个应用php-test 1# curl -X PUT -d @/data0/www/htdocs/phpConfig.json --unix-socket /var/run/control.unit.sock http://localhost 成功配置后会出现如下提示 1# curl -X PUT -d @/data0/www/htdocs/phpConfig.json --unix-socket /var/run/control.unit.sock http://localhost 2{ 3 "success": "Reconfiguration done." 4} 这时可以访问http://localhost:8100/ 查看index.php的程序是否正常运行。 至此我们的环境搭建和应用配置已经完成。 4. 性能对比 接下来我们进行性能对比分析。将Nginx Unit与我们现在使用的tengine+php-fpm进行对比分析。 在进行分析之前,介绍下基本环境。 CPU:1核 内存:4G 操作系统:Centos 6.9 php版本:7.0.6 nginx unit 的部分参数配置 1"listeners": { 2 "*:8100": { 3 "application": "php-test" 4 } 5 }, 6 "applications": { 7 "php-test": { 8 "type": "php", 9 "processes": 20, 10 "root": "/data0/www/htdocs/nginxUnit", 11 "index": "index.php" 12 } 13 } tengine +php-fpm 的部分参数配置: 1[unit.local] 2user = www 3group = www 4listen = 127.0.0.1:9008 5listen.allowed_clients = 127.0.0.1 6pm = static 7pm.max_children = 20 8pm.start_servers = 1 9pm.min_spare_servers = 1 10pm.max_spare_servers = 32 11pm.max_requests = 1500 12pm.status_path = /h3_monitor 13slowlog = /data0/www/logs/$pool-slow_log 14request_slowlog_timeout = 3 15request_terminate_timeout = 20 16catch_workers_output = no 17security.limit_extensions = "" 压测参数:每个压测指令指令10次,取10次qps值的平均值作为最后的统计数据。 压测指令: [root@lianjia ~]# ab -n 10000 -c 100 http://127.0.0.1:8100/ [root@lianjia ~]# ab -n 10000 -c 100 http://unit.local/ [root@lianjia ~]# ab -n 10000 -c 50 http://unit.local/ [root@lianjia ~]# ab -n 10000 -c 50 http://127.0.0.1:8100/ [root@lianjia ~]# ab -n 1000 -c 50 http://127.0.0.1:8100/ [root@lianjia ~]# ab -n 1000 -c 50 http://unit.local/ 压测结果: 图片 每行的的后两列数据是Requests per second和Time per request服务器平均处理时间值。Requests per second是总时间除以总请求数的值,也就是我们平常所所的QPS值,QPS值越高表明服务器处理请求数越高,性能越好。Time per request是服务器平均处理时间,值越小表示服务器处理速度越快。 分析这三行数据: 1.在并发请求参数相同均为50的前提下,压测请求总数设置为1000和10000两种情况时,发现相同并发数时,压测请求总数越高,其QPS值相对越高,服务器处理速度相对越快,tengine+php-fpm和nginx+unit均是如此; 2.对比tengine+php-fpm和nginx+unit在并发请求总数50,压测请求总数10000时,nginx+unit的QPS值高于tengine+php-fpm的91%;服务器平均处理时间也是快87.5%; 综上:Nginx+Unit在纯文本输出中的QPS值和服务器平均处理时间是明显高于tengine+php-fpm组合的.其动态化的配置方式也是为未来创造无限可能。 最后修改:2023 年 08 月 22 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏