在Go中对gRPC+ProtoBuf与Http+Json进行基准测试

本文为译文 作者: ALEX PLIUTAU 原文地址: http://pliutau.com/benchmark-grpc-protobuf-vs-http-json/

服务之间通信的最简单的解决方案是使用JSON over HTTP。尽管JSON具有许多明显的优点(比如它具有很好的可读性,易于理解,且通常性能良好),但它还是有一些问题的。在局域网内的数据交互,Google的Protocal Buffer这种结构编码是比JSON更好的选择。

gRPC默认使用protobuf,它更快,因为它是二进制的且是类型安全的。我编写了一个演示项目,使用JSON over HTTP与使用gRPC API的方式进行了一次基准测试。

该库包含2个相同的API:基于Protobuf的gRPC和JSON over HTTP。目的是进行两种方式的基准测试,并对结果进行比较。API只包含一个创建用户的接口,请求(Request)的过程包含验证的步骤。在2种方式的程序中,请求、验证和响应这几个步骤都是相同的,所以我们只是测试整个响应过程。当然,基准测试还包括响应解析。

我使用Go 1.9,结果表明,gRPC性能是JSON over HTTP的10倍:

BenchmarkGRPCProtobuf-8          10000        197919 ns/op
BenchmarkJSONHTTP-8               1000       1720124 ns/op

CPU使用情况比较

重新启动应用程序,我使用性能测试工具pprof对API服务器进行了30秒的请求,命令行如下:

go tool pprof http://localhost:6060/debug/pprof/profile
go tool pprof http://localhost:6061/debug/pprof/profile

我每次运行pprof后使用top中查看CPU使用情况,结果显示,Protobuf的资源消耗较少,是Http消耗资源的的70%。

自己测试一下

如果要自己测试,可以复制此库https://github.com/plutov/benchmark-grpc-protobuf-vs-http-json的代码并运行:

glide i
go run grpc/main.go
go run json/main.go
go test -bench=.

结论

很明显,在内部网络通讯时最好是使用gRPC,客户端调用将更加简洁,您不必担心数据的序列与反序列化,因为这些gRPC都为您提供了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏电光石火

jenkins配置多job执行

4624
来自专栏kalifaの日々

开启用Python3自带的服务器,CGI将Python用于web

网上大多数教程都给出了如下的开启服务器命令: BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPReq...

4429
来自专栏编程

Python加圣诞帽

01 ? 前段时间好多人@官方微信许愿说要给自己的头像加圣诞帽,总觉得不太可靠,不晓得最后是PS的还是在微信小程序里搜索圣诞头像给自己戴的,嘿嘿~ 之前在Git...

24910
来自专栏Django Scrapy

scrapy 和 requetsts+beautifulsoup的差别

本质:scrapy是库 requetsts+beautifulsoup是库 两种事物集 ? 技术选型 网页的分类 ? 网页的分类 webservice 动态...

3336
来自专栏小李刀刀的专栏

CentOS 7 开启 BBR 加速

Google 在 2016年9月份开源了他们的优化网络拥堵算法BBR,最新版本的 Linux内核(4.9-rc8)中已经集成了该算法。 对于TCP单边加速,并非...

9715
来自专栏琦小虾的Binary

交叉编译学习笔记(一)——交叉编译和交叉工具链

交叉编译学习笔记(一)——交叉编译和交叉工具链 最近看论文看的烦,又重新拾起之前没有完全完成的交叉编译,准备在网上找资料,好好研究一下。 参考链接: htt...

4317
来自专栏陈纪庚

知识总结

这样,你点下a标签后,就会下载该图片,并且该图片名为thisismyname.jpg

851
来自专栏LIN_ZONE

MySQL 中 having 和 where 的区别

如需转载,请注明:https://www.cnblogs.com/zhuchenglin/p/9750882.html

943
来自专栏debugeeker的专栏

《coredump问题原理探究》windows版9.1节栈溢出

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

752
来自专栏深度学习那些事儿

关于在ubuntu上源码安装TensorFLow-1.7.0-cuda9.1-cudnn7.1.2过程中问题解决方案

实验室服务器上装载的cuda版本是最新的9.1,和从官网下载下来的TensorFlow不匹配,因为官方的是通过cuda9.0进行编译的。因此,这篇文章讨论关于T...

2214

扫码关注云+社区

领取腾讯云代金券