- 浏览: 384945 次
- 性别:
- 来自: 南京
-
文章分类
- 全部博客 (209)
- db2 (4)
- oracle (1)
- sqlserver (16)
- java (54)
- jdbc (3)
- html、js (21)
- MQ、MB (6)
- uml (3)
- 格言 (7)
- 笑话 (3)
- 管理 (5)
- note (10)
- hibernate (1)
- 设计模式 (4)
- win8 (5)
- postgre (2)
- cxf (3)
- MyBatis (4)
- tomcat (9)
- servlet (2)
- ant (2)
- spring (5)
- windows (3)
- linux (7)
- struts2 (2)
- android (2)
- eclipse (1)
- drools (1)
- jmx (2)
- c++ (3)
- html、js、JSP (1)
- mysql (1)
- redis (1)
- 架构 (1)
最新评论
-
onlyor:
灰太狼1991 写道很受用,请教一下博主,mybatis模糊查 ...
MyBatis模糊查询 -
灰太狼1991:
很受用,请教一下博主,mybatis模糊查询是不是和版本也有关 ...
MyBatis模糊查询 -
zzgvictory:
你写的么,很美啊
js 画 玫瑰花 -
onlyor:
里面的算法值得研究啊
js 画 玫瑰花 -
bjqincy:
用 org.joda System.out.println(& ...
Java 获取 一个月有多少周
Thrift是什么?什么情况下使用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(interface definition language)描述性语言的一个具体实现,Thrift适用于程序对程序静态的数据交换,需要先确定好他的数据结构,他是完全静态化的,当数据结构发生变化时,必须重新编辑IDL文件,代码生成,再编译载入的流程,跟其他IDL工具相比较可以视为是Thrift的弱项,Thrift适用于搭建大型数据交换及存储的通用工具,对于大型系统中的子系统间数据传输相对于JSON和xml无论在性能、传输大小上有明显的优势。
Thrift 基础架构
Thrift是一个服务端和客户端的架构体系,就是socket传输,Thrift 具有自己内部定义的传输协议规范(TProtocol)和传输数据标准(TTransports),通过IDL脚本对传输数据的数据结构(struct) 和传输数据的业务逻辑(service)根据不同的运行环境快速的构建相应的代码,并且通过自己内部的序列化机制对传输的数据进行简化和压缩提高高并发、 大型系统中数据交互的成本,下图描绘了Thrift的整体架构,分为6个部分:1.你的业务逻辑实现(You Code) 2.客户端和服务端对应的Service 3.执行读写操作的计算结果4.TProtocol 5.TTransports 6.底层I/O通信
Thrift脚本的数据类型
* Base Types:基本类型
bool Boolean, one byte
byte Signed byte
i16 Signed 16-bit integer
i32 Signed 32-bit integer
i64 Signed 64-bit integer
double 64-bit floating point value
string String
binary Blob (byte array)
* Struct:结构体类型
* Container:容器类型,即List、Set、Map
map<t1,t2> Map from one type to another
list<t1> Ordered list of one type
set<t1> Set of unique elements of one type
* 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通道。
- thrift学习小结.rar (110.5 KB)
- 下载次数: 14
发表评论
-
多线程之Java线程阻塞与唤醒
2017-08-15 01:38 550线程的阻塞和唤醒在多线程并发过程中是一个关键点,当线程数量达 ... -
diffcount 代码差异统计工具
2016-08-12 18:11 1650使用diffcount,可以直接统计前后两个工程中,增加、 ... -
solr5 配置 与 创建core
2015-12-31 09:49 34291. 准备安装包(保证tomat能正常启动) so ... -
HTTP访问的两种方式(HttpClient和HttpURLConnection)
2015-12-30 11:58 2894直接上代码 使用HttpClient Name ... -
maven 使用slf4j与logback结合
2015-10-31 21:10 1398<dependency> & ... -
WAS性能优化分析工具
2015-10-23 14:40 778WAS性能优化分析工具被分析的文件heapdump165490 ... -
异常分类使用
2015-05-04 16:23 594异常分类使用 1.RuntimeException, ... -
一个java枚举的实例
2015-05-04 16:20 712一个java枚举的实例,直接上代码。 /** * ... -
java枚举实例
2015-05-04 16:18 517直接上代码 /** * * 〈枚举测试〉& ... -
POI excel 单元个的内容 自适应行高
2014-12-05 11:03 16880POI excel 单元个的内容 自适应行高 pub ... -
POI的一些操作 获取、删除区域Region 删除多行
2014-12-04 17:02 35981 通过行列获取区域 /** * 获取区域 ... -
Java 排序(转)
2014-11-27 13:51 741排序 public class Sort { ... -
log4j.properties
2014-11-27 13:26 904log4j.rootLogger=DEBUG,CONSOLE, ... -
corba,ejb ,webservice,rest分布式 区别
2014-09-30 11:04 997Corba,还是EJB,都有一些共同点:1) 通过专有的网络协 ... -
JAVA注解总结
2014-09-25 10:21 669最近打算搞清楚以下问题:1. 注解的原理与使用 2. Ja ... -
在同一个类中,线程资源竞争
2014-09-02 08:55 962/** * 在同一个类中,线程资源竞争 ... -
linux下Java字体乱码(解决图像中中文乱码)
2014-08-12 16:27 23823在Java中可以使用如下判断支持的字体 GraphicsE ... -
DBCP 数据源 下载jar包
2014-08-01 13:36 2495一.DBCP 是 Apache 软件基金组织下的开源连接池 ... -
RMI 实例
2014-06-05 09:39 526RMI 实例 package rmi.train; ... -
基于httpclient-4.3 和 4.1的编写小例子
2014-05-29 19:45 2003基于httpclient-4.3 和 4.1的编写小例子 ...
相关推荐
#### 三、小结 Thrift 提供了一种高效的跨语言服务开发方式,尤其适用于多语言环境下的微服务架构。通过本文的学习,我们可以了解到如何使用 Thrift 构建 C# 版本的服务端和客户端应用程序,并掌握了从定义服务接口...
1.6 小结 16 第2章 NoSQL上手初体验 17 2.1 第一印象——两个简单的例子 17 2.1.1 简单的位置偏好数据集 17 2.1.2 存储汽车品牌和型号数据 22 2.2 使用多种语言 30 2.2.1 MongoDB驱动 30 2.2.2 初识Thrift ...
1.3 本章小结 第2 部分 数据逻辑. 2 将数据导入导出Hadoop. 2.1 导入导出的关键要素 2.2 将数据导入Hadoop . 2.2.1 将日志文件导入Hadoop 技术点1 使用Flume 将系统日志文件导入HDFS 2.2.2 导入...
### 大数据技术之Hive全方位解析...**小结**:通过以上的介绍,我们不仅了解了Hive的基本概念、架构和优缺点,还深入探讨了如何安装和配置Hive。对于想要入门大数据分析领域的开发者来说,掌握Hive是非常重要的第一步。
#### 四、小结 本文档主要介绍了如何安装配置 Hive 并进行基本的操作,包括创建和删除表、加载数据等。此外,还详细介绍了 Map 端 Join 操作的实现方法,这在实际应用中非常有用。通过对这些内容的学习,读者可以更...