一文读懂 RPC、gRPC 与服务注册机制
✅ 什么是 RPC?
定义:
RPC(Remote Procedure Call,远程过程调用)是一种通信协议,允许程序像调用本地方法一样调用远程服务器上的函数或服务,实现跨进程、跨主机的函数调用。
✅ RPC 的通信机制
通信流程:
- 定位服务:通过目标服务的
IP + Port找到目标节点; - 调用方法:客户端指定目标服务中的方法名;
- 数据传输格式:
- JSON
- XML
- Binary(更高效)
- 网络协议支持:
- TCP(常用,稳定高效)
- UDP(轻量,不保证可靠性)
- HTTP / WebSocket(兼容 Web 场景)
✅ 为什么使用 RPC,而不是 RESTful?
🧩 RPC 特点:
| 维度 | 描述 |
|---|---|
| 调用方式 | 像本地函数调用一样,屏蔽网络细节 |
| 通信对象 | 服务及其方法 |
| 自动生成代码 | 使用存根(Stub)机制处理序列化、反序列化 |
🌐 RESTful 特点:
| 维度 | 描述 |
|---|---|
| 通信方式 | 基于 HTTP 协议 |
| 无状态 | 每个请求独立,不记录状态 |
| 通信对象 | 控制器(Controller)和资源(URL) |
| 风格化 | 遵循标准 HTTP 动词(GET、POST、PUT、DELETE) |
🧾 对比总结:
| 对比项 | RPC | RESTful |
|---|---|---|
| 核心理念 | 面向服务的方法调用 | 面向资源的接口规范 |
| 通信协议 | 支持 TCP、HTTP、WebSocket 等 | HTTP |
| 调度对象 | Service(服务/方法) | Controller(接口/资源) |
| 使用场景 | 系统内部高性能服务间通信 | 开放 API、前后端通信 |
✅ 什么是 gRPC?
gRPC 是 Google 开源的高性能 RPC 框架,具备以下特点:
- 📡 使用 HTTP/2 协议,支持多路复用、流式传输;
- 📦 使用 Protocol Buffers (Protobuf) 作为 IDL 和序列化格式;
- 🧬 支持多语言(Go、Java、Python、C++ 等);
- ⚙️ 支持双向流、认证、负载均衡、中间件等能力;
- 🚀 性能远优于传统 REST API,适合微服务场景。
✅ gRPC 服务注册流程(以 Go 为例)
服务注册步骤:
-
定义服务结构体和方法
开发者实现包含业务逻辑的结构体和方法。 -
注册服务
使用 gRPC 框架提供的函数将服务注册到服务器。 -
利用反射机制
借助reflect包动态获取结构体类型、方法名等元信息。 -
存入映射容器(如 sync.Map)
将服务名与服务实例映射存入容器中,便于调用调度。
示例代码:
var serviceMap sync.Map
func register(service interface{}) {
typ := reflect.TypeOf(service)
name := typ.Elem().Name()
serviceMap.Store(name, service)
}
如果你喜欢这篇内容,欢迎点赞 👍、收藏 ⭐、关注 🔔
我将持续分享关于微服务、RPC、gRPC、服务治理等架构干货!