Thrift 是什么?
Thrift源于大名鼎鼎的facebook之手,在2007年facebook提交Apache基金会将Thrift作为一个开源项目,对于当时的facebook来说创造thrift是为了解决facebook系统中各系统间大数据量的传 输通信以及系统之间语言环境不同需要跨平台的特性。所以thrift可以支持多种程序语言,例如: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多种不同的语言之间通信thrift可以作为二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务。Thrift适用于程序对程 序静态的数据交换,需要先确定好他的数据结构,他是完全静态化的,当数据结构发生变化时,必须重新编辑IDL文件,代码生成,再编译载入的流程,跟其他IDL工具相比较可以视为是Thrift的弱项,Thrift适用于搭建大型数据交换及存储的通用工具,对于大型系统中的内部数据传输相对于JSON和xml无论在性能、传输大小上有明显的优势。
Thrift是IDL(interface definition language)描述性语言的一个具体实现,关于IDL的话题我们可以追溯到CORBA盛行1999-2001年(Common Object Request Broker Architecture/公用对象请求代理体系结构),在 IDL 中我们似乎不会忘记到这几个关键字:module、interface、string、long 和 int,我还记得IDL利用module来创建名称空间,并且准确地映射为 Java 的 package,这些特性几乎和现在thrift的特性完全相同,所以thrift的设计思想和理念绝不是什么从火星来的new idea,看看在那个CORBA盛行的年代人们提出的概念,如图所示CORBA 请求的各个部分,回头我们再与thrift进行对比一下:
Thrift 基础架构
Thrift是一个服务端和客户端的架构体系,从我个人的感官上来看Thrift是一个类似XML-RPC+Java-to- IDL+Serialization Tools=Thrift 的东东,Thrift 具有自己内部定义的传输协议规范(TProtocol)和传输数据标准(TTransports),通过IDL脚本对传输数据的数据结构(struct) 和传输数据的业务逻辑(service)根据不同的运行环境快速的构建相应的代码,并且通过自己内部的序列化机制对传输的数据进行简化和压缩提高高并发、 大型系统中数据交互的成本,下图描绘了Thrift的整体架构,分为6个部分:1.你的业务逻辑实现(You Code) 2.客户端和服务端对应的Service 3.执行读写操作的计算结果4.TProtocol 5.TTransports 6.底层I/O通信
图 中前面3个部分是1.你通过Thrift脚本文件生成的代码,2.图中的褐色框部分是你根据生成代码构建的客户端和处理器的代码,3.图中红色的部分是2 端产生的计算结果。从TProtocol下面3个部分是Thrift的传输体系和传输协议以及底层I/O通信,Thrift并且提供 堵塞、非阻塞,单线程、多线程的模式运行在服务器上,还可以配合服务器/容器一起运行,可以和现有JEE服务器/Web容器无缝的结合。
数据类型
* Base Types:基本类型
* Struct:结构体类型
* Container:容器类型,即List、Set、Map
* Exception:异常类型
* Service: 定义对象的接口,和一系列方法
协议
Thrift可以让你选择客户端与服务端之间传输通信协议的类别,在传输协议上总体上划分为文本(text)和二进制(binary)传输协议, 为节约带宽,提供传输效率,一般情况下使用二进制类型的传输协议为多数,但有时会还是会使用基于文本类型的协议,这需要根据项目/产品中的实际需求:
* TBinaryProtocol – 二进制编码格式进行数据传输。
* TCompactProtocol – 这种协议非常有效的,使用Variable-Length Quantity (VLQ) 编码对数据进行压缩。
* TJSONProtocol – 使用JSON的数据编码协议进行数据传输。
* TSimpleJSONProtocol – 这种节约只提供JSON只写的协议,适用于通过脚本语言解析
* TDebugProtocol – 在开发的过程中帮助开发人员调试用的,以文本的形式展现方便阅读。
传输层
* TSocket- 使用堵塞式I/O进行传输,也是最常见的模式。
* TFramedTransport- 使用非阻塞方式,按块的大小,进行传输,类似于Java中的NIO。
* TFileTransport- 顾名思义按照文件的方式进程传输,虽然这种方式不提供Java的实现,但是实现起来非常简单。
* TMemoryTransport- 使用内存I/O,就好比Java中的ByteArrayOutputStream实现。
* TZlibTransport- 使用执行zlib压缩,不提供Java的实现。
服务端类型
* TSimpleServer - 单线程服务器端使用标准的堵塞式I/O。
* TThreadPoolServer - 多线程服务器端使用标准的堵塞式I/O。
* TNonblockingServer - 多线程服务器端使用非堵塞式I/O,并且实现了Java中的NIO通道
* TThreadedSelectorServer - 使用非堵塞式I/O,并且实现了Java中的NIO通道。
相关推荐
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年设计并发布,后来成为Apache软件基金会的顶级项目。它旨在通过定义一种简单的接口定义语言(IDL)来解决分布式系统之间的通信问题,允许程序员在不同的...
Thrift 是一个高性能的跨语言服务开发框架,最初由 Facebook 开发并开源。它通过接口定义语言(IDL)来定义数据类型和服务,使得不同语言之间能够进行高效且可靠的通信。Thrift IDL 文件被编译成多种编程语言的代码...
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年设计并发布,其初衷是为了在不同编程语言之间提供高效、轻量级的通信机制。Thrift通过定义一种中间表示(IDL,Interface Definition Language)来描述服务...
Thrift 是一个强大的跨语言服务部署框架,起源于 Facebook,并在2008年成为Apache软件基金会的开源项目。它的核心在于使用接口定义语言(IDL)来定义远程过程调用(RPC)接口和数据类型,之后通过Thrift编译器生成...
为了使用 Thrift,需要配置好相关的环境,这篇文章将介绍 Thrift 环境配置的方法。 Thrift 环境配置的重要性 ------------------------- Thrift 是一个强大的 RPC 框架,但是在使用前需要配置好相关的环境。配置...
首先,`Thrift简介.docx`可能是关于Thrift的入门文档,介绍了Thrift的概念、特点和用途。Thrift的主要特点包括高效、类型安全以及支持多种编程语言,如Java、C++、Python等。它通过定义服务接口,使得不同语言之间...
在本文中,我们将详细介绍如何搭建Thrift开发环境,并提供可执行程序和搭建说明文本。 1. **下载与安装** 首先,你需要从Thrift官方网站或Apache镜像站点下载适合你操作系统的最新版本的Thrift源代码包。解压后,...
下面我们将详细介绍Thrift.exe的安装、使用以及相关的开发过程。 首先,我们需要获取Thrift的执行文件。在这个例子中,我们有两个版本的Thrift:thrift-0.9.0.exe和thrift-0.8.0.tar.gz。`.exe`文件是Windows下的可...
1. **Thrift IDL**:介绍Thrift接口定义语言,它是如何定义服务接口和数据结构的,以及如何通过`thrift`编译器将这些定义转换为JavaScript代码。 2. **Thrift协议**:讲解Thrift的二进制传输协议,如何高效地序列化...
本文将详细介绍如何使用 Thrift 在 Java 环境下构建 `.jar` 文件,以便在不同的 Java 应用中使用 Thrift 生成的服务。 1. **安装 Thrift** 首先,你需要在本地安装 Thrift 编译器。访问 Thrift 官方网站...
通俗简单的介绍了什么是thrift,适用于thrift或RPC扫盲。
本文介绍如何在Windows环境下使用Visual Studio 2010进行Thrift的安装与使用。整个安装过程将绕过Cygwin或MinGW,仅依赖于Visual Studio 2010和从Thrift官网下载的源文件。适用于thrift-0.9.1.tar.gz和thrift-0.10.0...
下面将详细介绍在Linux系统中如何安装和测试Thrift。 首先,确保你的Linux系统已经更新到最新版本,这可以通过运行`sudo apt-get update`(Ubuntu/Debian)或`yum update`(CentOS/RHEL)来完成。接下来,我们需要...
### Thrift初级入门教程 #### 一、简介 Thrift 是由 Facebook 开发的一款软件库和一组代码...通过上述详细介绍,我们可以看到 Thrift 在类型系统、传输、协议、版本控制等方面的优势,以及它在实际应用中的强大功能。
1. **Thrift 框架介绍**: - Thrift 是由Facebook开发并开源的,后来被Apache基金会接纳为顶级项目。 - 它最初设计用于解决内部系统间的大量数据通信问题,后来成为通用的RPC(远程过程调用)框架。 - Thrift ...
下面将详细介绍如何在Linux和Windows系统上配置Thrift环境,以及如何使用C++通过Thrift访问HBase。 **一、Linux系统下Thrift安装** 1. **安装libevent**: 使用`./configure --prefix=/usr/local/libevent`配置,...
简要介绍了thrift框架的原理及使用方法,附带一个搭建thrift工程的例子。