1. 前言
在分布式后端系统中,服务之间需要频繁通信。
传统的 REST + JSON 模式虽然简单,但在高并发、大数据传输、低延迟场景中往往效率不足:
- JSON 序列化/反序列化开销大
- HTTP/1.1 请求-响应模式延迟高
- 跨语言通信需要额外适配
gRPC 由 Google 推出,基于 HTTP/2 和 Protocol Buffers(Protobuf)实现,具备高性能、低延迟、跨语言等特点,非常适合现代后端系统。
2. gRPC 核心特性
-
高性能序列化
- Protobuf 二进制格式,比 JSON 更小、更快
-
HTTP/2 支持
- 多路复用、头部压缩、服务器推送
-
跨语言兼容
- 支持 Java、Go、Python、Node.js、C++、Rust 等多种语言
-
四种通信模式
- 一元 RPC(Unary)
- 服务端流(Server Streaming)
- 客户端流(Client Streaming)
- 双向流(Bidirectional Streaming)
3. 技术选型
| 场景 | 语言框架 |
|---|---|
| 微服务通信 | Go gRPC / Java gRPC Spring Boot |
| 移动端接口 | gRPC-Web(浏览器可访问) |
| 边缘计算 | gRPC + Envoy Proxy |
| AI 模型调用 | gRPC + Python FastAPI Adapter |
4. 架构落地案例:实时订单处理系统
架构流程
- 用户下单 → API Gateway
- API Gateway 调用订单服务(gRPC)
- 订单服务通过 gRPC 流式发送状态更新给通知服务
- 通知服务实时推送到客户端(WebSocket/推送服务)
[客户端] ⇄ [API Gateway] ⇄ (gRPC) ⇄ [订单服务] ⇄ (gRPC) ⇄ [通知服务]
5. 实战代码示例(Go gRPC)
1️⃣ 定义 Protobuf 接口
syntax = "proto3";
service OrderService {
rpc CreateOrder (OrderRequest) returns (OrderResponse);
}
message OrderRequest {
string userId = 1;
repeated string items = 2;
}
message OrderResponse {
string orderId = 1;
string status = 2;
}
2️⃣ 服务端实现
type server struct{}
func (s *server) CreateOrder(ctx context.Context, req *pb.OrderRequest) (*pb.OrderResponse, error) {
return &pb.OrderResponse{
OrderId: "ORD123",
Status: "CREATED",
}, nil
}
3️⃣ 客户端调用
conn, _ := grpc.Dial("localhost:50051", grpc.WithInsecure())
client := pb.NewOrderServiceClient(conn)
res, _ := client.CreateOrder(context.Background(), &pb.OrderRequest{
UserId: "U1", Items: []string{"Book", "Pen"},
})
fmt.Println(res.OrderId, res.Status)
6. 性能优化建议
- 连接复用:HTTP/2 长连接减少握手开销
- 批量请求:合并多个小请求,减少 RTT
- 流式传输:适合长时间数据交互(如实时行情)
- 负载均衡:配合 Envoy、Linkerd 做服务发现和流量分发
7. 总结
gRPC 在高性能后端通信中几乎是“标配”,特别适合微服务、跨语言系统和低延迟应用场景。
它能显著提升吞吐量,降低延迟,让后端通信更高效、更可扩展。