从 0 开始理解 RPC —— 后端工程师扫盲版

阅读目标:

看完之后你能回答 5 个问题:

  1. RPC 是什么
  2. 为什么需要 RPC
  3. RPC 和 HTTP / DI 的区别
  4. RPC 为什么会慢
  5. 我现在需要学到什么程度

一、RPC 是什么?

RPC(Remote Procedure Call)= 远程过程调用

一句人话解释:

像调用本地方法一样,去调用另一台服务器上的方法。

本地方法调用(不是 RPC)

java 复制代码
userService.getUser(1);

特点:

java 复制代码
同一个应用
同一个 JVM
同一块内存
没有网络

速度极快。

RPC 调用(远程)

代码看起来一样:

java 复制代码
userRpcService.getUser(1);

但实际发生:

java 复制代码
参数打包
↓
网络发送
↓
远端执行
↓
返回结果

中间多了一整套 网络通信流程

二、为什么会有 RPC?

因为系统不再是一个大项目,而是拆成多个服务:

java 复制代码
用户服务
订单服务
支付服务
库存服务
积分服务

订单想查用户,就必须跨服务调用。

RPC 的出现,就是为了解决:

服务与服务之间如何通信。

三、RPC 在系统中的位置

java 复制代码
浏览器 → HTTP → 网关 → 服务A
                         ↓ RPC
                       服务B
                         ↓ RPC
                       服务C
  • HTTP:多用于 对外接口
  • RPC:多用于 内部服务通信

四、RPC 为什么代码看起来像本地调用?

因为框架用了 代理模式

你写的是:

java 复制代码
UserService userService;

实际注入的是:

UserServiceProxy

代理对象在你调用时会:

  • 序列化参数
  • 发网络请求
  • 等结果
  • 反序列化返回

你以为是对象,其实是网络。

五、RPC 和 DI 的区别(扫盲重点)

很多人第一次学 RPC 都会产生错觉:

"这不就是依赖注入吗?"

写法确实像,但本质不同。

DI(依赖注入)

java 复制代码
同一个应用
同一个 JVM
没有网络

流程:

java 复制代码
Spring 创建对象 → 注入引用 → 直接执行

类比:
让隔壁同事递水。

RPC(远程调用)

java 复制代码
不同应用
不同 JVM
有网络

流程:

java 复制代码
代理拦截 → 序列化 → 网络 → 执行 → 返回

类比:
打电话叫外卖。

技术层面对比

维度 DI RPC
JVM 同一个 不同 JVM
网络
性能 极快 有延迟
序列化
失败概率 极低 需要考虑
超时/重试 不需要 必须考虑

六、RPC 框架是什么?

RPC 是一类框架,不是一个工具。

常见:

框架 背景
Dubbo 阿里
gRPC Google
Thrift Facebook
OpenFeign Spring 生态(HTTP 版 RPC)

你不用造 RPC,只需要会用。

七、RPC 为什么可能慢?

因为它是 网络调用

常见慢的原因:

1. 网络延迟

跨机房、丢包

2. 序列化慢

JSON 大对象

3. N+1 问题

循环调用 RPC

4. 下游服务慢

数据库慢、锁等待

5. 线程池打满

请求排队

八、RPC 的典型风险

风险 说明
超时 服务无响应
雪崩 下游挂了拖死上游
N+1 循环调用
重试放大 一次变三次
线程阻塞 QPS 上不去

九、工程师需要掌握到什么程度?

你现在不需要:

  • 写 RPC 协议
  • 写 Netty
  • 写序列化框架

你需要:

java 复制代码
知道是什么
知道什么时候用
知道什么时候慢
知道如何判断

十、最小脑图理解

java 复制代码
RPC = 代理 + 序列化 + 网络 + 服务发现 + 负载均衡

十一、学习顺序建议

当前阶段优先级:

  1. SQL
  2. JVM
  3. 线程池
  4. Redis
  5. 接口设计
  6. RPC 使用
  7. 微服务治理

十二、终极一句话总结

RPC 是"假装本地调用"的远程网络调用。

写法像 DI,本质是网络。

你现在的目标不是造 RPC,

而是 会用、会判断、会优化。

相关推荐
WIN-U644 分钟前
新版华三H3C交换机配置NTP时钟步骤 示例(命令及WEB配置)
网络协议·tcp/ip·http
爱学习的小囧44 分钟前
ESXi 8.0 无法选择分区方式 小白级详细解决办法
运维·服务器·网络·虚拟化·esxi8.0
F1FJJ1 小时前
什么是 Shield CLI?视频讲解:一条命令,可浏览器远程访问一切内部服务(RDP/VNC/SSH/数据库等)
运维·网络·数据库·网络协议·ssh
gc_22991 小时前
域控服务器重启导致的身份认证失败问题
rpc·域控
南湖北漠1 小时前
听说拍照的人会拿相似的鱼皮豆代替野生鹌鹑蛋拍照(防原创)
网络·人工智能·计算机网络·生活
一个有温度的技术博主2 小时前
网安实验系列四:信息收集-旁站、C段信息
网络
木下~learning2 小时前
对于Linux中等待队列和工作队列的讲解和使用|RK3399
linux·c语言·网络·模块化编程·工作队列·等待队列
F1FJJ2 小时前
Shield CLI 命令全解析:15 个命令覆盖所有远程访问场景
网络·数据库·网络协议·容器·开源软件
攻城狮在此2 小时前
华为汇聚交换机DHCP中继配置
网络·华为
婷婷_1722 小时前
【PCIe验证每日学习·阶段复盘01】Day1~Day7 纯理论深度复盘
网络·程序人生·芯片·每日学习·pcie 验证·ic 验证·pcie学习