gRPC 实战:高性能 RPC 框架完全指南
gRPC 是 Google 开源的高性能 RPC 框架。本文深入讲解 gRPC 核心概念和实战技巧。
🚀 gRPC vs REST
| 特性 | REST | gRPC |
|---|---|---|
| 协议 | HTTP/1.1 | HTTP/2 |
| 数据格式 | JSON(文本) | Protobuf(二进制) |
| 性能 | 较低 | 高(快 7-10 倍) |
| 代码生成 | 手动/第三方 | protoc 自动生成 |
| 流式传输 | 有限 | 双向流式 |
📦 Protocol Buffers 定义
syntax = "proto3";
service UserService {
rpc GetUser(GetUserRequest) returns (User);
rpc ListUsers(ListUsersRequest) returns (stream User);
}
message GetUserRequest {
string user_id = 1;
}
message User {
string id = 1;
string name = 2;
string email = 3;
}
🛠️ Node.js 实现
// server.js
const grpc = require('@grpc/grpc-js')
const protoLoader = require('@grpc/proto-loader')
const packageDefinition = protoLoader.loadSync('user.proto')
const proto = grpc.loadPackageDefinition(packageDefinition)
const server = new grpc.Server()
server.addService(proto.UserService.service, {
GetUser: (call, callback) => {
callback(null, { id: call.request.userId, name: 'John' })
}
})
server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure())
// client.js
const client = new proto.UserService('localhost:50051', grpc.credentials.createInsecure())
client.GetUser({ userId: '123' }, (err, response) => {
console.log(response)
})
🔄 四种服务方法
- Unary RPC:普通请求-响应
- Server Streaming RPC:服务端流式
- Client Streaming RPC:客户端流式
- Bidirectional Streaming RPC:双向流式
⚡ 性能优化
- 使用连接池
- 启用 keep-alive
- 调整 max message size
- 使用压缩(gzip)
总结:gRPC 适合微服务间高性能通信。掌握 Protocol Buffers、四种服务方法、拦截器等技巧,能构建高效的 RPC 系统。
本文整理自 gRPC 官方文档及微服务通信实战指南