gRPC PHP与GO 数据增长性能测试与分析
前言
大家好,我是CrazyCodes,最近调研了下关于PHP通过gRPC请求go,与PHP通过HTTP方式请求,根据数据量不断增长的情况下,平均响应时间会有多大差距。
一致性声明
【gRPC PHP与GO 数据增长性能测试与分析】测试报告全部由开发机测试得出,未进行任何配置更改。
本机配置
- 3 GHz 六核Intel Core i5
- 16 GB 2400 MHz DDR4
- MacOs
http.ListenAndServe
PHP启动HTTP
php -S 127.0.0.1:8088
Ab
ab -c 200 -n 200 -k
测试数据说明
Go作为服务端,是通过for直接迭代出的测试数据,没有任何其他多余操作
// 伪代码
for i := 0;
i < 2,20,200,2000,5000;
i++ {}
其他说明
下方GPH[数字],代表gRPC + PHP + HTTP + 数据量
GPH 2 返回数据集大小一致
gRPC Document Length≈87bytesGo Grpc -> Go Grpc 平均响应时间为66.215ms
Http Document Length≈315bytes
文章图片
Php Grpc -> Go Grpc 平均响应时间为190.551ms
文章图片
Php Http -> Go Http 平均响应时间为120.692ms
文章图片
GPH 20 返回数据集大小一致
gRPC Document Length≈556bytesGo Grpc -> Go Grpc 平均响应时间为71.525ms
Http Document Length≈2198bytes
文章图片
Php Grpc -> Go Grpc 平均响应时间为212.019ms
文章图片
Php Http -> Go Http 平均响应时间为138.332ms
文章图片
GPH 200 返回数据集大小一致
gRPC Document Length≈5527bytesGo Grpc -> Go Grpc 平均响应时间为93.963ms
Http Document Length≈21199bytes
文章图片
Php Grpc -> Go Grpc 平均响应时间为250.104ms
文章图片
Php Http -> Go Http 平均响应时间为175.916ms
文章图片
GPH 2000 返回数据集大小一致
gRPC Document Length≈56928bytesGo Grpc -> Go Grpc 平均响应时间为379.699ms
Http Document Length≈213000bytes
文章图片
Php Grpc -> Go Grpc 平均响应时间为678.643ms
文章图片
Php Http -> Go Http 平均响应时间为593.252ms
文章图片
GPH 5000 返回数据集大小一致
gRPC Document Length≈143928bytesGo Grpc -> Go Grpc 平均响应时间为920.897ms
Http Document Length≈534000bytes
文章图片
Php Grpc -> Go Grpc 平均响应时间为1406.589ms
文章图片
Php Http -> Go Http 平均响应时间为1285.640ms
文章图片
结论
Way | 2 | 20 | 200 | 2000 | 5000 |
---|---|---|---|---|---|
PHP->gRPC | 190.551/ms | 212.332 | 250.104 | 678.643 | 1406.589 |
Go->gRPC | 66.215/ms | 71.525 | 93.963 | 379.699 | 920.897 |
PHP->Http | 120.692/ms | 138.332 | 175.916 | 593.252 | 1285.640 |
挽尊
文章图片
你肯定认为,PHP在做微服务上已经被碾压,但这其实并不是PHP本身的错误,我们都知道PHP是解释型语言,而Go是编译型语言,Go作为预先编译后,直接生成可执行文件,而PHP是动态编译。
那么在PHP通过gRPC调用为什么会这么慢?这取决于我们使用的谷歌官方提供的包,这个包将数据封装在class内,而class并不像Go的结构体那么小巧玲珑,当数据不断增长后,这个class会指数级扩大,而我们看到PHP通过HTTP调用时,虽然内容体是gRPC调用的好几倍,但时间反而变小,这其中的原因也很简单,通过HTTP调用,先要进行通信,并且封装HTTP头,内容体等等,这就造成了请求本体很大,但因为是直接请求一个结果,并没有通过class,所以时间要低于gRPC调用,这是PHP使用gRPC慢的原因之一。
其二就是我们所说的PHP本身的特性,PHP通过动态编译后向用户返回结果,这个过程也是需要时间的,而Go则不需要这段时间,所以这也是影响响应时间的关键因素。
致谢
文章图片
感谢你看到这里,希望可以帮到你。
首次发布此类分析相关文章,可能有很多不足之处,接受各种调教。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 我和你之前距离
- thinkphp|thinkphp 3.2 如何调用第三方类库
- CGI,FastCGI,PHP-CGI与PHP-FPM