RPC(Remote Procedure Call,远程过程调用)协议是分布式系统中实现跨进程通信的核心机制之一。它允许客户端像调用本地函数一样调用远端服务器上的函数。
根据通信方式、数据编码方式和平台兼容性不同,常见的 RPC 协议分为以下几类,每类都有各自的优缺点和适用场景:
✅ 一、常见 RPC 协议类别对比
类别
代表协议
编码格式
传输协议
优点
缺点
典型应用场景
基于 HTTP/JSON
RESTful API、JSON-RPC
JSON
HTTP/HTTPS
易用、调试方便、语言无关
性能较低、无严格接口约束
Web 服务、跨语言微服务通信
基于 HTTP/Protobuf
gRPC
Protobuf(二进制)
HTTP/2
高性能、强类型、支持流、IDL 生成代码
学习曲线略高、调试困难
微服务通信、移动端、边缘计算
基于 TCP/自定义协议
Thrift、Dubbo、Hessian
自定义或 Protobuf
TCP
高性能、灵活、支持多语言
上手复杂、配置多
大规模分布式系统、企业后端
基于消息队列
RabbitMQ RPC、Kafka RPC
JSON/Protobuf
AMQP、Kafka
解耦强、支持异步
实时性略低、依赖 MQ 系统
解耦服务、任务分发、微服务架构
基于 Socket
自定义 RPC
任意
TCP/UDP
灵活、无依赖
开发难度大、易出错
游戏服务器、实时通讯、嵌入式系统
WebSocket RPC
JSON-RPC over WebSocket
JSON
WebSocket
全双工通信、低延迟
复杂性略高、浏览器兼容问题
浏览器与服务器实时通信
GraphQL over HTTP
Apollo GraphQL
JSON
HTTP
灵活查询、多字段聚合
缺乏标准的错误处理机制
前后端分离接口、聚合微服务数据
🧩 二、各类代表协议简介与特点
1️⃣ gRPC(Google RPC)
编码方式:Protobuf
传输协议:HTTP/2
特点:
自动生成代码(强接口约束)
支持双向流通信、拦截器
高性能(压缩+二进制)
✅ 适用场景:微服务、高性能内网通信、移动/边缘服务
2️⃣ JSON-RPC / RESTful API
编码方式:JSON
传输协议:HTTP/HTTPS
特点:
人类可读,调试方便
与浏览器、前端框架天然兼容
语言无关、易跨平台
✅ 适用场景:开放 API、跨语言服务、前后端接口通信
3️⃣ Apache Thrift
支持多种语言(Java、C++、Python...)
可选传输协议和数据编码方式
特点:
高度可配置(协议+传输分离)
性能好、支持异步
✅ 适用场景:大型分布式系统、跨语言后端通信
4️⃣ Dubbo(阿里)
支持多种协议(Dubbo、REST、gRPC)
特点:
支持服务治理、动态路由
Java 生态深度整合(Spring)
✅ 适用场景:企业 Java 微服务系统,阿里系架构
5️⃣ 基于消息队列的 RPC(如 RabbitMQ)
模式:RPC 请求通过 MQ 发到远端,响应回调再写回
特点:
解耦通信,支持异步处理
消息可靠性高
✅ 适用场景:任务队列、低频调用、系统解耦
📌 三、总结表格
维度
gRPC
JSON-RPC/REST
Thrift
Dubbo
MQ RPC
自定义 Socket
性能
⭐⭐⭐⭐
⭐⭐
⭐⭐⭐
⭐⭐⭐⭐
⭐⭐
⭐⭐⭐⭐
易用性
⭐⭐
⭐⭐⭐⭐
⭐⭐
⭐⭐
⭐⭐
⭐
可读性
⭐
⭐⭐⭐⭐
⭐⭐
⭐⭐
⭐⭐
⭐
跨语言支持
⭐⭐⭐
⭐⭐⭐⭐
⭐⭐⭐⭐
⭐⭐
⭐⭐⭐
⭐
推荐用途
微服务、移动端
开放 API、前端
分布式后端
Java 后端
解耦异步
游戏、物联网