Thrift
Apache软件 | |
0.9.3(2015 | |
类型 | 远程过程调用 |
许可协议 | Apache许可证 2.0 |
网站 | thrift |
Thrift
架 构
[编辑]Thrift
Thrift
- TBinaryProtocol – 一种简单的二进制格式,简单,
但 没 有 为空间效率 而优化 。比 文 本 协议处理起 来 更 快 ,但 更 难于调试。 - TCompactProtocol –
更 紧凑的 二 进制格式 ,处理起 来 通常 同 样高效 。 - TDebugProtocol – 一种人类可读的文本格式,
用 来 协助调试。 - TDenseProtocol –
与 TCompactProtocol类似,将 传输数 据 的 元信 息 剥 离。 - TJSONProtocol –
使用 JSON对数据 编码。 - TSimpleJSONProtocol – 一种只写协议,它
不能 被 Thrift解析 ,因 为它使用 JSON时丢弃了元 数 据 。适合用 脚本 语言来 解析 。[8]
- TFileTransport – 该传输协议会
写 文 件 。 - TFramedTransport –
当 使用 一个非阻塞服务器时,要求 使用 这个传输协议。它按帧来发送数 据 ,其中每 一帧的开头是长度信息。 - TMemoryTransport –
使用 存 储器映 射 输入输出。(Java的 实现使用 了 一 个简单的ByteArrayOutputStream
。) - TSocket –
使用 阻塞的 套接字 I/O来 传输。 - TZlibTransport –
用 zlib执行压缩。用 于连接 另一个传输协议。
Thrift还
- TNonblockingServer – 一个多线程服务器,它
使用 非 阻塞I/O(Java的 实现使用 了 NIO通 道 )。TFramedTransport必须跟这个服务器配 套使用 。 - TSimpleServer – 一个单线程服务器,它
使用 标准的 阻塞I/O。测试时很有用 。 - TThreadPoolServer – 一个多线程服务器,它
使用 标准的 阻塞I/O。
优点
[编辑]Thrift一些已经明确的优点包括:[
- 跟一些替
代 选择,比 如SOAP相 比 ,跨 语言序列 化 的 代 价更低 ,因 为它使用 二 进制格式 。 - 它有一个又瘦又干净的库,
没 有 编码框 架 ,没 有 XML配置 文 件 。 - 绑定
感 觉很自然 。例 如,Java使用 java.util.ArrayList<String>
;C++使用 std::vector<std::string>
。 - 应用层通讯格
式 与 序列 化 层通讯格式 是 完全 分 离的。它们都 可 以独立 修 改 。 - 预定义的
序列 化 格式 包括 :二 进制格式 、对HTTP友好 的 格式 ,以及紧凑的 二 进制格式 。 兼 作 跨 语言文 件 序列 化 。- 协议
使用 软版本号 机 制 软件版本 管理 [需要 解 释]。Thrift不 要求 一个中心化的和显式的版本号机制,例 如主 版本 号 /次 版本 号 。松 耦合的 团队可 以轻松 地 控 制 RPC调用的 演 进。 没 有 构建依 赖也不 含非标准化 的 软件。不 存在 不 兼 容 的 软件许可证混用 的 情 况。
创建一 个Thrift服 务
[编辑]Thrift
enum PhoneType {
HOME,
WORK,
MOBILE,
OTHER
}
struct Phone {
1: i32 id,
2: string number,
3: PhoneType type
}
ThriftPhoneType
Phone
类中enum
。
参 见
[编辑]数 据 序列 化 格式 比 较- Apache Avro
- ASN.1(
抽象 语法标记一 ) - Caucho
的 Hessian - Google
的 Protocol Buffers 外部 数 据 表示法 - ZeroC
的 ICE - SDXF(结构
化 数 据 交换格式 )
参考 文献
[编辑]- ^
安 装 和 使用 Java下 的 Apache Cassandra第 4部分 (Thrift客 户端). http://www.sodeso.nl/: Sodeso–软件开发解 决方案 . [2011-03-30]. (原始 内容 存 档于2010-08-15).Thrift
(是 一 个独立 的 Apache项目,简单地 说,就是一种二进制通讯协议。英文 ) - ^ Andrew Prunicki. Apache Thrift:
介 绍. http://www.ociweb.com/: 对象计算有限 公司 –一家开放解决方案公司. [2011-04-11]. (原始 内容 存 档于2011-07-23).
(通 过一种简单且直截了当的接口定义语言(IDL),Thrift允 许你定 义和创建一 种服务,这种服 务既可 以用多 种语言 来 实现,又 可 以由多 种语言 来 使用 。利用 代 码生成功 能 ,Thrift可 以创建 一 套文件 ,然 后 通 过这套文件 来 创建服 务端和 客 户端程 序 。除 了 互操作性 之 外 ,Thrift还非常 高 效 ,这得益 于一套独特 的 、在 时间和 空 间上都 高 效 的 序列 化 机 制 。英文 ) - ^ Thrift
的 要求 (页面存 档备份,存 于互联网档案 馆),要 支持 Windows参 见这里 (页面存 档备份,存 于互联网档案 馆)(英文 ) - ^ Fred Potter,
使用 Thrift + Cappuccino (页面存 档备份,存 于互联网档案 馆),parallel48的 甜美的 邮件博 客 ,2010年 6月 10日 。(英文 ) - ^ Andrew Prunicki. Apache Thrift:
代 码生成 . http://www.ociweb.com/: 对象计算有限 公司 –一家开放解决方案公司. [2011-04-12]. (原始 内容 存 档于2011-07-23).Thrift
(在 不同 程度 上 支持 许多语言,完 整 的 名 单如下 :(请小心 ,不能 仅仅因 为你的 语言在 某 种程度 上 被 支持 ,就假设它支持 所有 的 Thrift特性 。比 如Python,仅支持 TBinaryProtocol。)Cocoa、C++、C#、Erlang、Haskell、Java、OCaml、Perl、PHP、Python、Ruby和 Smalltalk。英文 ) - ^ Mark Slee、Aditya Agarwal、Marc Kwiatkowski,Thrift:
大 规模跨 语言服 务的实现 (页面存 档备份,存 于互联网档案 馆)(英文 ) - ^ 7.0 7.1 Andrew Prunicki. Apache Thrift:
介 绍. http://www.ociweb.com/: 对象计算有限 公司 –一家开放解决方案公司. [2011-04-11]. (原始 内容 存 档于2011-07-23).该栈
(的 顶层部分 是 从你的 Thrift定 义文件 生成 的 代 码。Thrift服 务在生成 的 客 户端和 处理器 代 码中提供 结果。在 图中,这些是 用 棕色框 表示 的 。被 发送的 数 据 结构(不同 于内建 类型)也由生成 的 代 码产生 。这些结果由 红色框 表示 。通 讯和传输协议是 Thrift运行时库的 一 部分 。因 此,用 Thrift,你可以定义一个服务,并可以自由 地 改 变通讯和传输协议,而无需重新 生成 你的代 码。Thrift还包括 一个服务器基础设施,以集成 各 个通讯和传输协议。它支持 阻塞、非 阻塞、单线程 以及多 线程服 务器。栈中“作 为I/O基 础”的 部分 则是因 语言而异的 。对于Java和 Python网络I/O,Thrift库对其内建 库起到 了 杠 杆作用 ,而C++的 实现使用 了 它自己 的 习惯。英文 ) - ^ Skelton, Steven. 对开发者
友好 的 Thrift请求日 志 . [2014年 7月 3日 ]. (原始 内容 存 档于2014年 7月 14日 ).(英文 )
外部 链接
[编辑]官 方 网站(英文 )- Thrift:
缺 失 的 指南 (页面存 档备份,存 于互联网档案 馆)(英文 ) - Thrift蚂蚁
任 务(页面存 档备份,存 于互联网档案 馆)(英文 ) - Thrift
指 导(页面存 档备份,存 于互联网档案 馆)(英文 )