基于docker容器环境下的php/swoole/golang 性能小测试
Posted 月明星稀稀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于docker容器环境下的php/swoole/golang 性能小测试相关的知识,希望对你有一定的参考价值。
最近在看swoole的内容,周末下了easyswoole这个框架,准备好好研究研究,当把环境都搭好之后,一时兴起,便想作一番性能的对比测试,以下是大致细节:
首先,开发环境是mac+docker,所有的运行环境都保持为docker容器环境,docker的配置没有给太高,2核1G:
接下来是测试工具,以老生常谈的ab压测工具做测试,mac os上自带了apache,可以直接运行ab工具命令:
ab -n 1000 -c 100 host
-n 是指总共请求数,-c是指并发请求数,在这里统一以1000个请求,100个并发作为测试条件
相关运行环境如下:
php:7.3.3
nginx:1.15.7
golang:1.16.6
swoole:4.5.2
laravel:5.6
1、纯php+nginx
纯php用的是一个docker环境的项目(dnmp)的入口文件index.php
可以看到纯php的每秒处理的请求数(RPS)是156左右
2、easyswoole
docker本地开发环境我是用docker-compose进行编排,因为swoole是基于php, 但无法兼容php-fpm,所以我另外起一个容器,配置方面跟php的编排大部分是一样的
然后直接docker-compose up -d 就可以运行swoole服务啦,不得不说,docker-compose真是一个好助手,一支穿云箭,千军万马来相见的感觉
成功运行easyswoole的页面:
文风似乎有点跑偏了,这是一篇测试博文,不是swoole教程呢
可以看到在php7.3+swoole4.5.2的加持下,easyswoole每秒处理的请求数达到了360左右,比纯php上升了1倍以上
3、laravel
laravel这里用的是一个后台管理项目,可以看到每秒处理的请求数只有39左右,非常的拉垮。因为laravel是一个生态非常完善的框架,也相对来说会比较臃肿,引用的文件太多了,测出来的结果也是预料之中的
4、golang(goframe+业务)
为了保证golang的测试环境和php保持一致,在这里我也用docker-compose搭建了容器化的golang:
在这里用了 github 上的一个开源项目:gf-vue-admin,基于goframe框架,在这里也是用入口文件去测试:
可以看到每秒处理的请求数是152左右,比swoole少了一倍以上,相当于纯php的性能。这个结果还是比较意外的,目前也是抱着学习的想法去了解这个项目,可能这个项目相对于无业务逻辑的demo来说算是重一点吧
还是有点不死心, golang是出了名的高性能,理应有更漂亮的数据。那我再试试gin,看看战绩如何
5、golang(gin+无业务)
首先写段简单的测试代码:
然后在docker-compose.yml中的 golang服务增加暴露8899这个端口:
再进入容器
as expected:
面对疾风吧:
众望所归,真的是马中赤兔,go中gin。可以看到每秒处理的请求数达到了612左右,比easyswoole的性能提升将近1倍,当然,这只是一个无任何业务逻辑的demo,但是,管中窥豹,可见一斑。2核1G的环境跑出这样的数据算是天花板了吧?
以上是本次性能测试的全部内容,最后想引用邓小平爷爷的一句话,无论是黑猫白猫,能抓老鼠的就是好猫。本次测试没有涉及到具体的业务场景,后端性能瓶颈其实主要是来源于数据库方面,语言层面,用哪种语言,哪种框架,哪种架构,只要能满足业务场景,就是对的。
以上是关于基于docker容器环境下的php/swoole/golang 性能小测试的主要内容,如果未能解决你的问题,请参考以下文章