你真的了解Node.js吗?(五)
目录
什么是RPC
RPC(Remote Procedure Call Protocol,远程过程调用),允许像调用本地服务一样调用远程服务。也就说两台服务器A和B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间不能够直接调用,需要通过网络来表达调用的语音和传输调用的数据。
从上面的定义可以看出,RPC需要解决三个问题。
第一,解决服务器之间通讯的问题。这里我们把请求的一方认为是client,另一方主要是通过客户端和服务端之间建立TCP连接,即socket连接,远程过程调用的所有交换数据都是在这个连接里面进行传输。
第三,数据传递问题。当服务器A上的应用发起远程过程调用方法时,参数需要通过传输层协议来实现传输,例如TCP等基于二进制的网络协议,所以在内存中的参数需要序列化成二进制的形式。
整个RPC分为三个角色,之间的关系如下图:
Server:暴露服务的服务提供方。
Client:调用远程服务的服务消费方。
Registry:服务注册与发现的注册中心。
RPC调用流程
一次完整的同步调用流程如下:
1、RPC Client调用以本地调用方式调用服务
2、Client Sub接收到调用方负责将方法、参数等组装成能够进行网络传输的消息体
4、Server Sub收到消息后进行解码
5、Server Sub根据解码结果调用本地的服务
6、PRC Server上的服务执行并且将结果返回给Server Sub
7、Server Sub将返回的结果打包成消息并发送至Client Sub
8、Client Sub接收到消息后进行解码
9、PRC Client得到最终结果
和Ajax相同点
都是两个计算机之间的通信
Ajax:浏览器<=>服务器
RPC:服务器<=>服务器
都需要约定传输的数据结构
和Ajax不同点
寻址方式不一样
通信协议不同
Ajax:通过HTTP协议进行通信。
RPC:一般是内网服务之间通信,基于TCP或者UDP协议。
总结
Node.js和后端微服务之间一般是通过RPC框架来进行通信调用。在本小节中,我们了解了什么是RPC以及RPC的通信流程。并且和前端常用的Ajax进行了对比。相信你已经知道RPC的基础概念了。欢迎大家留言交流。