当然最最最重要的就是性能,在使用RPC的场景下对于多个程序通讯完成业务所消耗的性能是有巨大挑战的,笔者也做了一套完整的性能测试大家可以继续往下看。
附上:
喵了个咪的博客:w-blog.cn
博文实例demo:GitHub - sunmi-OS/grpc-php-to-golang-demo
grpc官网:grpc / grpc.io
protobuf代码仓库:Releases · protocolbuffers/protobuf · GitHub
分别对以下两种场景进行测试:
GO通过一个开发一个http的api来进行rpc调用,下面称为api_client:
压测需要一个基准线作为参考
PHP直接echo 基准线是16K
go echo 基准是 20k
go echo -k 基准是74K
CPU资源消耗 363%,压力17K,相对20K基准差距3K
使用 -k 维持链接 CPU资源消耗 358%,压力28K,相对74K基准差距46K
资源消耗396%,压力3.5K,相对16K基准差距12.5K
-k 资源消耗393%,压力3.4K,相对16K基准差距12.6K
压测结果
资源消耗361%,压力8K,相对74K基准差距66K
-k资源消耗357%,压力11K,相对74K基准差距63K
资源消耗386%,压力6.8K,相对16K基准差距9.2K
更具整体结果得到以下结论:
PS:那么有没有什么方式只需要开发一次就能都支持HTTP和Grpc,PHP调用http,Go调用Grpc,因此就有了后面的Grpc-gateway的内容了