共计 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 则不须要这段时间,所以这也是影响响应工夫的关键因素。
致谢
感激你看到这里,心愿能够帮到你。
首次公布此类剖析相干文章,可能有很多不足之处,承受各种调教。