gRPC:跨语言 RPC 框架,44K+ Star

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

Google 开源了这个项目,核心目标是让远程服务调用像本地函数调用一样简单。它基于 HTTP/2 和 Protocol Buffers,支持十多种编程语言,从后端服务到移动端都能部署。

正文顶部截图

1、这玩意儿是干嘛的

简单来说,就是定义好接口和数据结构,然后自动生成客户端和服务端代码。开发者不用自己处理网络连接、数据序列化、错误重试这些底层细节。

gRPC 使用 Protocol Buffers 作为接口定义语言。你先写一个 .proto 文件描述服务和消息格式,再用编译器生成目标语言的代码。这种方式比手写 REST 客户端和服务端要省很多重复劳动。

通信层面走 HTTP/2,自带多路复用和头部压缩。跟传统的一次请求一次响应不同,gRPC 支持四种调用模式:一元调用、客户端流、服务端流、双向流。传大文件、做实时推送、持续采集日志都很自然。

README区域截图

2、支持哪些语言

gRPC 的核心库用 C++ 实现,各语言在此基础上做封装。官方维护的语言包括:

C++、C#/.NET、Dart、Go、Java、Kotlin、Node.js、Objective-C、PHP、Python、Ruby、WebJS。

安装方式因语言而异。Go 用 go get google.golang.org/grpc,Python 用 pip install grpcio,Node 用 npm install @grpc/grpc-js,Java 和 Kotlin 从 Maven Central 拉取 JAR 包,PHP 用 pecl install grpc,Ruby 用 gem install grpc

C# 有两个路线:一个是基于 C++ 核心的封装,另一个是纯 C# 实现的 grpc-dotnet。

3、什么时候用它

微服务架构里,服务之间需要高频通信的场景,gRPC 是常见选择。Protocol Buffers 的二进制序列化体积比 JSON 小,解析速度也更快。HTTP/2 的流机制让单次连接能处理多个请求,减少连接开销。

多语言团队协作很合适。后端服务用 Go,数据处理用 Python,客户端用 Kotlin 或 Swift,所有人共用同一个 .proto 文件定义接口,改动一处、全端同步。

对实时性有要求的场景也能用上。双向流模式支持服务端主动向客户端推送数据,适合做监控告警、实时聊天、日志收集。

4、快速上手

各语言都有对应的包管理器安装方式。装好之后,写 .proto 文件定义服务接口,用 protoc 生成目标语言代码,再分别实现服务端业务逻辑和客户端调用代码即可。

官方文档站点提供了各语言的 Quickstart 教程,examples 目录也有可直接运行的示例代码。如果需要尝鲜 master 分支的最新构建,可以到 packages.grpc.io 下载预编译包。

5、项目近况

gRPC 目前还在持续维护。每日构建的性能指标可以在 Grafana 面板查看。

这个项目属于 CNCF 孵化项目,很多云原生基础设施都依赖它。Kubernetes 的部分组件、Envoy 代理、各类服务网格的底层通信都基于 gRPC 实现。

bernetes 的部分组件、Envoy 代理、各类服务网格的底层通信都基于 gRPC 实现。

Logo

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

更多推荐