移动广告引擎测试之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初探
笔者在测试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是一个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的测试技术