文档章节

Apache Thrift介绍

吕坤
 吕坤
发布于 2013/02/19 12:44
字数 1147
阅读 374
收藏 9

    Thrift是为了解决facebook系统中各系统之间大数据量的传输通讯以及系统之间语言环境不同需要跨平台这一特性而创造的。所以thrift可以支持多种程序语言,例如:  C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多种不同的语言之间通信thrift可以作为二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务。

    Thrift适用于程序对程序静态的数据交换,需要先确定好他的数据结构,他是完全静态化的,当数据结构发生变化时,必须重新编辑IDL文件、代码生成、再编译载入的流程,跟其他IDL(接口描述语言,Interface Definition Language)工具相比较可以视为是Thrift的弱项。

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

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通信(灰色部分)
thrift

图中前面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通道。



本文转载自:http://blog.csdn.net/amuseme_lu/article/details/6261719

吕坤
粉丝 5
博文 45
码字总数 11781
作品 0
海淀
程序员
私信 提问
架构设计:系统间通信(11)——RPC实例Apache Thrift 上篇

1、概述 通过上一篇文章《架构设计:系统间通信(10)——RPC的基本概念》的介绍,相信读者已经理解了基本的RPC概念。为了加深这个理解,后面几篇文章我将详细讲解一款典型的RPC规范的实现A...

引鸩怼孑
2016/01/29
189
0
HBase Thrift 使用以及Thriftserver 分析

对于thriftserver 我们主要从2个大的方面进行分析:thrift的使用;thriftserver的部署;thriftserver的启动,初始化;thriftserver的读写等请求处理; 一:thrift的使用 Thrift的主要目的是方...

玄陵
2017/09/05
0
0
在 Ubuntu 上安装 Apache Thrift

Thrift 是一个可伸缩的跨语言的服务开发框架。著名的 Key-Value 存储服务器 Cassandra 就是使用 Thrift 作为其客户端API的。 上一篇 文章 我们介绍了如何在 Windows 上安装 Apache Thrift,这...

红薯
2012/08/10
3K
0
在 Ubuntu 上安装 Apache Thrift

Thrift 是一个可伸缩的跨语言的服务开发框架。著名的 Key-Value 存储服务器 Cassandra 就是使用 Thrift 作为其客户端API的。 上一篇 文章 我们介绍了如何在 Windows 上安装 Apache Thrift,这...

曾沙
2012/11/27
1K
0
[Thrift]Apache Thrift入门Java实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/52606287 1. 概述 Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语...

sjf0115
2016/09/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 他只能用这个办法劝你注意身体了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# Kodaline《High Hopes》 《High Hopes》- Kodaline 手机党少年们想听歌,请使劲儿戳(这里) @xiaoshiyue :仙女...

小小编辑
25分钟前
691
14
Spring Boot Actuator 整合 Prometheus

简介 Spring Boot 自带监控功能 Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等。这一节结合 Prometheus 、Grafana 来更加直观...

程序员果果
34分钟前
9
0
Linux文件查找命令详解

对于文件查找,我们最好用的还是属于find命令了,在说find命令之前,先把另外几个查找命令介绍一下。 目录 0x01 查询命令介绍 0x02 find命令介绍 0x01 查询命令介绍 在介绍之前,首先先了解一...

无心的梦呓
34分钟前
6
0
快速掌握的测试用例优先级划分方法

怎么样的设计才能算测试用例 引自:IEEE Standard 610 (1990): A set of test inputs, execution conditions, and expected results developed for a particular objective, such as to exe......

测者陈磊
38分钟前
4
0
[mycat]Attribute value "roadNodeId,version" of type NMTOKEN must be a name token

不能逗号配两个字段的主键 primaryKey="roadNodeId,version" Caused by: io.mycat.config.util.ConfigException: org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 105; Attrib......

Danni3
43分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部