RPC
RPC
RPC是什么?
RPC,Remote Procedure Call,远程过程调用
过程:就是业务处理、计算任务、也就是程序,像调用本地方法一样调用远程方法
RPC原理
1 | // 本地 |

- 客户端处理过程中调用Client stub(就像调用本地方法一样),传递参数
- Client stub将参数编组为消息,然后通过系统调用向服务端发送消息
- 客户端本地操作系统将消息从客户端机器发送到服务端机器
- 服务端操作系统将接收到的数据包传递给Server stub
- Server stub解组消息为参数
- Server stub再调用服务端的过程,过程结果以反方向的相同步骤响应给客户端
核心是代理机制:
- 本地代理存根Stub,通过动态代理或 AOP 拦截请求
- 本地序列化反序列化
- 网络通信
- 远程序列化反序列化
- 远程服务存根Skeleton
- 调用实际业务服务
- 原路返回服务结果
- 返回给本地调用方

RPC协议
RPC调用过程中需要将参数编组为消息进行发送,接收方需要解组消息为参数,过程处理结果同样需要经编组、解组。
消息由哪些部分构成及消息的表示形式就构成了消息协议。 RPC调用过程中采用的消息协议称为RPC协议。
RPC协议规定请求、响应消息的格式在TCP (网络传输控制协议)上可选用或自定义消息协议来完成RPC消息交互
我们可以选用通用的标准协议(如: http、 https) ,也可根据自身的需要定义自己的消息协议!
- 常见的RPC协议
RPC框架
封装好参数编组、消息解组、底层网络通信的RPC框架,让我们站在巨人肩膀上,只需专注过程代码的编写。
传统的webservice框架
- Apache CXF
- Apache Axis2
- Java自带的 JAX-WS
webService框架大多基于标准的SOAP协议
新兴的微服务框架
- Dubbo
- Spring Cloud alibaba
- Apache Thrift
为何使用RPC
- 服务化
- 可重用
- 系统间交互调用
其他相关
- Client、 Server、 calls、 replies、service、programs、procedures、version、marshalling(编组)、unmarshalling(解组)
- 一个网络服务由一个或多个远程程序集构成
- 一个远程程序实现一个或多个远程过程
- 过程、过程的参数、结果在程序协议说明书中定义说明
- 为兼容程序协议变更、一个服务端可能支持多个版本的远程程序
序列化工具
JDK Serializable
- Java自带的序列化机制,通过实现
java.io.Serializable接口来实现对象的序列化。
JSON-B / JSON-P
- Java EE的一部分,用于JSON数据的绑定和解析。
Jackson
- 一个快速的JSON处理工具,可以轻松地将Java对象转换成JSON格式,并且反过来将JSON字符串转换成Java对象。
Thrift
- Apache Thrift是一个软件框架,用于进行可扩展且跨语言的服务的开发。
Protobuf (Protocol Buffers)
- 由Google开发的一个数据描述语言,用于序列化结构化数据,如请求、响应、配置文件等。
