RPC框架
概念模型
- 本地函数调用和 RPC 调用的区别:函数映射、数据转成字节流、网络传输 - 本地函数调用:在同一台计算机上调用另一个函数,直接通过调用栈进行函数调用。 - RPC 调用:在两台计算机之间调用函数,需要通过网络进行数据传输。在 RPC 调用中,首先需要将函数调用映射到网络协议上,然后将数据转成字节流,通过网络传输到远程计算机,最后在远程计算机上进行函数调用。
- RPC 的概念模型:User、User-Stub、RPC-Runtime、Server-Stub、Server - User:表示调用 RPC 的客户端程序。 - User-Stub:User 程序中用于调用 RPC 的代码,它将 RPC 调用转换为网络协议格式,并通过网络发送到远程计算机。 - RPC-Runtime:负责处理 RPC 调用的后台程序,它接收用户-stub 发送的请求,找到对应的 Server-Stub,并将请求转发给它。 - Server-Stub:服务器程序中用于处理 RPC 调用的代码,它将接收到的网络数据转换为本地调用,并调用服务器程序中的真实函数。 - Server:真正执行函数调用的服务器程序。
- 一次 RPC 的完整过程: - User 程序调用 User-Stub 中的 RPC 函数。 - User-Stub 将 RPC 调用转换为网络协议格式,并通过网络发送到远程计算机。 - RPC-Runtime 收到请求后,找到对应的 Server-Stub,并将请求转发给它。 - Server-Stub 收到请求后,将接收到的网络数据转换为本地调用,并调用服务器程序中的真实函数。 - 服务器程序执行函数调用,并将结果返回给 Server-Stub。 - Server-Stub 将结果转换为网络协议格式,并通过网络返回给 User-Stub。 - User-stub 收到结果后,将其转换为本地数据类型,并返回给 User 程序。
- RPC 带来好处的同时也带来了不少新的问题,将由 RPC 框架来解决:
- 问题 1:RPC 调用需要通过网络进行数据传输,因此可能会受到网络延迟、带宽等影响,导致 RPC 调用的响应时间变长。
- 问题 2:RPC 调用需要将数据转成字节流,并通过网络进行传输,因此可能会受到数据格式、数据大小等因素的影响,导致数据传输的可靠性变差
- 问题 3:RPC 调用需要进行函数调用映射和协议解析等操作,因此可能会增加系统的复杂性和维护成本。