RPC详解

RPC 是远程过程调用的缩写,核心是让程序像调用本地函数一样,调用远程服务器上的函数或服务,无需关注网络通信细节。

核心本质

  • 屏蔽网络编程复杂性,简化分布式系统中服务间的调用流程。
  • 底层基于网络传输(如 TCP、HTTP),但上层封装了序列化、寻址、容错等能力。
  • 目标是 “透明化远程调用”,让开发者感知不到 “远程” 与 “本地” 的差异。

关键组成部分

  1. 客户端(调用方):发起远程调用请求,负责参数序列化、服务寻址。
  2. 服务端(被调用方):接收请求, deserial 参数,执行目标函数,返回结果。
  3. 序列化 / 反序列化:将参数、返回值转化为可网络传输的二进制 / 文本格式(如 Protobuf、JSON)。
  4. 通信协议:定义请求 / 响应的格式、传输规则(如 Dubbo 协议、gRPC 基于 HTTP/2)。
  5. 注册中心(可选):管理服务地址,帮助客户端找到服务端(如 Nacos、Eureka)。

典型调用流程

  1. 客户端调用本地封装的 “代理函数”,传入参数。
  2. 代理函数将参数序列化,通过通信协议发送给服务端。
  3. 服务端接收请求, deserial 参数,调用实际业务函数。
  4. 服务端将执行结果序列化,返回给客户端。
  5. 客户端 deserial 结果,返回给调用者,完成流程。

常见应用场景

  • 分布式系统中跨服务调用(如订单服务调用支付服务、用户服务)。
  • 微服务架构下的服务间通信(如 Spring Cloud 集成 Feign、Dubbo 框架)。
  • 跨语言调用(如 Java 服务调用 Python 服务,通过 gRPC 等跨语言协议实现)。

RPC 核心概念与主流框架对比表

对比维度DubbogRPCFeign
核心定位高性能 Java 微服务 RPC 框架跨语言、高性能的 RPC 框架(基于 HTTP/2)声明式 REST 客户端(Spring Cloud 生态)
通信协议自定义 Dubbo 协议(默认)、支持 HTTP/2、gRPC 等基于 HTTP/2基于 HTTP/1.1(REST 协议)
序列化方式支持 Hessian2、Protobuf、JSON 等默认 Protobuf(高效二进制序列化)支持 Jackson、Gson 等(JSON 为主)
跨语言支持有限(主要支持 Java,第三方扩展支持 Go、Python 等)原生支持多语言(Java、Go、Python、C++ 等)依赖 HTTP 协议,理论支持跨语言(需适配 REST 接口)
生态依赖可独立使用,也可集成 Spring Cloud、Nacos 等无强生态依赖,可灵活集成各类注册中心、配置中心强依赖 Spring Cloud 生态(如 Eureka、Nacos、Ribbon)
性能表现高性能(二进制协议 + 长连接,适合高并发场景)高性能(HTTP/2 多路复用 + Protobuf,跨语言场景下优势明显)性能中等(HTTP/1.1 无多路复用,适合轻量级调用)
适用场景Java 微服务架构、高并发内部服务调用、需要极致性能的场景跨语言服务调用、多语言协同开发、需要 HTTP/2 特性的场景Spring Cloud 生态项目、REST 风格接口调用、快速开发轻量级服务
关键特性服务注册发现、负载均衡、熔断降级、服务治理能力完善流式调用、双向通信、metadata 传递、内置健康检查声明式接口(注解驱动)、自动负载均衡、与 Spring 无缝集成

技术选型建议

  • 若为 Java 纯技术栈,追求高性能和完善的服务治理,选 Dubbo
  • 若涉及多语言协同(如 Java 调用 Go/Python),或需要流式通信,选 gRPC
  • 若已使用 Spring Cloud 生态,追求开发效率和 REST 接口的简洁性,选 Feign

RPC 框架快速选型决策表

决策维度选型结论核心依据
技术栈纯 Java 技术栈优先选 Dubbo,服务治理成熟且性能适配 Java 生态
多语言协同(Java/Go/Python/C++ 等)必选 gRPC,原生跨语言支持 + 高性能无替代
已接入 Spring Cloud 生态直接选 Feign,零成本集成 + 注解式开发高效
业务并发量高并发(QPS 10 万 +)选 Dubbo 或 gRPC,二进制协议 + 长连接 / 多路复用支撑高吞吐
中低并发(QPS 1 万以下)选 Feign,开发效率优先,无需过度追求极致性能
接口通信风格内部服务紧密调用(无跨语言需求)选 Dubbo,自定义协议适配性更强
跨团队 / 跨系统 REST 风格接口选 Feign,REST 接口通用性强,对接成本低
需流式通信(如文件传输、实时数据流)选 gRPC,HTTP/2 流式特性天然适配
服务治理需求需完善熔断 / 降级 / 监控 / 灰度发布选 Dubbo,服务治理能力开箱即用
仅需基础注册发现,无复杂治理需求gRPC 或 Feign 均可,按技术栈适配
开发效率优先级优先快速落地(短周期项目)选 Feign(Spring 注解直达)或 Dubbo(轻量化配置)
可接受一定学习成本,追求长期性能选 gRPC(跨语言)或 Dubbo(Java 生态)

极简选型口诀

  • 纯 Java + 高并发 + 强治理 → Dubbo
  • 多语言 + 流式通信 → gRPC
  • Spring Cloud + REST + 快开发 → Feign
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心态特好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值