gRPC:高性能跨语言 RPC 框架

gRPC 在 GitHub 上已经拿到 44,857 Star 了。

Google 开源了这个框架,专门解决一个问题:让不同语言写的服务之间高效通信。基于 HTTP/2 和 Protocol Buffers,支持十多种编程语言。

正文顶部截图

1、这玩意儿是干嘛的

一句话:它是一个远程过程调用框架,让客户端像调用本地函数一样调用服务端的方法。

你写了一个 Go 服务,另一个团队用 Python 写服务,两边怎么通信?手写 HTTP 接口、拼 JSON、处理序列化,每一步都能踩坑。gRPC 把这些全包办了:定义好 proto 文件,生成客户端和服务端代码,直接开写业务逻辑。

底层走 HTTP/2,支持流式传输、头部压缩、多路复用。序列化用 Protocol Buffers,比 JSON 体积小、解析快。单向请求响应、服务端流、客户端流、双向流,四种通信模式都能覆盖。

2、为什么要用它

做微服务的人应该都体会过服务间通信的麻烦。

REST API 写起来简单,但接口文档和代码对不上、字段类型没人校验、版本升级一片红。gRPC 用 proto 文件当契约,代码和文档是同一个东西,字段类型强约束,接口变更编译期就能发现。

性能也是一大优势。Protocol Buffers 二进制序列化,比 JSON 省带宽;HTTP/2 的多路复用让单个连接能同时处理多个请求,延迟更低。官方有性能监控面板,master 分支每日构建的数据都在上面。

四种通信模式也很实用。除了常见的一请求一响应,服务端流适合推送实时数据,客户端流适合上传大文件分片,双向流适合做聊天或实时协作。

3、支持哪些语言

README区域截图

C++、C#、Dart、Go、Java、Kotlin、Node.js、Objective-C、PHP、Python、Ruby、WebJS……基本上主流后端语言全覆盖。

不同语言的实现状态有差异。C++ 核心库是共享的,其他语言有的直接基于核心库封装,有的是独立实现。Java、Go、Node.js 等社区活跃度很高,文档和示例也比较全。安装方式因语言而异,Go 用 go get,Python 用 pip,Node.js 用 npm,Java 从 Maven 仓库拉 JAR。

4、怎么用

先写 proto 文件定义服务和消息:

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

然后用 protoc 编译生成对应语言的代码,服务端实现接口,客户端直接调用。各语言的快速入门文档在官网能找到,代码示例也在 examples 目录里。预编译的每日构建包会上传到 packages 站点,想用最新版本可以直接下载。

遇到问题可以查看仓库里的故障排查指南,常见问题都有覆盖。

5、适合哪些人用

  • 在搭微服务架构、需要高效服务间通信的后端开发者
  • 做跨语言项目、团队技术栈不一致的工程师
  • 对延迟敏感、需要流式数据传输的场景
  • 用 Kubernetes 部署服务、需要标准化通信协议的基础设施团队

致的工程师

  • 对延迟敏感、需要流式数据传输的场景
  • 用 Kubernetes 部署服务、需要标准化通信协议的基础设施团队
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐