写点什么

gRPC1.0 发布,来自 Google 的 RPC 框架

  • 2016-09-04
  • 本文字数:1677 字

    阅读完需:约 6 分钟

一直以来,构建一个高度可扩展且松耦合的系统是很困难的。来自 Google 的 gRPC 框架致力于解决这个领域问题。它自去年面世以来收到了社区的大量关注和使用。8 月 23 日 Google 正式发布了 gRPC 的 1.0 版本,并可用于生产。在此次发布中增加了新版本对多语言的支持、API 稳定性等,引起了社区广泛的关注。

gRPC 是一个高性能、开源、通用的 RPC 框架,它基于 Proto Buffers 进行数据序列化,并将移动和 HTTP/2 作为设计的首要考虑因素。与单一 RPC 请求方式不同,gRPC 使用 HTTP/2 提供客户和服务器间的单向或双向流,同时可以带来流量控制、头部压缩、单 TCP 连接上的多复用请求等特性。Google 认为 gRPC 以“利用带宽和 CPU 效率、低延迟的方式来创建大规模分布式系统,可以应用在数据中心、移动应用程序、实时通信、物联网设备和 API 等,且有很好的表现。”而微服务是 gRPC 的主要目标。

gRPC 最早源于被称为 Stubby 的 Google 内部项目,用于一些 Google 内部服务间的通信。18 个月前 Google 开源了 gRPC 框架,希望借此 gRPC 能被更广泛地采纳,并在调用 Google 所提供的服务时、通过互联网与其它服务通信时或在自身产品内部应用 gRPC。

gRPC 是与平台无关的 RPC 系统。如下图所示,gRPC 允许开发人员编写语言无关的服务定义,指定远程调用参数和返回类型。服务器端实现服务定义,并运行一个 gRPC 服务器来处理客户的调用;而客户端则部署支持客户端调用的服务器端实现存根。这些代码都可由 gRPC 基于服务定义和自选的开发语言在编译器的帮助下自动生成。这使得客户端应用程序可以像调用本地对象一样调用服务器端应用程序,从而帮助开发人员更容易地创建分布式应用程序和服务。

同时,gRPC 也可以帮助处理高效的网络通信、认证和访问控制(如 SSL/TLS 和 OAuth2 方式的认证)、分布式跟踪等问题。gRPC 与 Proto Buffers 一起可以帮助实现松耦合、工程化的速度、更高的可靠性以及操作的易用性。这也是在过去的 15 年中,Google 内部采用 Stubby 和 RPC 框架解决的问题。Google 声称期望通过将这一框架开源给社区,让更多的组织和社区收益。

自 2015 年至今,我们也看到 gRPC 项目在很多方面的改进。这次 1.0 版本中主要包括以下几点:

  • 对多种语言绑定的支持,如 C ++、Java、Go、Node、Ruby、Python 和 C#,并且可以跨 Linux、Windows 和 Mac 多种操作系统。
  • Objective-C 和 Android 的 Java 库也在迁移到 1.0 版本,使移动应用能够更有效地连接到后端服务。
  • 在安装方面,gRPC 支持以 CocoaPods、gem、Gradle、Maven、npm、NuGet、pecl、pip 或 Docker 镜像等方式提供的二进制文件,这大大简化了安装过程。在 1.0 版本中,增加了绝大多数语言单行安装、向后兼容性等的支持。
  • gRPC1.0 依赖于 Protocol Buffers 最新版本 3.0。

此外,gRPC1.0 的核心协议和 API 在可用性、互操作性、性能等方面都有所提升。相对于文本格式而言,ProtoBuf 方式可提供更优的性能。据 Google 工程师 Kelsey Hightower 介绍,ProtoBuf 编码的消息比 JSON 格式消息的大小降低了一半,而序列化和反序列化所用的时间仅为后者的三分之一。为了显示各种 gRPC 实现的通信延迟情况对比,Google 给出了在同一数据中心中不同虚拟机实例间的通信性能精要报告。对于单一的同步安全消息,报告显示作为基准的 Netperf 的延迟大约为 100 微秒,而 C 、Java 和 C#语言实现的延迟大约在 200 到 300 微秒,Ruby、Python 和 Node.js 语言实现的延迟分别在 700 微秒、900 微秒和 1,100 微秒左右。

不得不说,gRPC1.0 版本的发布标志着一个重要里程碑的诞生。与此同时,社区对于 gRPC 的兴趣迅速提升,同时随着像 Netflix、CoreOS、 Square 等公司和开源项目的使用,必然能够推动 gRPC 作为一个通用 RPC 框架的发展以及相关生态圈的成熟,从而使更多的组织和社区受益。

你可以在这里查阅1.0 版本的更多发布细节。如果你感兴趣,不妨开始尝试 gRPC 并通过邮件列表来给予反馈。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-09-04 19:005273

评论

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

AI 网关基于 IP 地理位置,增强 Prompt 修饰能力

阿里巴巴云原生

阿里云 云原生

十六年所思所感,聊聊这些年我所经历的 DevOps 系统

阿里云云效

阿里云 云原生 云效

技术同学,一定要去大厂吗?

老张

职场成长 认知 职场晋升

2024-09-04:用go语言,给定一个长度为n的数组 happiness,表示每个孩子的幸福值,以及一个正整数k,我们需要从这n个孩子中选出k个孩子。 在筛选过程中,每轮选择一个孩子时,所有尚未选

福大大架构师每日一题

福大大架构师每日一题

手把手教你利用算法工具链训练、量化、编译、可视化 征程 6 参考算法 BEVFormer征程 6E/M 快速上手实战 Sample-IPC

地平线开发者

自动驾驶 算法 ipc

思维导图软件:Xmind 2024 (Win&Mac) 特别版

你的猪会飞吗

XMind 2024中文 XMind 2024破解版 XMind for mac XMind 破解版

【Tomcat源码分析】Pipeline 与 Valve 的秘密花园

派大星

tomcat源码解读

面向对象的编码设计原则

EquatorCoco

Java 面向对象 服务器

魔乐社区体验:探索Llama 3.1模型微调之旅

天翼云开发者社区

人工智能 大模型 Llama3

华为云入选中国云平台领导者,云安全服务斩获国内唯一满分

华为云开发者联盟

KaiwuDB 魏可伟:用“多模”实现对行业的“One size best fits”

KaiwuDB

KaiwuDB 分布式多模数据库 KWDB 开源

Go 语言 nil 和接口

FunTester

美国、香港、新加坡加密资产托管要求与合规解析:从Galois Capital事件看全球合规框架

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

LLM大模型基础知识学习总结

快乐非自愿限量之名

大模型 LLM

一直让 PHP 程序员懵逼的同步阻塞异步非阻塞,终于搞明白了

EquatorCoco

php 开发语言

非凸科技复旦大学校企合作

非凸科技

人才培养 校企合作 D-Lab

体验通义灵码 @workspace:轻松分析项目结构,结合代码仓库理解工程、查询问答等

阿里巴巴云原生

阿里云 云原生 通义灵码

专业的字体设计软件FontLab for Mac

Mac相关知识分享

JNPF——快速搭建应用好助手

伤感汤姆布利柏

体验通义灵码 @workspace:轻松分析项目结构,结合代码仓库理解工程、查询问答等

阿里云云效

阿里云 云原生 通义灵码

Unclutter for mac系统实用工具软件

Mac相关知识分享

Mac 财务记账管理工具Chronicle Pro for mac

Mac相关知识分享

作为中级前端工程师,每天都做些什么?

伤感汤姆布利柏

解读基于华为云 DWS 的湖仓一体方案构建

华为云开发者联盟

抢先看:2024云栖大会体验攻略

阿里云CloudImagine

云计算 音视频 视频云 云栖大会

Python批量分割Excel后逐行做差、合并文件的方法

不在线第一只蜗牛

Python Excel 开发语言

面经复盘:从高并发到数据存储的深度解析

王中阳Go

Go 面试 复盘 面经

值传递OR引用传递?大部人都答错了!

王磊

十六年所思所感,聊聊这些年我所经历的 DevOps 系统

阿里巴巴云原生

阿里云 云原生 云效

大语言模型应用框架介绍

霍格沃兹测试开发学社

gRPC1.0发布,来自Google的RPC框架_语言 & 开发_禚娴静_InfoQ精选文章