理解RPC

一、什么是 RPC?

RPC(Remote Procedure Call,远程过程调用)是一种在分布式系统中实现跨进程、跨网络服务调用的通信机制。

它的目标是:让开发者在调用远程服务时,就像调用本地方法一样自然和透明。

二、为什么需要 RPC?

随着系统服务化、微服务化的发展,模块间不再在同一个进程中,直接的函数调用不再可行。传统的 HTTP 请求调用虽然可行,但重复写很多通信、序列化、错误处理逻辑会造成代码膨胀和效率低下。

因此,RPC 框架应运而生,封装了通信细节,让你"像调用本地函数一样调用远程服务"


三、RPC 的核心组成

一个标准的 RPC 系统通常包含以下组件:

组件 功能
客户端 Stub 替代真实远程方法,在调用时封装请求,发送给服务端
服务端 Stub 接收请求,反序列化,调用对应本地服务,返回响应
传输层协议 如 TCP、HTTP/2、QUIC,决定数据如何传输
序列化协议 如 Protobuf、Thrift、JSON、Avro,用于对象和二进制数据互转
服务注册与发现 动态注册服务并让客户端能找到服务提供者(如用 Zookeeper、Nacos)
负载均衡和容错机制 如随机、轮询、连接池,重试机制
连接管理与心跳机制 保障服务在线和健康状态

四、底层实现依赖

RPC 本质上离不开两部分支撑:

  • 通信协议(如 HTTP/2、TCP):决定了网络层的数据传输方式。

  • 序列化协议(如 Protobuf):决定了调用参数和返回值如何高效压缩、编码成二进制。

例如:

  • gRPC 使用 HTTP/2 + Protobuf。

  • Dubbo 使用 TCP + Hessian 或 Protobuf。


五、和 RESTful 接口的区别

特性 RPC RESTful
调用方式 像方法调用一样 基于资源(URL + 动词)
协议依赖 可自定义(TCP/HTTP) 通常基于 HTTP
序列化方式 高性能(Protobuf等) 通常是 JSON
性能 更快 相对较慢
可读性 弱(对开发者透明)

六、总结

RPC 并不是某个特定框架,而是一种通用思想和机制,它的核心是:屏蔽远程通信的复杂性,让服务调用变得像本地函数一样透明且高效。

从开发者视角,RPC 能大大降低开发复杂度;从架构师视角,它是服务化和微服务通信的支柱。


七、一句话记忆

RPC 是一种分布式系统中的通信机制,目标是让远程服务调用像本地方法一样自然。它的核心在于封装网络通信、序列化、服务注册等底层细节,使得开发者专注于业务逻辑开发。


相关推荐
我叫黑大帅2 小时前
通过白名单解决 pnpm i 报错 Ignored build scripts
前端·javascript·面试
knight_9___4 小时前
大模型project面试4
人工智能·python·深度学习·算法·面试·agent
我叫黑大帅5 小时前
基于 Docker + Watchtower 自动化部署后端服务
后端·docker·面试
不会写DN7 小时前
通过白名单解决 pnpm i 报错 Ignored build scripts
javascript·面试·npm
沪漂阿龙7 小时前
字节跳动大模型面试题深度拆解:项目深挖、SFT 与 RLHF、Claude Code、记忆机制、并发锁与手撕题全攻略
人工智能·面试
knight_9___8 小时前
大模型project面试3
人工智能·python·语言模型·面试·大模型·agent
Makoto_Kimur8 小时前
Java 后端面试场景题:页面刷新后一直转圈,应该怎么排查?
java·开发语言·面试
芝士爱知识a8 小时前
2026 年教资面试考前急救软件推荐:基于智蛙面试app的技术评测
面试·职场和发展·智蛙面试·教资面试软件·ai模拟面试·教资考前急救·多模态大模型应用
AI人工智能+电脑小能手8 小时前
【大白话说Java面试题 第53题】【JVM篇】第13题:JVM采用什么算法判断一个对象是否需要被回收?
java·jvm·算法·面试
小赵不会秃头8 小时前
数据结构Day 06:线性结构、库操作及 Makefile 完整学习笔记
java·linux·数据结构·算法·面试