我今天测试的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

webman还是很强悍的

2年前 评论

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

2年前 评论

可惜没有多少人维护

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年前

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

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

github 源码链接放一下 ?

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

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