首页 理论教育 Thrift:基本概念简介

Thrift:基本概念简介

时间:2023-07-02 理论教育 版权反馈
【摘要】:Thrift最初由Facebook用做系统内各语言之间的RPC通信。Apache Thrift—可伸缩的跨语言服务开发框架。Thrift的基本概念包括数据类型、传输协议、传输层、服务端类型等。

Thrift:基本概念简介

Thrift最初由Facebook用做系统内各语言之间的RPC通信。2007年由Facebook贡献到Apache基金,之后发展成为一种可伸缩的、跨语言的服务开发框架。Apache Thrift可伸缩的跨语言服务开发框架

我们熟知的服务调用方式有很多种,比如:基于SOAP消息格式的Web Service,基于JSON消息格式的RESTful等等。所使用的数据传输方式有:XML、JSON等,然而XML相对体积太大,传输效率低,JSON体积较小,但还不够完善。

Apache Thrift采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中使用,如:Java、C++、Python、PHP、Ruby、Perl、C#等等。其传输数据采用二进制格式,相对XML和JSON体积更小,对于高并发、大数据量和多语言的环境更有优势。

Spark Thrift Server是Spark框架中的一个应用程序,Spark Thrift Server启动的时候,会启动Spark Context、Spark SqlContext,最终调用第三方Hive框架中的HiveServer2;而第三方Hive框架的HiveServer2不仅仅提供给Spark Thrift Server使用,而且作为API接口,可以直接提供Java JDBC连接Hive Server2;第三方Hive框架中的HiveServer2使用ApacheThrift的协议开发,Thrift是Facebook实现的一种高效的、支持多种编程语言的远程服务调用的框架。

Thrift的基本概念包括数据类型、传输协议、传输层、服务端类型等。数据类型包含基本类型、结构体、容器、异常、服务类型;传输协议是Thrift客户端和服务器端远程调用传输数据采取的数据格式;传输层是数据传输方式;服务端类型包括单线程服务、多线程服务等。

1.数据类型

Thrift脚本可定义的数据类型包括以下几种类型:

1)基本类型:

●bool:布尔值,true或false,对应Java的boolean。

●byte:8位有符号整数,对应Java的byte。

●i16:16位有符号整数,对应Java的short。

●i32:32位有符号整数,对应Java的int。

●i64:64位有符号整数,对应Java的long。

●double:64位浮点数,对应Java的double。

●string:未知编码文本或二进制字符串,对应Java的String。

2)结构体类型:

●struct:定义公共的对象,类似于C语言中的结构体定义,在Java中是一个JavaBean。

3)容器类型:

●list:对应Java的ArrayList。

●set:对应Java的HashSet。

●map:对应Java的HashMap。(www.xing528.com)

4)异常类型:

●exception:对应Java的Exception。

5)服务类型:

●service:对应服务的类。

2.协议

Thrift可以让用户选择客户端与服务端之间传输通信协议的类别,在传输协议上总体划分为文本(Text)和二进制(Binary)传输协议,为节约带宽,提高传输效率,一般情况下使用二进制类型的传输协议为多数,有时也会使用基于文本类型的协议,这需要根据项目/产品中的实际需求。常用协议有以下几种:

1)TBinaryProtocol——二进制编码格式进行数据传输。

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

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

4)TSimpleJSONProtocol——只提供JSON只写的协议,适用于通过脚本语言解析。

3.传输层

Thrift常用的传输层有以下几种:

1)TSocket——使用阻塞式I/O进行传输,是最常见的模式。

2)TFramedTransport——使用非阻塞方式,按块的大小进行传输,类似于Java中的NIO。

3)TNonblockingTransport——使用非阻塞方式,用于构建异步客户端。

4.服务端类型

Thrift常见的服务端类型有以下几种:

1)TSimpleServer——单线程服务器端使用标准的阻塞式I/O。

2)TThreadPoolServer——多线程服务器端使用标准的阻塞式I/O。

3)TNonblockingServer——多线程服务器端使用非阻塞式I/O。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈