录屏 音乐 摸鱼 压图
在分布式系统中,不同进程之间需要相互通信以完成业务逻辑。所谓“远程调用”,并非指物理距离上的“远程”,而是指跨进程的功能调用。这些进程既可以运行在同一台机器上,也可以分布在多台机器上。
RPC(远程过程调用)是一种协议,允许程序通过网络调用另一台计算机上的服务,而无需关心底层网络技术的实现细节。符合该协议的软件框架统称为RPC框架。其核心目标是让开发者像调用本地方法一样调用远程服务,从而降低分布式系统的开发复杂度。
RPC的概念最早于1981年提出,随后被广泛应用于分布式系统的进程间通信。经过四十余年的发展,RPC已成为构建大规模分布式架构的基石技术之一。
一次完整的RPC调用通常涉及四个角色:
Client:服务调用方,发起远程请求。
ClientStub:客户端存根,负责封装服务端地址信息,将请求参数序列化为网络消息,并通过网络发送。
ServerStub:服务端存根,负责接收网络消息,反序列化参数,并调用本地服务实现。
Server:服务提供方,真正的业务逻辑执行者。
整个调用过程对客户端透明,开发者无需关注序列化、网络传输、反序列化等细节。
RPC在分布式系统中的价值主要体现在以下五个方面:
实现跨进程、跨主机的网络通信。
解耦分布式子系统,提供松耦合的服务调用能力。
支持负载均衡、流量控制等高可用机制。
集成服务注册与发现,实现动态寻址。
为构建分布式调试与监控环境提供基础。
早在JDK1.1时代,Java就通过RMI提供了原生RPC支持。然而RMI仅支持Java语言,无法满足异构系统的互通需求。随后,基于SOAP的WebService成为跨语言解决方案,但其复杂的Schema定义导致报文臃肿、开发效率低。最终,轻量化的HTTP+JSON方案逐渐取代WebService,成为主流。
当前主流开源RPC框架均已实现跨语言调用,并在性能、传输效率、服务治理等方面持续优化。典型代表包括:
gRPC(Google):支持多语言、流式调用、双向通信。
Thrift(Facebook):接口定义与传输协议分离,支持多种序列化格式与传输方式。
Dubbo(阿里巴巴):提供丰富的服务治理特性,如注册中心集成、动态路由、熔断限流、可视化运维等。
随着业务规模扩大,单体应用被拆分为多个微服务,服务间通信成为分布式架构的核心挑战。RPC框架通过屏蔽网络细节、提供跨语言调用能力,使开发者能够专注于业务逻辑,从而支撑高并发、高可用、可扩展的大型分布式系统。