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