RPC基础概念问答

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

RPC基础概念问答
文章图片

什么是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 的联系和区别??
【RPC基础概念问答】http 协议是应用层的协议。http 是实现 rpc 的一种方式。可以使用 http 协议,也可以使用 TCP / UDP 协议。

    推荐阅读