InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

Nginx Unit 初探及其性能对比分析

  • 2019-09-23
  • 本文字数:2305 字

    阅读完需:约 8 分钟

Nginx Unit初探及其性能对比分析

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 repo3baseurl=https://packages.nginx.org/unit/centos/$releasever/$basearch/4gpgcheck=05enabled=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<?php2echo "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://localhost2{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 = 110pm.max_spare_servers = 3211pm.max_requests = 150012pm.status_path = /h3_monitor13slowlog = /data0/www/logs/$pool-slow_log14request_slowlog_timeout = 315request_terminate_timeout = 2016catch_workers_output = no17security.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 组合的.其动态化的配置方式也是为未来创造无限可能。


作者介绍:


张林林,2017 年校招进入贝壳找房,现任职 PHP 研发工程师,负责移动端 API 研发工作。


本文转载自公众号贝壳产品技术(ID:gh_9afeb423f390)。


原文链接:


https://mp.weixin.qq.com/s/nsOrp-R2ZueH11Sf2Erg0Q


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2019-09-23 08:002014

评论

发布
暂无评论
发现更多内容

企业内容管理升级 3.0:构建生态协同,助力合规成长

风来兮

软件 电子档案 OCR 合规 #人工智能

国产化适配再进一步,融云完成欧拉、TDSQL、优炫等多方适配

融云 RongCloud

开源 运维 信创 融云 适配

提升UE5写实效果的项目设置

3DCAT实时渲染

虚幻引擎5 UE5

PoseiSwap 更新第二期空投,持有 Zepoch 节点数量将决定空投回报

石头财经

手把手教学构建证券知识图谱/知识库(含码源):网页获取信息、设计图谱、Cypher查询、Neo4j关系可视化展示

汀丶人工智能

人工智能 自然语言处理 nlp 知识图谱

区块链生态架构 | 社区征文

TiAmo

区块链 Baas 年中技术盘点

拥抱抑郁,制心一处,一切美好是深度投入的产物

B Impact

深入解析Redis的LRU与LFU算法实现

vivo互联网技术

redis LRU LFU

PoseiSwap 更新第二期空投,持有 Zepoch 节点数量将决定空投回报

EOSdreamer111

PoseiSwap 更新第二期空投,持有 Zepoch 节点数量将决定空投回报

鳄鱼视界

为什么多数企业的数字化转型都失败了?

优秀

数字化转型 企业数字化 企业数字化 PaaS 平台

代码随想录训练营 Day09 - 字符串(下)

jjn0703

如何优化Flutter的性能?

没有用户名丶

PoseiSwap 更新第二期空投,持有 Zepoch 节点数量将决定空投回报

威廉META

iOS上架报错:无法添加以供审核

雪奈椰子

在现场!2023世界人工智能大会

新云力量

人工智能 AI 人工智能大会

2023-07-06:RabbitMQ中的AMQP是什么?

福大大架构师每日一题

Rabbit 福大大架构师每日一题

3DCAT实时云渲染助力VR虚拟现实迈向成熟

3DCAT实时渲染

实时渲染

5个祖传的Python自动化办公项目,治愈你的抑郁

程序员晚枫

Python 微信 自动化 机器人 办公

知识图谱之《海贼王-ONEPICE》领域图谱项目实战(含码源):数据采集、知识存储、知识抽取、知识计算、知识应用、图谱可视化、问答系统(KBQA)等

汀丶人工智能

自然语言处理 知识图谱 信息抽取

中国大模型的落地DNA,写在这个双螺旋结构里

脑极体

AI

PoseiSwap 更新第二期空投,持有 Zepoch 节点数量将决定空投回报

西柚子

人脸识别技术在医疗行业的应用

来自四九城儿

Kubernetes网络模型Overlay和Underlay

Geek_b2fe7a

活动开启 | 以梦筑码 · 不负韶华 开发者故事征集令,讲出你的故事,有机会参加HDC.Together 2023

HarmonyOS开发者

HarmonyOS

PoseiSwap 更新第二期空投,持有 Zepoch 节点数量将决定空投回报

BlockChain先知

PoseiSwap 更新第二期空投,持有 Zepoch 节点数量将决定空投回报

股市老人

谈谈我这两年的前端开发经验

树上有只程序猿

一次解决三大成本问题,升级后的 Zilliz Cloud 如何造福 AIGC 开发者?

Zilliz

SaaS Milvus Zilliz zillizcloud

WIZMAP-大规模 embedding 向量的可视化交互工具

Zilliz

机器学习 深度学习 Embedding 交互式可视化工具

源码解读之FutureTask如何实现最大等待时间

EquatorCoco

源码 前端 前端工具

  • 扫码添加小助手
    领取最新资料包
Nginx Unit初探及其性能对比分析_文化 & 方法_张林林_InfoQ精选文章