RPC(Remote Procedure Call),是一种中间件框架,主要用于云计算。
作用是使计算机可以像调用本地函数一样,远程调用部署在另一个服务器上的服务,RPC框架会自动处理所有相关的网络通信和数据转换。
RPC工作过程
1.客户端调用:计算机调用一个本地代理对象(Client Stub)用来完成任务
2.序列化:Stub将所需要传输的数据指令进行打包序列化
3.数据传输:将序列化后的数据发送给服务器
4.服务端处理:服务器代理对象(Server Stub 或 Skeleton),接收数据,进行反序列化,调用本地业务逻辑函数
5.结果返回:服务器代理对象完成处理,将数据重新序列化,发送回客户端
常见RPC
Apache Dubbo:一个高性能的 Java RPC 框架,提供了完整的服务治理能力。
gRPC:由 Google 开源的高性能、通用的 RPC 框架,广泛应用于微服务通信。
Hadoop:其分布式文件系统(HDFS)的节点间通信也依赖于自定义的 RPC 协议。
这些中间件在基础 RPC 之上,增加了服务发现、负载均衡、容错、监控等高级功能,使得开发者能更专注于业务逻辑。
RPC 与 REST 的主要区别
| 特性 | RPC (如 gRPC) | REST (如 HTTP API) |
|---|---|---|
| 设计核心 | 面向函数/动作,直接调用远程方法。 | 面向资源,通过标准方法(GET/POST)操作资源 |
| 性能 | 更高。通常使用二进制协议(如 Protobuf),序列化效率高。 | 中等。通常使用文本协议(如 JSON),可读性好但体积较大。 |
| 耦合性 | 紧耦合。客户端和服务端需遵循预定义的接口契约。 | 松耦合。通过统一的接口与资源交互,更灵活。 |
| 适用场景 | 内部微服务通信、高性能要求、实时流式处理 | 对外公开的 API、Web/移动端应用后端。 |