关于grpc:gRPC-PHP与GO-数据增长性能测试与分析

前言

大家好,我是CrazyCodes,最近调研了下对于PHP通过gRPC申请go,与PHP通过HTTP形式申请,依据数据量一直增长的状况下,均匀响应工夫会有多大差距。

一致性申明

测试报告全副由开发机测试得出,未进行任何配置更改。

本机配置

  • 3 GHz 六核Intel Core i5
  • 16 GB 2400 MHz DDR4
  • MacOs

Go启动HTTP

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≈87bytes
Http Document Length≈315bytes

Go Grpc -> Go Grpc 均匀响应工夫为66.215ms

Php Grpc -> Go Grpc 均匀响应工夫为190.551ms

Php Http -> Go Http 均匀响应工夫为120.692ms

GPH 20

返回数据集大小统一

gRPC Document Length≈556bytes
Http Document Length≈2198bytes

Go Grpc -> Go Grpc 均匀响应工夫为71.525ms

Php Grpc -> Go Grpc 均匀响应工夫为212.019ms

Php Http -> Go Http 均匀响应工夫为138.332ms

GPH 200

返回数据集大小统一

gRPC Document Length≈5527bytes
Http Document Length≈21199bytes

Go Grpc -> Go Grpc 均匀响应工夫为93.963ms

Php Grpc -> Go Grpc 均匀响应工夫为250.104ms

Php Http -> Go Http 均匀响应工夫为175.916ms

GPH 2000

返回数据集大小统一

gRPC Document Length≈56928bytes
Http Document Length≈213000bytes

Go Grpc -> Go Grpc 均匀响应工夫为379.699ms

Php Grpc -> Go Grpc 均匀响应工夫为678.643ms

Php Http -> Go Http 均匀响应工夫为593.252ms

GPH 5000

返回数据集大小统一

gRPC Document Length≈143928bytes
Http Document Length≈534000bytes

Go Grpc -> Go Grpc 均匀响应工夫为920.897ms

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以gRPC的形式申请是最不现实的状况,而PHP以Http形式调用在响应工夫来看,要比PHP以gRPC调用的形式略微现实一些,但数据与并发一直增长的状况下,这个差距会一直变大,所以在决定应用PHP作为客户端时,还是以传统HTTP形式调用成果最佳。

挽尊

你必定认为,PHP在做微服务上曾经被碾压,但这其实并不是PHP自身的谬误,咱们都晓得PHP是解释型语言,而Go是编译型语言,Go作为事后编译后,间接生成可执行文件,而PHP是动静编译。

那么在PHP通过gRPC调用为什么会这么慢?这取决于咱们应用的谷歌官网提供的包,这个包将数据封装在class内,而class并不像Go的构造体那么小巧玲珑,当数据一直增长后,这个class会指数级扩充,而咱们看到PHP通过HTTP调用时,尽管内容体是gRPC调用的好几倍,但工夫反而变小,这其中的起因也很简略,通过HTTP调用,先要进行通信,并且封装HTTP头,内容体等等,这就造成了申请本体很大,但因为是间接申请一个后果,并没有通过class,所以工夫要低于gRPC调用,这是PHP应用gRPC慢的起因之一。

其二就是咱们所说的PHP自身的个性,PHP通过动静编译后向用户返回后果,这个过程也是须要工夫的,而Go则不须要这段时间,所以这也是影响响应工夫的关键因素。

致谢

感激你看到这里,心愿能够帮到你。

首次公布此类剖析相干文章,可能有很多不足之处,承受各种调教。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理