从 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,

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

相关推荐
安科士andxe2 小时前
深入解析|安科士1.25G CWDM SFP光模块核心技术,破解中长距离传输痛点
服务器·网络·5g
YJlio5 小时前
1.7 通过 Sysinternals Live 在线运行工具:不下载也能用的“云端工具箱”
c语言·网络·python·数码相机·ios·django·iphone
CTRA王大大5 小时前
【网络】FRP实战之frpc全套配置 - fnos飞牛os内网穿透(全网最通俗易懂)
网络
testpassportcn6 小时前
AWS DOP-C02 認證完整解析|AWS DevOps Engineer Professional 考試
网络·学习·改行学it
通信大师7 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
Tony Bai8 小时前
告别 Flaky Tests:Go 官方拟引入 testing/nettest,重塑内存网络测试标准
开发语言·网络·后端·golang·php
叫我龙翔9 小时前
【计网】从零开始掌握序列化 --- JSON实现协议 + 设计 传输\会话\应用 三层结构
服务器·网络·c++·json
“αβ”9 小时前
网络层协议 -- ICMP协议
linux·服务器·网络·网络协议·icmp·traceroute·ping
袁小皮皮不皮11 小时前
数据通信18-网络管理与运维
运维·服务器·网络·网络协议·智能路由器