首页 > Web开发 > 详细

《精通并发与Netty》学习笔记(06 - Apache Thrift使用简介)

时间:2019-05-20 10:09:58      阅读:129      评论:0      收藏:0      [点我收藏+]

一、概述

Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。Thrift是由Facebook开发的,并在2008年捐给了Apache基金会,成为了一个孵化器项目。

Thrift 主要用于各个服务之间的RPC通信,支持跨语言,常用的语言比如C++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,JavaScript,Node.js,Smalltalk,and OCaml都支持。
Thrift是一个典型的CS(客户端/服务端)结构,客户端和服务端可以使用不同的语言开发,既然客户端和服务端能使用不同的语言开发,
那么一定就要有一种中间语言来联系客户端和服务端的语言,这种语言就是IDL(Interface Description Language)

Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,Thrift是一个驱动层接口,它提供了用于客户端使用多种语言实现的API。

Thrift是个代码生成库,支持的客户端语言包括C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 。它的目标是为了各种流行的语言提供便利的RPC调用机制,而不需要使用那些开销巨大的方式,比如SOAP。

要使用Thrift,就要使用一个语言中立的服务定义文件,描述数据类型和服务接口。这个文件会被用作引擎的输入,编译器生成代码为每种支持的语言生成RPC客户端代码库。这种静态生成的设计让它非常容易被开发者所使用,而且因为类型验证都发生在编译期而非运行期,所以代码可以很有效率地运行。

Thrift的设计提供了以下这些特性:
1、语言无关的类型
因为类型是使用定义文件按照语言中立的方式规定的,所以它们可以被不同的语言分析。比如,C++的结构可以和Python的字典类型相互交换数据。
2、通用传输接口
不论你使用的是磁盘文件、内存数据还是socket流,都可以使用同一段应用代码。
3、协议无关
Thrift会对数据类型进行编码和解码,可以跨协议使用。
4、支持版本
数据类型可以加入版本信息,来支持客户端API的更新。

二、Thrift的数据类型

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

基本类型:
  bool: 布尔值
  byte: 8位有符号整数
  i16: 16位有符号整数
  i32: 32位有符号整数
  i64: 64位有符号整数
  double: 64位浮点数
  string: UTF-8编码的字符串
  binary: 二进制串
结构体类型:
  struct: 定义的结构体对象
容器类型:
  list: 有序元素列表
  set: 无序无重复元素集合
  map: 有序的key/value集合
异常类型:
  exception: 异常类型
服务类型:
  service: 具体对应服务的类
Thrift的协议
Thrift可以让用户选择客户端与服务端之间传输通信协议的类别,在传输协议上总体划分为文本(text)和二进制(binary)传输协议。为节约带宽,提高传输效率,一般情况下使用二进制类型的传输协议为多数,有时还会使用基于文本类型的协议,这需要根据项目/产品中的实际需求。常用协议有以下几种:

TBinaryProtocol:二进制编码格式进行数据传输
TCompactProtocol:高效率的、密集的二进制编码格式进行数据传输
TJSONProtocol: 使用JSON文本的数据编码协议进行数据传输
TSimpleJSONProtocol:只提供JSON只写的协议,适用于通过脚本语言解析
Thrift的传输层
常用的传输层有以下几种:

TSocket:使用阻塞式I/O进行传输,是最常见的模式
TNonblockingTransport:使用非阻塞方式,用于构建异步客户端
TFramedTransport:使用非阻塞方式,按块的大小进行传输,类似于Java中的NIO
Thrift的服务端类型
TSimpleServer:单线程服务器端,使用标准的阻塞式I/O
TThreadPoolServer:多线程服务器端,使用标准的阻塞式I/O
TNonblockingServer:单线程服务器端,使用非阻塞式I/O
THsHaServer:半同步半异步服务器端,基于非阻塞式IO读写和多线程工作任务处理
TThreadedSelectorServer:多线程选择器服务器端,对THsHaServer在异步IO模型上进行增强

《精通并发与Netty》学习笔记(06 - Apache Thrift使用简介)

原文:https://www.cnblogs.com/happy2010/p/10886352.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!