1.什么是RPC
RPC全称Remote Procedure Cll,远程过程调用。
RPC的作用体现在这样两个方面:
- 屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法
- 隐藏底层网络通信的复杂性,让我们更专注业务逻辑
RPC通信流程
发起调用请求的的一方叫调用方,被调用的一方叫做服务提供方,RPC框架里就封装了整个通信细节。
RPC一般默认采用TCP来传输,常用的HTTP也是建立在TCP之上的。
网络传输的数据必须是二进制,但是调用方的请求出入参数都是对象,对象没有办法直接在网络中传输,需要转化成可传输的二进制,并且要求转换算法是可逆的,这个过程叫做序列化。
把数据格式约定的内容叫做协议。一般协议分为两部分,数据头和消息体。数据头用于身份识别,包括写协议标识,数据大小,请求类型,序列化类型等信息。消息体主要是请求的业务参数信息和扩展属性。
根据协议格式,服务提供方就可以正确的从二进制数据中分割出不同的请求,同时根据请求类型和序列化类型,把二进制数据还原成请求对象,这个过程叫做反序列化。
服务提供方根据反序列化得到的请求对象找到对一个的实现类,完成真正的方法调用,然后把执行结果序列化后,会写到对应的TCP通道里面,调用方获取到应答的数据包后,在反序列化成应答对象,这样就完成了一次RPC调用。
服务提供者给出业务接口说明,在调用方的程序里面,RPC框架根据调用的服务接口提前生成动态代理实现类,并通过依赖注入注入到声明了该接口的相关业务逻辑里面。该代理实现类会拦截所有的方法调用,在提供的方法处理逻辑里面完成一整套的远程调用,并把结果返回给调用方。
RPC在框架中的位置
RPC是应用系统的经络。在这个应用中MQ来处理异常流程,Redis缓存热点数据,MySql持久化数据,都是属于RPC调用。
总结
RPC提供了一种透明的调用机制,让使用者不必显式的区分本地调用和远程调用。