今天进行了在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,总时长和传输效率都领先。
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,相关信息可从下面网站获取: