RPC(Remote Promote Call)
RPC(Remote Promote Call): 一种进程间通信方式. 允许像调用本地服务一样调用远程服务.
RPC 框架的主要目标就是让远程服务调用更简单, 透明. RPC 框架负责屏蔽底层的传输方式 (TCP 或者 UDP), 序列化方式(xml/JSON / 二进制) 和通信细节. 开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可, 并不需要关心底层通信细节和调用过程.
RPC 框架原理图:
例如两台服务器 A 和 B,A 服务器上部署一个应用, B 服务器上部署一个应用, A 服务器上的应用想调用 B 服务器上的应用提供的接口, 由于不在一个内存空间, 不能直接调用, 所以需要通过网络来表达调用的语义和传达调用的数据.
调用过程:
首先, 要解决通讯的问题, 主要是通过客户端和服务器端之间建立 TCP 连接, 远程过程调用的所有交换的数据都在这个连接里传输. 连接可以是按需连接, 调用结束后就断掉, 也可以是长连接, 多个远程过程调用共享一个连接.
第二, 要解决寻址的问题, A 服务器上的应用要调用 B 服务器上的应用, A 服务器上的应用需要通过底层 RPC 框架得知: 如何连接到 B 服务器 (主机或 IP 地址) 以及特定的端口, 方法的名称等信息, 这样才能完成调用.
第三, A 服务器上的应用发起远程调用时, 方法的参数需要通过底层的网络协议如 TCP 传递到 B 服务器, 由于网络协议是基于二进制的, 内存中的参数需要序列化成二进制形式, 然后再通过寻址和传输将序列化的二进制发送给 B 服务器.
第四: B 服务器收到请求后, 需要进行反序列化, 恢复为内存中的表达方式, 然后找到对应的方法进行本地调用并返回, 序列化返回值并发送给 A 服务器.
第五: A 服务器收到 B 服务器的返回值后, 进行反序列化, 恢复为内存中的表达方式, 然后交给 A 服务器上的应用进行处理.
为什么需要 RPC, 无法在一个进程, 甚至一个计算机内通过本地调用的方式完成的需求, 比如不同的系统间的通讯, 甚至不同的组织间的通讯. 由于计算能力需要横向扩展, 需要在多台机器组成的集群上部署应用.
refer:
谁能用通俗的语言解释一下什么是 RPC 框架? https://www.zhihu.com/question/25536695
RPC 架构简单理解
来源: http://www.bubuko.com/infodetail-3166575.html