速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

gRPC:Google 开源的基于 HTTP/2 和 ProtoBuf 的通用 RPC 框架

  • 2015-03-02
  • 本文字数:1209 字

    阅读完需:约 4 分钟

gRPC 是一个高性能、通用的开源 RPC 框架,其由 Google 主要面向移动应用开发并基于 HTTP/2 协议标准而设计,基于 ProtoBuf (Protocol Buffers) 序列化协议开发,且支持众多开发语言。gRPC 提供了一种简单的方法来精确地定义服务和为 iOS、Android 和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的 TCP 链接次数、节省 CPU 使用、和电池寿命。

gRPC 具有以下重要特征:

  • 强大的 IDL 特性
    gRPC 使用 ProtoBuf 来定义服务,ProtoBuf 是由 Google 开发的一种数据序列化协议(类似于 XML、JSON、hessian)。ProtoBuf 能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面。不过,当前 gRPC 仅支持 Protobuf ,且不支持在浏览器中使用。由于 gRPC 的设计能够支持支持多种数据格式,所以读者能够很容易实现对其他数据格式(如 XML、JSON 等)的支持。

    定义服务的示例代码如下:

复制代码
message HelloRequest {
string greeting = 1;
}
message HelloResponse {
string reply = 1;
}
service HelloService {
rpc SayHello(HelloRequest) returns (HelloResponse);
}
  • 支持多种语言
    gRPC 支持多种语言,并能够基于语言自动生成客户端和服务端功能库。目前,在 GitHub 上已提供了 C 版本 grpc 、Java 版本 grpc-java 和 Go 版本 grpc-go ,其它语言的版本正在积极开发中,其中 grpc 支持 C、 C++ Node.js Python Ruby Objective-C PHP C#等语言,grpc-java 已经支持 Android 开发。
  • 基于 HTTP/2 标准设计
    由于 gRPC 基于 HTTP/2 标准设计,所以相对于其他 RPC 框架,gRPC 带来了更多强大功能,如双向流、头部压缩、多复用请求等。这些功能给移动设备带来重大益处,如节省带宽、降低 TCP 链接次数、节省 CPU 使用和延长电池寿命等。同时,gRPC 还能够提高了云端服务和 Web 应用的性能。gRPC 既能够在客户端应用,也能够在服务器端应用,从而以透明的方式实现客户端和服务器端的通信和简化通信系统的构建。

gRPC 已经应用在 Google 的云服务和对外提供的 API 中,其主要应用场景如下:

  • 低延迟、高扩展性、分布式的系统
  • 同云服务器进行通信的移动应用客户端
  • 设计语言独立、高效、精确的新协议
  • 便于各方面扩展的分层设计,如认证、负载均衡、日志记录、监控等

近日,gRPC 开发团队宣布 gRPC 基于三条款BSD 许可协议(BSD 3-Clause License)开源,相关代码已托管在 GitHub 上。当前已有 Google 和移动支付公司 Square 以及其他组织或个人为该项目贡献代码。有兴趣的读者可以在 GitHub 选择需要的语言版本,并根据提供的 README 文档尝试 gRPC 的功能,或者参考 FAQ,以获得对 gRPC 更多信息。此外,在 gRPC-common 仓库中,还提供了例子、快速入门指南等相关文档。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015-03-02 00:2980018
用户头像

发布了 46 篇内容, 共 52.5 次阅读, 收获喜欢 15 次。

关注

评论

发布
暂无评论
发现更多内容

畅玩国服LOL?MacBook M1 Windows虚拟机体验

Zhendong

arm MacBook m1

看完这篇,再也不怕面试官问我线程池了

牧小农

多线程 高并发 线程池 阻塞队列 拒绝策略

Java面试:阿里公开内部P7架构师(Java)成长路线图,满满的干货

Java架构追梦

Java 阿里巴巴 架构 面试 P7岗

音视频开发经验之路【二】ijkplayer实际开发中遇到的问题总结

鱼哥

音视频

2021拼多多(Java岗)面经最新分享

比伯

Java 编程 架构 面试 计算机

面试三轮我倒在了一道sql题上——sql性能优化

牧小农

MySQL 数据库 面试 索引 索引优化

(Day31) 变革流程的流程

mtfelix

28天写作 bewriting

华为 IS-IS防环、泄露

艺博东

网络

ARTS-week 4

steve_lee

深圳应用区块链提升政务服务效能调查

CECBC

电子发票

小白也能看懂的锁升级过程和锁状态

牧小农

乐观锁 悲观锁 锁升级

MySQL主从架构原理

无心

MySQL

金三试水Java社招,历经“阿里+字节+bigo”等5家面经

Java架构师迁哥

Java 并发基础(一):synchronized 锁同步

看山

Java Java并发 并发编程

阿里二面,面试官居然把 TCP 三次握手问的这么细致

Java 编程 架构 面试 网络

音视频开发经验之路【三】吐血干货,直播首屏耗时400ms以下的优化实践

鱼哥

音视频

MySQL 锁

无心

MySQL

你真的知道基于区块链的「云计算」是什么吗?

CECBC

云计算

一线大厂软件测试流程(思维导图)详解

程序员阿沐

编程 程序员 软件测试 测试工程师 测试流程

音视频开发经验之路【一】Android中如何实现无缝切换播放源

鱼哥

音视频

是时候下载Android11系统源码和内核源码了~

刘望舒

android Android进阶

一个视频带你编译自己的Android系统!

刘望舒

android Android进阶

操作系统的内存管理(中)

鲁米

操作系统 内存管理

Spring Boot Feign 使用与源码学习

Yangjing

Feign Spring boot Feign 源码解读

隐式等待、显示等待和强制等待?

Geek_6370d5

刘华:看板那么好,为什么都成了摆设?

刘华Kenneth

架构 敏捷 精益 看板

在公司九年被裁是谁的问题?

石云升

离职 28天写作 职场经验 3月日更

区块链列入数字经济重点产业 机构预测其大规模应用将加速

CECBC

数字经济

框架是教科书,但是思考架构更有价值

吴脑的键客

架构师 知识图谱

『BATcoder』都2021年了,是时候安装Ubuntu了!

刘望舒

android Android进阶

第八章作业—张红珊

zzz

gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架_Google_李小兵_InfoQ精选文章