前言
Apache Thrift是一种RPC框架。
RPC(Remote Procedure Call)即远程过程调用。其调用协议通常包含传输协议和序列化协议。传输协议包含: 如著名的gRPC(grpc / grpc.io) 使用的 http2 协议,也有如dubbo一类的自定义报文的tcp协议。序列化协议包含: 如基于文本编码的 xml json,也有二进制编码的 protobuf hessian等。
为什么需要RPC
我们现在假设一个场景:服务器1应用程序A
里有方法a
,服务器2应用程序B
里有方法b
。如果应用程序A
需要调用方法a
,直接在本地内存调用即可。那么如果应用程序A
想要调用方法b
呢?
这种跨进程甚至跨服务器的调用即需要用到RPC(远程过程调用)
。需要通过网络传输来表达调用的语义和传达调用的数据。
RPC怎么实现
- 服务器A和服务器B如何实现网络连接?或者说客户端和服务端如何实现网络连接?目前网络同通信协议包含TCP协议、UDP协议或者HTTP协议等。目前RPC框架常用的就是TCP协议来建立连接。这时服务器A如果想连接到服务器B,就需要告诉底层的RPC框架服务端的IP、PORT、方法名、方法参数等。
- 服务器A的底层RPC框架拿到远程连接的参数后,开始发起远程调用。需要传输的数据是基于网络协议传输的,以TCP协议举例,因为网络协议是基于二进制的,那么内存中的数据就需要序列化(Serialize)或编码(m