RPC 是 Remote Procedure Call 的简写,也就是远程调用,它是一种进程间通讯方式,是一种技术思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显示编码这个远程调用的细节。
也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接本地调用,需要通过网络来表达调用的语义和传达调用的数据。(通过网络传达调用的数据)
为什么要用RPC呢?
就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需要,比如不同的系统间的通讯,甚至不同的组织间的通讯,由于计算机能力需要横向拓展,需要在多台计算机组成的集群上部署应用。
而RPC就是要向调用本地的函数一样去调用远程的函数
步骤解析:
-
客户端调用 client (function)-> client Stub
-
序列化 client stub -> client socket
-
发送消息 client socket --(network)--> server socket
-
反序列化 server socket -> sever stub
-
调用server本地服务 server stub -> server (function)
-
服务处理 server
-
返回处理结果 并将结果序列化 server -> server stub ,server stub -> server socket
-
返回消息 server socket --(network)--> client socket
-
反序列化 client soket -> client stub
-
返回调用结果 client stub -> client
这样的过程就是RPC
所以RPC两个核心就是 通讯 和 序列化
为什么序列化?
序列化的目的就是为了方便传输
什么是序列化?
序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。