基于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 性能小测试的主要内容,如果未能解决你的问题,请参考以下文章

基于Docker环境下的Jenkins搭建及使用

php swoole基础-swoole的安装与升级

基于华为CCE环境下的Tomcat性能调优实践

Linux下的docker容器安装教程

基于 docker-compose 环境变量将文件添加到 docker 容器

docker安装步骤及基于docker容器部署web应用LNMP服务器环境