RPC(远程过程调用)在实际项目中应用非常广泛,如WebService 就是一种基于 Http 协议的 RPC框架,目前也有许多的远程调用框架如dubbo,Zookeeper,gateway网关等,对于这部分涉及到一些服务提供者和消费者的一些概念,需要去梳理一下
RPC架构
一个完整的RPC架构里面包含了四个核心的组件,分别是 Client,Client Stub,Server以及Server Stub,这个Stub可以理解为存根
客户端(Client)
👉:服务的调用方。
客户端存根(Client Stub)
👉:存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方
服务端(Server)
👉:真正的服务提供者。
服务端存根(Server Stub)
👉:接收客户端发送过来的消息,将消息解包,并调用本地的方法
核心流程
1 服务消费方(client)在本地发起服务调用;
2 client stub 接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体
3 client stub找到服务地址,并将消息发送到服务端
4 server stub收到消息后进行解码
5 server stub根据解码结果调用本地的服务
6 本地服务执行并将结果返回给server stub
7 server stub将返回结果打包成消息并发送至消费方
8 client stub接收到消息,并进行解码
9 服务消费方得到最终结果
🔥 RPC的目标就是要 2~8 这些步骤都封装起来,让用户对这些细节透明JAVA一般使用动态代理方式实现远程调用
RMI
Java远程方法调用,即Java RMI(Java Remote Method Invocation)是 Java 编程语言里,一种用于实现远程过程调用的应用程序编程接口,是
分布式通信框架,是Java在JDK1.2中实现的,它大大增强了Java开发分布式应用的能力
拓展:
序列化
目前互联网公司广泛使用 Protobuf、Thrift、Avro 等成熟的序列化解决方案来搭建 RPC 框架
,这些都是久经考验的解决方案
Netty
待续........
评论区