服务远程调用(RPC)架构及原理
文章目录
- 引言
- 一、RPC架构与核心组件
- 二、RPC调用流程解析
- 三、关键技术实现
- 1. 网络通信协议
- 2. 序列化与反序列化
- 四、RPC框架核心特性
引言
Simple RPC
在分布式系统中,服务远程调用(RPC) 是系统解耦与可扩展性的核心技术。它通过屏蔽底层通信细节,让开发者像调用本地函数一样使用远程服务。接下来我们将深入解析RPC的核心架构、通信流程及关键特性。
一、RPC架构与核心组件
RPC架构分为五个核心模块,各模块协同完成跨进程通信:
组件 | 功能描述 |
---|---|
客户端函数调用 | 开发者直接调用的接口(通常以SDK形式提供) |
客户端存根 | 1. 从注册中心获取服务地址 2. 序列化请求并发送至网络 |
注册中心 | 服务实例的地址簿,实现服务注册与动态发现 |
服务端存根 | 1. 接收网络请求并反序列化 2. 调用真实服务逻辑 |
服务端函数 | 实际业务逻辑实现 |
二、RPC调用流程解析
三、关键技术实现
1. 网络通信协议
- HTTP协议
典型实现:REST(JSON)、gRPC(Protobuf)、Hessian(二进制) - TCP协议
高性能框架:Netty、MINA(Dubbo支持双协议)
2. 序列化与反序列化
-
序列化协议对比
协议 性能 可读性 跨语言 Protobuf 高 差 支持 JSON 中 优 支持 XML(SOAP) 低 优 支持 -
选型建议
高性能场景选择Protobuf/Thrift,调试友好场景用JSON,传统企业系统可能采用SOAP。
四、RPC框架核心特性
-
协议透明性
开发者无需关注底层使用HTTP或TCP协议,框架自动处理网络传输细节。 -
数据透明性
接口调用与本地方法完全一致,参数自动完成序列化/反序列化。 -
跨语言支持
通过IDL(接口描述语言)定义服务,支持多语言客户端生成(如gRPC支持10+语言)。 -
服务治理能力
- 注册中心实现服务动态发现(如Nacos、Zookeeper)
- 熔断降级(如Sentinel)
- 负载均衡(如Ribbon)