vlambda博客
学习文章列表

你真的了解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的基础概念了。欢迎大家留言交流。