RPC简介
RPC(Remote Procedure Call)中文名「远程过程调用」,拆开理解,「过程」也叫方法或函数,「远程」就是说方法不在当前进程里,而是在其他进程或机器上面,合起来 RPC 就是调用其他进程或机器上面的函数。简单讲,就是本地调用的逻辑处理的过程放在的远程的机器上,而不是本地服务代理来处理。一个完整的 RPC 框架主要有三部分组成:通信框架、通信协议、序列化和反序列化格式。
RPC与HTTP区别
- RPC 通常所讲是一个框架,而 HTTP(HyperText Transfer Protocol) 是基于 TCP 的实现的超文本传输协议,HTTP 是无状态协议;最初用于浏览器与服务器的通信,后来广泛用于各个服务间的通信。
- RPC是远程过程调用,RPC框架可以的通信过程可以使用各种通信协议(如 HTTP,TCP以及各种自定义协议)实现。良好的rpc调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用http调用则缺少了这些特性。
基本原理
首先来看看一个 基于 TCP 的 RPC 调用的基本流程,以便对它有个宏观的认识。
- 调用方(Client)通过本地的 RPC 代理(Proxy)调用相应的接口
- 本地代理将 RPC 的服务名,方法名和参数等等信息转换成一个标准的 RPC Request 对象,即组装成能够进行网络传输的消息体
- RPC 框架采用 RPC 协议(RPC Protocol)将 RPC Request 对象序列化成二进制形式,然后通过 TCP 通道传递给服务提供方 (Server)
- 服务端(Server)收到二进制数据后,将它反序列化成 RPC Request 对象(解码)
- 服务端(Server)根据 RPC Request 中的解码信息找到本地对应的方法,传入参数执行,得到结果,并将结果封装成 RPC Response 交给 RPC 框架
- RPC 框架将 RPC Response 对象序列化成二进制形式,然后通过 TCP 通道传递给服务调用方(Client)
- 调用方(Client)收到二进制数据后,将它反序列化成 RPC Response 对象,并且将结果通过本地代理(Proxy)返回给业务代码
- 调用方(Client)得到最终结果。
RPC的目标就是要将2~8这些步骤都封装起来,让用户对这些细节透明。