RPC 原理图

上面的两张原理图是一样的。从第一张原理图中能够看到 rpc 传输过程中应用的传输协定,从第二张原理图中 sockets 是在 Kernel 中,也就是在操作系统的内核中。

什么是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 协定。