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

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

相关推荐
我是乌鸦的空间4 小时前
什么是网络安全中的电子数据取证与响应?
网络·网络安全
跨境旺仔小拳头4 小时前
如何使用Crawl4AI进行网页爬虫?从0搭建教程与代理配置指南
网络·人工智能·爬虫·chatgpt·aigc
沫儿笙4 小时前
焊接机器人氩弧焊省气装置
网络·机器人
80s7774 小时前
什么是动态IP?静态IP和动态IP有什么区别?
网络·网络协议·tcp/ip
那年窗外下的雪.5 小时前
AIDC 学习日志|第 15 天|EVPN 多归属故障收敛与撤销机制
网络·学习·php
国科安芯6 小时前
轨道供电韧性:ASP4644四通道降压架构在低轨卫星平台电源管理中的适用性分析
运维·网络·数据库·嵌入式硬件·架构·状态模式·低轨卫星星座
少陽君7 小时前
用于InfiniBand网络的实时终端监控器——高速互连的htop
网络
IPdodo_9 小时前
代理 IP 服务商 SLA 怎么验?7 项指标与 Python 探测脚本实战
运维·python·网络协议·网络安全·代理ip
发量惊人的中年网工9 小时前
如何验证DDoS高防真的生效?从源站隐藏到正常访问的完整验收方法
运维·网络·数据库·ddos
GuoFeng.Wan10 小时前
深入理解经典蓝牙的L2CAP协议
网络