厌伴老儒烹瓠叶,强随举子踏槐花。这篇文章主要讲述基于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教程呢
【基于docker容器环境下的php/swoole/golang 性能小测试】
文章图片
可以看到在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的环境跑出这样的数据算是天花板了吧?
以上是本次性能测试的全部内容,最后想引用邓小平爷爷的一句话,无论是黑猫白猫,能抓老鼠的就是好猫。本次测试没有涉及到具体的业务场景,后端性能瓶颈其实主要是来源于数据库方面,语言层面,用哪种语言,哪种框架,哪种架构,只要能满足业务场景,就是对的。
推荐阅读
- 如何请求一个需要登陆才能访问的接口(基于cookie)——apipost
- 超使用的15个前端小知识点
- 如何分解XP设备管理器应用技巧3则
- 分享系统无法浏览页面的原因及解法
- 如何处理系统自动重启的几大原因以及处理办法
- 设置Windows隐形密码 隐秘登录双系统
- 用好系统命令 对系统变化明察秋毫
- 教你如何拒绝木马读取你的硬盘
- 高手支招硬盘分区成RAW格式无法访问的处理法