RPC概述
什么是RPC?
Remote Procedure Call 远程过程调用协议
RPC是一种进程间都通信协议,允许程序调用网络上的过程或函数,而不用开发者显示的编写调用细节,使用起来就像是调用本地服务,其中的网络通信对开发者来说是透明的。RPC框架能为我们解决这些通信细节。
“RPC的主要功能是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。”
调用流程
1.服务消费方clinet调用本地服务client stub(存根);
2.client stub封装functions信息(方法名、参数等)用于网络传输(编码、序列化);
3.client stub通过socket找到服务地址,并将消息发给服务端;
4.server stub接收到消息(解码、反序列化);
5.server stub调用本地function(服务);
6.本地服务将执行结果返回给server stub;
7-8.server stub将结果封装成消息(编码、序列化),通过socket 传输消息给client stub;
9-10.client stub解析消息(解码、反序列化)把调用结果返回给client。
RPC调用过程中要面临的问题
- 序列化、反序列化 Hession| JSON|XML|Google Protocol Buffers|Thrift
- Socket 通信 BIO NIO
- 服务寻址 Zookeeper
Java 与 RPC
调用远程服务时使用代理方式封装通信细节,使用起来就像调用本地服务一样。
实现方式:
- JDK动态代理
- 字节码生成技术