基本概念
轻量级、跨语言的RPC框架
功能特点:
- 基于IDL(接口描述语言)生成跨语言的RPC clients and servers,支持超过20种语言
- 支持二进制的高性能的编解码框架
- 支持NIO的底层通信
- 相对简单的服务调用模型
Thrift架构
在介绍Thrift架构前,先了解下一般RPC框架的组成结构
RPC组成结构
包括服务器端发布和调用处理组件,网络IO组件,协议编解码组件,客户端调用组件,客户端代理组件等等
Thrift架构
各部分解释可看图中英文,释义补充: 1、用户自定义类型序列化方式将在通过IDL生成的代码中实现,实际也是根据struct中的各个field调用TProtocol的基础类型序列化实现 2、RPC stub中已经提供了Service Client,其作用是构造Thrift调用参数,发起调用,解析结果;而白色部分需用户自己写的Client是实例化TProtocol、TTransport组件,设置业务参数,通过调用Service Client发起请求
Thrift组件
TProtocol 协议和编解码组件 TTransport IO传输组件 TProcessor 服务调用处理组件
TServer,服务器网络IO
IDL 服务描述组件,负责生产跨平台客户端
协议就是约定数据的传输方式,如何底层报文中解析出结构化、有含义的数据,因为底层报文是不感知具体数据含义的。对于一个RPC调用的协议来说,要传输的数据主要有: 调用方 1.方法的名称,包括类的名称和方法的名称 2.方法的参数,包括类型和参数值 3.一些附加的数据,比如附件,超时事件,自定义的控制信息等等 返回方 1.调用的返回码 2.返回值 3.异常信息
Thrift协议具体约定参考:https://www.kancloud.cn/digest/thrift/118985
IDL 服务描述语言
IDL语法
namespace 定义包名 struct 定义服务接口的参数,返回值使用到的类结构。如果接口的参数都是基本类型,则不需要定义struct service 定义接口
支持的数据类型
bool 布尔型
byte 8位整数
i16 16位整数
i32 32位整数
i64 64位整数
double 双精度浮点数
string 字符串
binary 字节数组
list<i16> List集合,必须指明泛型
map<string, string> Map类型,必须指明泛型
set<i32> Set集合,必须指明泛型
生成的类包括5部分
接口类型,默认名称都是Iface。这个接口类型被服务器和客户端共同使用。服务器端使用它来做顶层接口,编写实现类。客户端代码使用它作为生成代理的服务接口。 会自动生成同步调用和异步调用的两个接口。 客户端类型,一个同步调用的客户端Client,一个异步调用的客户端AsyncClient
Processor,用来支持方法调用,每个服务的实现类都要使用Processor来注册,这样最后服务器端调用接口实现时能定位到具体的实现类。
方法参数的封装类,以"方法名_args"命名
方法返回值的封装类,以"方法名_result"命名
参考
http://blog.csdn.net/iter_zc/article/details/39496439