什么是rpc
什么是RPC?
RPC
全称
Remote Procedure Call(远程过程调用),
是一种计算机通信协议。
允许一台计算机(客户端)
通过网络
请求另一台计算机(服务器)上的服务或程序,
而无需了解底层网络技术的细节。
简单来说,
就是
“像调用本地函数一样
调用远程服务器上的函数”。
RPC的核心目标
RPC的设计初衷
是
简化分布式系统中不同节点之间的通信,
让开发者
无需手动处理网络编程
(如socket连接、数据序列化、协议解析等),
专注于业务逻辑实现。
透明性
开发者无需关心网络传输细节,
远程调用体验与本地函数调用一致。
高效性
通过优化协议和序列化方式,减少通信开销。
跨平台/跨语言
支持不同编程语言、不同操作系统的节点之间通信。
RPC的工作原理
RPC调用的完整流程
可拆解为以下步骤:
1、客户端发起调用
客户端通过
本地stub(存根)调用目标函数,
传入参数。
2、参数序列化
stub将函数名、参数等信息
转换为
可在网络传输的二进制数据(序列化)。
3、网络传输
通过底层网络协议(如TCP、HTTP/2、UDP等)
将数据
发送到服务器。
4、服务器接收请求
服务器stub接收数据,
将二进制数据
还原为
函数名和参数(反序列化)。
5、执行远程函数
服务器调用本地对应函数,
执行业务逻辑
并生成返回结果。
6、结果回传
服务器stub
将返回结果
序列化后
通过网络发送回客户端。
7、客户端处理结果
客户端stub
反序列化数据,
将结果返回给调用者。
RPC与其他通信方式的区别
| 通信方式 | 特点 | 适用场景 |
|---|---|---|
| RPC | 面向函数/方法调用,抽象层次高,屏蔽网络细节 | 分布式系统内部服务调用 |
| HTTP API | 基于HTTP协议,通过URL和请求体传递数据,格式多为JSON/XML | 跨系统、跨语言的开放接口 |
| Socket | 底层网络接口,需手动处理连接、数据编解码等,灵活性高但开发复杂 | 高性能、定制化的通信需求 |
RPC相比HTTP API通常更高效(如使用二进制协议),但HTTP API更易调试和跨平台;相比Socket则大幅降低了开发复杂度。
常见的RPC框架
不同编程语言和场景下
有多种成熟的RPC框架:
-
Java
- Dubbo(阿里开源,高性能分布式服务框架)
- Spring Cloud OpenFeign(基于HTTP的声明式RPC)
- gRPC(跨语言,基于HTTP/2和Protobuf)
-
Go
- gRPC(Go原生支持)
- Kitex(字节跳动开源,高性能RPC框架)
-
Python
- gRPC(Python绑定)
- ZeroRPC(轻量级跨语言RPC)
-
跨语言
- gRPC(支持多语言)
- Thrift(Facebook开源,支持多协议和数据格式)
以gRPC为例,
它使用Protobuf定义服务接口和数据结构,
通过HTTP/2传输,
支持双向流、压缩等特性,
适合高性能跨语言通信。
RPC的应用场景
RPC是分布式系统的核心技术之一,
广泛应用于:
-
微服务架构中
服务间的调用(如订单服务调用支付服务)。 -
分布式计算框架(如
任务调度节点调用计算节点)。 -
大型应用的模块拆分(将复杂系统拆分为
多个独立部署的服务)。 -
跨机房、跨区域的服务协作(通过RPC屏蔽
网络延迟和拓扑细节)。
总结
RPC通过封装远程通信细节,
让开发者
能像调用本地函数一样
访问远程服务,
极大简化了
分布式系统的开发。
选择合适的RPC框架
需考虑
性能、跨语言支持、易用性等因素,
而理解RPC的核心原理
有助于
更好地设计和调试
分布式系统。
更多推荐
所有评论(0)