PRC(Remote Procdure Call)
为什么需要RPC框架? 因为,两个服务器上提供的服务不在同一个内存空间中,所以我们需要通过网络编程才能传递参数去执行相关的方法,并且也需要通过网络来进行结果的接收。如果我们自己通过编程去实现的话,中间太多细节需要考虑如底层传输方式的选择以及相关序列化。
RPC的原理是什么? 我们可以将RPC分为以下六部分:
1、客户端 :远程调用的一端
2、客户端Stub : 调用端的代理层,主要职责是将你调用的类、方法、参数等信息传递到服务端
3、网络传输:真正进行传递参数和获取返回值的地方。这一部分我们可以通过网络通信框架来完成,例如Netty
4、服务端Stub:提供方的代理层,接收客户端的请求去找对应的暴露类去完成方法的调用和结果的返回
5、服务端:提供服务的一端
具体情况如下图所示:
1、客户端以本地的调用形式发起服务调用
2、客户端Stub接收到调用请求后,将类名方法等通过序列化的手段组装成能过进行网络传输的消息体(RpcRequest)
3、客户端Stub通过注册中心等途径找到服务提供方的地址,并将消息体发送给服务端
4、服务端Stub接收到请求后,进行反序列化得到java对象(RpcRequest)
5、服务端Stub根据RpcRequest中携带的类方法名参数等信息,通过代理的方式进行方本地方法调用
6、服务端Stub本地执行完毕之后,同样经过序列化的方式将返回值封装成RpcResponse,并进行网络传输
7、客户端Stub接收信息反序列化得到RpcResponse得到最终结果
至此,PRC大体的流程就完成了。