我今天测试的workmanQPS(10w+)这么离谱吗(本地压测结果)

2023-06-08: 最近一段时间改造了一下gin中记录日志的方式,用了异步日志,响应能力大幅提升(1w->7w),这种设计/架构层面的影响还是很猛的呀。本来也想改造一下php中,不过目前没有找到合适的方法,php中没有异步写入的方法。网络请求相关的可以采用异步,但是文件写入没有异步的途径,最多也只是 monolog 中的集中写入。相比入异步写入可以提升的程度还是相对有限的。也不知道有没有其他同学有什么方案优化。


很久没关注 workman 了。昨天一个好友提了一下 workman ,然后看到 workman 官网的压测排行,就装了跑一下。我是没想到跑了 10w qps。

我用的 macbook pro m1 16/256 测试的。
php是brew直接装的 php7.4 。

印象中本机跑到10w上的只有 fasthttp 。 rust 和 java 的试了几个都没有跑到10w过。

语言版本 框架 附加条件 qps
go1.17 fasthttp - 15w+
go1.17 gin - 9w+
go1.17 iris - 8~9w+
php7.4 webman - 10w+
go1.17 fasthttp sqlite 3w+
go1.17 gin sqlite 3w+
php8.0 webman sqlite 5w+
go1.17 fasthttp log(一次请求10条log) 1.6w+
php8.0 webman log(一次请求10条log) 1.7w+
go1.21 gin log(10条)异步日志 7w+

gin+异步日志
我今天测试的workmanQPS(10w+)这么离谱吗(本地压测结果)

workman php7.4
我今天测试的workmanQPS(10w+)这么离谱吗

iris go 1.17
我今天测试的workmanQPS(10w+)这么离谱吗

gin go 1.17
我今天测试的workmanQPS(10w+)这么离谱吗

fasthttp go 1.17
我今天测试的workmanQPS(10w+)这么离谱吗

因为之前跑的 spring 和 actix-web 并不是多高。我就不在这贴出来了。不过 workman 跑的这个成绩我是挺吃惊。 欢迎大家讨论一下。


下午增加测试(下午的为 php8 下测试,其他不变)

fasthttp + db (gorm/sqlite)
我今天测试的workmanQPS(10w+)这么离谱吗

gin + db (gorm/sqlite)
我今天测试的workmanQPS(10w+)这么离谱吗

webman + db (default/sqlite)
我今天测试的workmanQPS(10w+)这么离谱吗
…. 不清楚为什么这个这么离谱

fasthttp + + 10log/q (每次请求记录10条log)
我今天测试的workmanQPS(10w+)这么离谱吗
风扇响了不知道有没有影响

webman + + 10log/q (每次请求记录10条log)
我今天测试的workmanQPS(10w+)这么离谱吗

我今天测试的workmanQPS(10w+)这么离谱吗

还挺稳定,而且性能上我是没想到纯php跑出来的成绩竟然和go在web api上不分伯仲。看到这个结果我是对手上的go代码陷入了深思:anguished:

顺便补一个 php 和 go fbnq 数列的计算对比吧
(win11 php8/go1.17 i7-8565U )

这里还有一个斐波那契数列递归,在数学运算上,go 和 php 不是一个量级 ,斐波那契数列对比。因为递归的斐波那契数列的时间复杂度是 n^2 所以在这种场景 php 未来还有很大进步空间。

语言 斐波那契数列递归所求第n个 时间 备注
GO 46 4S+ -
PHP 33 3S+ 由于该场景下php表现与go差异较大,所以减少php求的

php 和 go 的字符串对比

语言 字符串拼接 时间 备注
php . 拼接 5000000 次 3s+ -
go + 拼接 100000 次 27s+ 因为 go + 的拼接速度实在是太慢了,所以减少循环次数
go buf.WriteString 拼接 5000000 次 0.003s+ -

我今天测试的workmanQPS(10w+)这么离谱吗(本地压测结果)

我今天测试的workmanQPS(10w+)这么离谱吗(本地压测结果)

php 字符串拼接 5000000 次

我今天测试的workmanQPS(10w+)这么离谱吗(本地压测结果)

go 用 + 进行字符串拼接 100000 (是上面的1/50次但是用时是上面的几十倍),(如果想要快一点go要用 bytes.Buffer
我今天测试的workmanQPS(10w+)这么离谱吗(本地压测结果)

go 用 buf.WriteString 处理字符串
我今天测试的workmanQPS(10w+)这么离谱吗(本地压测结果)

尺有所短,寸有所长

biubiubiu
本帖已被设为精华帖!
本帖由系统于 5个月前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 37

可惜没有多少人维护

2年前 评论
JaguarJack 2年前
滚球兽进化 (楼主) 2年前

hyperf swof 现在都能做到10w qps

2年前 评论
滚球兽进化 (楼主) 2年前
失色天空 2年前

试下fiber

2年前 评论
滚球兽进化 (楼主) 2年前

大佬测试一下 laravel + Roadrunner 这个呗!~ :+1:

2年前 评论
滚球兽进化 (楼主) 2年前

file 这个好像弄错了,gin 没业务逻辑9w QPS,加了sqlite不应该还是9w QPS

2年前 评论
滚球兽进化 (楼主) 2年前
李铭昕

其实单看性能,PHP一点都不差,至少对90%的公司来说。

开发速度,PHP绝对比 Go Java 一类快多了,所以中小公司,没有超高并发的场景,PHP 是完全可以胜任的。

不过 webman 能这么高的 qps 也是有原因的。。。

2年前 评论
jcc123 2年前
liziyu 2年前
kolin 2年前

php 7.4 webman + db (default/sqlite):
这项测试为啥会出现,User 文件正在reloading …. 你没有关闭监控文件那个进程?
出现这个提示,一般只有项目文件夹有文件更新,子进程给主进程发送了reload 信号。

关闭monitor 进程,就不会出现这个提示:
Laravel

建议:关闭这个进程,重新在测试一下!或许性能会更加高呢。

2年前 评论
滚球兽进化 (楼主) 2年前
Epona

实际用户 就2个在线, 有那么高的 qps 有啥用.jpg 😂

挑选合适的,顺手的工具就完事了。 不要迷信性能测试

2年前 评论

之前在b站看一个up测fiber qps也是挺高的 但还是比rust差一点

2年前 评论
滚球兽进化 (楼主) 2年前
方向感 2年前
滚球兽进化 (楼主) 2年前
GDDD

我感觉这样的测试没啥意义,说明不了什么

2年前 评论
滚球兽进化 (楼主) 2年前
哪吒的狗腿子 2年前
FlyingFish_1992 2年前

webman还是很强悍的

2年前 评论

workman,swoole 很棒的,感觉市面上百分之85的公司做业务是ok的,定时器,分布式,性能,websocket,push

2年前 评论

laravel怎么和workman结合做websocket应用,我看laravel文档的广播那节提到了laravel-websockets库,那个的性能是不是不如workman?

1年前 评论
滚球兽进化 (楼主) 1年前
williamQian (作者) 1年前
滚球兽进化 (楼主) 1年前

github 源码链接放一下 ?

1年前 评论
滚球兽进化 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!