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

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

相关推荐
壹方秘境3 小时前
ChatTCP是怎么像Wireshark那样识别TCP重传、乱序和心跳保活的
网络协议·tcp/ip·wireshark
祺风挽楠3 小时前
ansible编辑
网络·ansible
莫名的好感°4 小时前
手机RAR解压怎么选?2026年二季度四款产品问答
服务器·网络·智能手机
AI科技星7 小时前
数术工坊第八卷:算力革命
c语言·开发语言·网络·量子计算·agi
liulilittle7 小时前
固定数组时间轮的槽过载优化:桶链表与批次执行
网络·数据结构·链表
行走__Wz7 小时前
【网工入门-eNSP模拟-05】静态路由
网络
xiangw@GZ7 小时前
802.11全系列标准调制编码与速率档对应关系
网络·单片机·嵌入式硬件·架构
liulilittle8 小时前
KCC:在 BBR 思路上的一次探索
网络·tcp/ip·算法·bbr·通信·拥塞控制·kcc
27669582929 小时前
泡泡玛特app 腾讯企业加固/支付宝加固脱修frida rpc调用
网络·网络协议·rpc·frida·泡泡玛特·ppmt·泡泡玛特app-rpc调用
其实防守也摸鱼9 小时前
软件安全与漏洞--Windows底层原理与软件逆向工程基础
linux·网络·数据库·算法·安全·安全架构·软件安全与漏洞