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

7次阅读

共计 1934 个字符,预计需要花费 5 分钟才能阅读完成。

前言

大家好,我是 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 则不须要这段时间,所以这也是影响响应工夫的关键因素。

致谢

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

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

正文完
 0