这是我参与[第五届青训营]伴学笔记创作活动的第14天。
什么是RPC框架?
RPC(Remote Promote Call) 一种进程间通信方式。允许像调用本地服务一样调用远程服务。
RPC框架的主要目标就是让远程服务调用更简单、透明。RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/JSON/二进制)和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。
RPC 框架的目标就是让远程服务调用更简单、透明,由 RPC 框架负责屏蔽底层的序列化、传输方式和通信的细节,开发者在使用时只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。RPC 框架作为架构微服务化的基础组件,它能大大降低架构微服务化的成本,提高调用方与服务提供方的研发效率。
在典型 RPC 的使用场景中,主要包含了服务发现、负载、容错、网络传输、序列化等组件,其中 ”RPC协议”就指明了服务如何进行序列化和网络传输,这也是RPC的核心功能。
- 应用级的RPC框架:Dubbo、Google RPC
- 通信框架:Netty
- 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)
RPC框架的核心组件:
- 客户端(Client):服务调用方。
- 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端。
- 服务端存根(Server Stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理。
- 服务端(Server):服务的真正提供者。
RPC是易用的。它是一个涉及动态代理、序列化、通信、反序列化的复杂过程,但是,以上这些过程都被RPC框架隐藏了起来。在使用RPC框架时,我们只需要调用服务提供方的接口便可以调用到服务提供方的具体实现,而不用关心其实现细节。
RPC是高效的。它通过将底层的通信协议封装了起来,RPC可以基于第四层的协议来提升信息传输的效率,并可以自由设计通信格式。
但是,RPC也有副作用。RPC的使用使得服务提供方不需要给出HTTP接口。这对非RPC的调用是不友好的,可见,RPC调用损失了服务的通用性、可读性。