前言:这两天复习了一下RPC框架,在这里做一下整理并打算用java实现一下
什么是RPC
RPC(Remote Procedure Call)远程过程调用协议,是一种可以让用户在本地通过网络在远程计算机上请求服务,而并不需要了解底层网络技术的传输协议。建立在OSI第五层会话层之上,封装了TCP/UDP的连接过程,使开发人员可以获得调用远程接口和调用本地接口一样的操作体验。
RPC通信过程
理解了RPC,我们在着眼于RPC是如何建立通信的,前文我们提到,RPC建立在应用层上,所以RPC一般默认采用TCP来传输信息,在rpc框架中,有几个重要的基本组件:
1.Client(caller):发出调用请求,以本地调用方式调用服务
2. client stub:接收到调用指令之后,将方法、参数等序列化为可以进行网络传输的消息体,通过socket发送给服务端;同时,接受从服务端发回的处理结果并将其返回给客户端
3. server stub(Skeleton):接受消息并将其反序列化,解析请求任务后将请求转发给server,在server解决问题之后再序列化结果发送回客户端
4. Server(callee):接受server stub的调用请求,调用本地方法并将结果发送给server stub
以下是RPC调用的整体概念图
RPC特性
- RPC基于TCP协议建立通信,使用长连接,不必每次通信都要3次握手,减少网络开销
- 解构服务,异步调用,在Birrell 和 Nelson发表的论文上对RPC做了经典的诠释,当A进程想要调用另一台机器上B进程的方法时,A的调用进程被挂起,同时,B上的被调用进程开始执行,等到结果返回后,A接收消息继续执行,整个过程,A所在机器和A进程的其他方法时不受影响继续执行的
RPC框架实现技术
1. 动态代理:
2. 序列化:
3.NIO通信:
4.服务注册中心:
5.负载均衡:
6.健康检查:
RPC