vlambda博客
学习文章列表

移动广告引擎测试之Thrift初探


移动广告引擎测试之Thrift初探




平安夜快乐


移动广告引擎测试之Thrift初探
移动广告引擎测试之Thrift初探
移动广告引擎测试之Thrift初探
移动广告引擎测试之Thrift初探

Christmas Eve

24th of December

May the glow of Christmas candle fill your heart with peace and pleasure and make your New Year bright. Have a love filled Christmas and New Year!







移动广告引擎测试之Thrift初探

移动广告引擎测试之Thrift初探


笔者在测试DSP广告引擎功能过程中,经常会接触到一类后缀为thrift的协议文件,于是笔者对thrift做了粗略的了解,在此做些简单的学习总结,错误之处还请指正。

Thrift是一种开源的,在多种不同的语言之间通信、可以作为二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC(Remote Procedure Call)服务。

Thrift是适用于搭建大型数据交换及存储的通用工具,对于大型系统中的子系统间数据传输相对于JSON和xml无论在性能、传输大小上有明显的优势。

Thrift通过一个中间语言IDL(Interface Definition Language)来定义RPC的数据类型和接口,这些内容写在以.thrift结尾的文件中。.thrift文件中主要与以下几个内容:变量声明(variable)、数据声明(struct)和服务接口声明(service, 可以继承其他接口),文件维护好后通过特殊的编译器来生成不同语言的代码,以满足不同需要的开发者,比如java开发者可以生成java代码,c++开发者可以生成c++代码,生成的代码中不但包含目标语言的接口定义、方法、数据类型、还包含有RPC协议层和传输层的实现代码。

移动广告引擎测试之Thrift初探


如上图所示为thrift协议栈整体的架构,thrift是一个C/S架构体系。

-> 第一层是用户自行实现的业务逻辑代码。


-> 第二层是由thrift编译器自动生成的代码,主要用于结构化数据的解析,发送和接收。

TServer主要任务是高效的接受客户端请求,并将请求转发给Processor处理。Processor负责对客户端的请求做出响应,包括RPC请求转发,调用参数解析和用户逻辑调用,返回值写回等处理。


-> TProtocol是用于数据类型解析的,将结构化数据转化为字节流给TTransport进行传输。

在传输协议上总体上划分为文本(text)和二进制(binary)传输协议, 为节约带宽,提供传输效率,一般情况下使用二进制类型的传输协议为多数,有时还会使用基于文本类型的协议,这需要根据项目 / 产品中的实际需求。常用协议有以下几种:

1)  TBinaryProtocol:二进制编码格式进行数据传输;

2)  TCompactProtocol:高效率的、密集的二进制编码格式进行数据传输;

3)  TJSONProtocol:使用JSON的数据编码协议进行数据传输。


-> TTransport是与底层数据传输密切相关的传输层,负责以字节流方式接收和发送消息体,不关注是什么数据类型。


-> 底层I/O负责实际的数据传输,包括socket、文件和压缩数据流等。

值得注意的是,Thrift适用于程序静态的数据交换,需要先确定好数据结构,由于thrift是完全静态化的,当数据结构发生变化时,必须重新编辑IDL文件,代码生成,再编译载入的流程。这一点在测试过程中需要特别注意,笔者就曾踩过因thrift协议更新,但未重新编译而导致功能不生效的坑。

另外,Thrift中还有一个广告系统中常用的功能,即TFileTransport,使用该功能进行结构化日志,使从日志文件的一个特定点读取及解释数据成为可能。




Qtest是360旗下的专业测试团队!

是WEB平台部测试技术平台化、效率化的先锋力量!


陪伴是最长情的告白

每日为你推送最in的测试技术