Rust编写的HTTP服务器性能竟然远超Nginx
今天进行了在HTTP服务器上的性能对比测试,Rust的性能竟然是Nginx的两倍,真是震惊到我了。。。。
自从两个月前我在gitee上发布了开源HTTP服务器软件Module Proxy后,一直没来得及进行性能的压力测试,今天得空补上这一环。
测试环境
工作笔记本,AMD锐龙处理器 R7 4800U,8核16线程。主操作系统 windows10,虚机安装CentOS7,分配4核CPU。
测试客户端:apache ab 程序,运行在宿主机windows上。
测试对象:Nginx 和 Module Proxy 两款HTTP服务软件, 运行在虚机Linux上,按默认安装配置启动服务。
测试计划
进行静态html的压力测试,测试的html文件大约1K字节。
分别用ab进行10万次的压力测试,测试进行三轮,配置不同的并发线程数:
ab -n 100000 -c 1 http://192.168.152.128/test.html #无并发
ab -n 100000 -c 5 http://192.168.152.128/test.html #并发5线程
ab -n 100000 -c 10 http://192.168.152.128/test.html #并发10线程
记录测试总时长,每秒传输字节数,CPU使用量三个参数。
测试结果
Nginx | Module Proxy | |||||
总时长(秒) | 传输效率(Kbytes/sec) | CPU使用量 | 总时长(秒) | 传输效率(Kbytes/sec) | CPU使用量 | |
1线程 | 172.4 | 802.70 | 10% | 205.5 | 611.18 | 44% |
5线程 | 65.4 | 2117.48 | 24% | 30.7 | 4096.63 | 140% |
10线程 | 71.0 | 1950.02 | 19%~29% | 26.1 | 4808.24 | 160% |
Nginx在单线程时性能领先Module Proxy,总时长和传输效率都领先。
5线程并发,Module Proxy差不多比Nginx快两倍。
10线程时,已超出了Nginx的性能上限,CPU使用量在19%~29%之间跳跃,这时Nginx已不在线性工作区间内,因此性能还不如5线程并发;而Modue Proxy仍体现了良好的线性,两者之间的性能对比已无多大意义。
结论分析
Nginx一直以高性能著称,测试结果确实震惊了我。
Module Proxy是Rust语言开发的HTTP服务软件,除了Rust本身不弱于C语言的性能外,取得如此成绩主要是使用了事件驱动的非阻塞I/O库Tokio。Tokio是基于多线程,由操作系统的事件队列(epoll,kqueue,IOCP等)支持的任务调度库,Tokio也是Rust编程语言编写的,它本身就非常快。
Module Proxy 不仅仅能搭建静态HTTP网站,最大特点是反向代理,能将HTTP代理转发为Socket,相关信息可从下面网站获取:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构