RPC基础概念问答

RPC 原理图

下面的两张原理图是一样的。从第一张原理图中可以看到 rpc 传输过程中使用的传输协议,从第二张原理图中 sockets 是在 Kernel 中,也就是在操作系统的内核中。

RPC基础概念问答_第1张图片

RPC基础概念问答_第2张图片

什么是RPC??

远程过程调用。一个服务器使用另一台服务器上的提供的服务或方法。

RPC 解决的什么问题??

让分布式或微服务系统中不同服务之间的调用像本地调用一样简单。

为什么要使用 RPC??

因为两个服务器不是同一个操作系统,也不在一个内存空间,所以不能直接调用,需要通过网络来传递数据。

RPC 怎么解决通信??

在客户端和服务器之间建立 TCP 连接,rpc 所有传输的数据都在 TCP 连接中传输。连接可以是按需连接,调用结束后就断开,也可以是和长连接,多个rpc 共享同一个连接。

因为客户端和服务器是通过网络进行传输的,所以需要一个传输层,把函数id和序列化后的参数传递给服务器,并把序列化后的调用结果传回客户端。所以 TCP(大部分框架使用)和UDP都可以,也可以使用 http2(grpc使用)

RPC 怎么解决寻址的问题??

客户端上的应用告诉 rpc 框架,服务器的主机/IP地址、端口号、方法名称,这样就可以完成调用。

网络协议是基于二进制的,内存中的参数的值需要序列化成二进制的形式。

服务器收到请求后,要对参数进行反序列化,把二进制变成内存中的参数,把参数恢复成内存中的表达方式,然后找到对应的方法(寻址的一部分),进行本地调用,得到返回值。

服务器将返回值(序列化后)发给客户端,客户端收到返回值后,进行反序列化,然后传递给它上面的应用。

java的序列化方式:json。

RPC 和 socket 的区别??

socket是两个主机不同进程之间进行通信的方式。

rpc 是建立在 socket 之上的。rpc 通过 socket 实现通信, 也可以不用 socket,而使用其他的通信方式,比如命名管道(windows系统中)。

RPC 和 HTTP 的联系和区别??

http 协议是应用层的协议。http 是实现 rpc 的一种方式。可以使用 http 协议,也可以使用 TCP / UDP 协议。

你可能感兴趣的:(rpc)