RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。
常见的RPC框架有: 比较知名的阿里Dubbo、Google的GRPC、Go的RPCX、Apache的Thrift,SpringCloud
两个或多个应用程序都分布在不同的服务器上,它们之间的调用都像是本地方法调用一样
示意图
RPC两个核心模块:序列化和通讯
在RPC中,Client叫做服务消费者,Server叫做服务提供者
RPC调用流程说明
-
服务消费方(client),以本地调用方式调用服务
-
client stub 接收到调用后负责将方法、参数等封装成能够进行网络传输的消息体
-
client stub 将消息进行编码并发送到服务器
-
server stub 收到消息后进行解码
-
server stub 根据解码结果调用本地API
-
本地服务 执行并返回结果给 server stub
-
server stub 将返回结果导入进行编码并发送至消费方
-
client stub 接收到数据进行解码
-
服务消费方得到结果
RPC的目标就是将2~8的步骤封装起来,用户无需关注这些细节,可以像调用本地方法一样即可完成远程服务调用
图解
=============================================================================
代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。
Java中代理模式分为静态代理和动态代理模式