一文读懂 RPC、gRPC 与服务注册机制

191 阅读2分钟

一文读懂 RPC、gRPC 与服务注册机制

✅ 什么是 RPC?

定义
RPC(Remote Procedure Call,远程过程调用)是一种通信协议,允许程序像调用本地方法一样调用远程服务器上的函数或服务,实现跨进程、跨主机的函数调用。


✅ RPC 的通信机制

通信流程:

  1. 定位服务:通过目标服务的 IP + Port 找到目标节点;
  2. 调用方法:客户端指定目标服务中的方法名;
  3. 数据传输格式
    • JSON
    • XML
    • Binary(更高效)
  4. 网络协议支持
    • TCP(常用,稳定高效)
    • UDP(轻量,不保证可靠性)
    • HTTP / WebSocket(兼容 Web 场景)

✅ 为什么使用 RPC,而不是 RESTful?

🧩 RPC 特点:

维度描述
调用方式像本地函数调用一样,屏蔽网络细节
通信对象服务及其方法
自动生成代码使用存根(Stub)机制处理序列化、反序列化

🌐 RESTful 特点:

维度描述
通信方式基于 HTTP 协议
无状态每个请求独立,不记录状态
通信对象控制器(Controller)和资源(URL)
风格化遵循标准 HTTP 动词(GET、POST、PUT、DELETE)

🧾 对比总结:

对比项RPCRESTful
核心理念面向服务的方法调用面向资源的接口规范
通信协议支持 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 为例)

服务注册步骤:

  1. 定义服务结构体和方法
    开发者实现包含业务逻辑的结构体和方法。

  2. 注册服务
    使用 gRPC 框架提供的函数将服务注册到服务器。

  3. 利用反射机制
    借助 reflect 包动态获取结构体类型、方法名等元信息。

  4. 存入映射容器(如 sync.Map)
    将服务名与服务实例映射存入容器中,便于调用调度。

示例代码:

var serviceMap sync.Map

func register(service interface{}) {
    typ := reflect.TypeOf(service)
    name := typ.Elem().Name()
    serviceMap.Store(name, service)
}

如果你喜欢这篇内容,欢迎点赞 👍、收藏 ⭐、关注 🔔
我将持续分享关于微服务、RPC、gRPC、服务治理等架构干货!