10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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:2980434
用户头像

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

关注

评论

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

了解医疗上云门道,尽在“共铸国云 红云行业思想汇”!

天翼云开发者社区

关于DataLeap中的Notebook,你想知道的都在这

字节跳动数据平台

数据库 大数据 数据治理 数据研发 企业号 2 月 PK 榜

接口调试时如何实现接口之间的数据传递?

不想敲代码

使用 Ingest Pipeline 在 Elasticsearch 中对数据进行预处理

Se7en

PostgreSQL:内存结构

天翼云开发者社区

分布式云原生平台Kurator v0.2.0正式发布!一键构建分布式云原生平台

华为云开发者联盟

云计算 华为云 企业号 2 月 PK 榜 华为云开发者联盟

天翼云联合国际咨询机构IDC发布《中国医疗云建设与应用白皮书》

天翼云开发者社区

Teradata的离开,是国内ToB服务转变的信号

ToB行业头条

创建MQTT连接时如何设置参数?

EMQ映云科技

物联网 IoT mqtt 企业号 2 月 PK 榜 连接参数

如何从0开始搭建 Vue 组件库

京东科技开发者

npm UI vant Vue3 组件库

全网招募P图高手!阿里巴巴持续训练鉴假AI

阿里技术

人工智能

安全可信| 首批!天翼云智算平台率先通过可信算力服务评估

天翼云开发者社区

聚焦现代化应用安全,F5的安全扩增,稳了!

F5 Inc

架构 安全 API 应用

打造自主可控云网算力,天翼云为湖南数字经济发展注入新动能

天翼云开发者社区

C#/VB.NET 如何在不同工作簿之间复制单元格范围

在下毛毛雨

C# .net Excel 文档操作

从MVC到DDD转变过程中的一点碎碎念

为自己带盐

DDD CQRS

MQTT发布/订阅模式介绍

EMQ映云科技

物联网 IoT mqtt 客户端 企业号 2 月 PK 榜

OpenYurt v1.2 亮点速览丨云边流量峰值相比原生 K8s 降低 90%

阿里巴巴云原生

阿里云 开源 容器 云原生 openyurt

快速开发光伏电站数字孪生运维系统——实践类

阿里云AIoT

阿里云 物联网 IoT

人工智能 LLM 革命前夜:一文读懂ChatGPT缘起的自然语言处理模型Transformer

阿里技术

人工智能 自然语言处理

eKuiper 1.8.0发布:零代码实现图像/视频流的实时AI推理

EMQ映云科技

物联网 IoT 视频流 流式计算 企业号 2 月 PK 榜

LED显示屏怎么翻新?

Dylan

LED LED显示屏 led显示屏厂家

深度访谈 Eolink 高管|研发团队如何更好地进行 API 管理?

万事ONES

项目管理 软件研发 API管理

git使用ssh

刘旭东

git SSH

serverless与容器优缺点

天翼云开发者社区

serverles

接口测试的测试要点

Liam

测试 接口测试 接口测试软件

火山引擎数智平台的这款产品,正在帮助APP提升用户活跃度

字节跳动数据平台

大数据 客户数据平台 客户 客户数据 企业号 2 月 PK 榜

如何在Excel中查找并高亮数据

Geek_249eec

C# .net Excel VB.NET

Apipost正式发布《API行业白皮书》!

不想敲代码

API 白皮书 行业趋势 行业报告

IoT Studio场景最佳实践——实践类

阿里云AIoT

阿里云 物联网 IoT

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