about thrift

28
THRIFT http://Jiaqing.me 2012-03-13

Upload: jiaqing-zheng

Post on 17-Dec-2014

551 views

Category:

Technology


6 download

DESCRIPTION

 

TRANSCRIPT

Page 1: About Thrift

THRIFThttp://Jiaqing.me

2012-03-13

Page 2: About Thrift

2

大纲

Thrift 简介Thrift 设计

Page 3: About Thrift

3

Thrift简介

1 Thrift 是什么 Thrift 解决什么问题 简单示例

Page 4: About Thrift

4

What: Introduction of Thrift

实现跨语言的服务访问框架是一种 IDL ,定义了数据结构和服务描述自动生成指定语言的客户端、服务端

opensource by

Page 5: About Thrift

5

What: Features

接口定义语言( IDL )多语言支持: C/C++/Java/PHP/Perf/Ruby..

名字空间支持通用数据类型支持容器类型支持自定义异常…

Page 6: About Thrift

6

What:Non-features

循环依赖继承多态重载混合数据类型的集合返回 null

Page 7: About Thrift

7

Why: the Problem FB Encountered各技术体系间的统一桥梁性能需求

Page 8: About Thrift

8

How: A Sample

下载源码包和代码编译器 http://thrift.apache.org/download/

Page 9: About Thrift

9

How: A Sample

编译,生成基础 jar 包

Page 10: About Thrift

10

How: A Sample

编写 .thrift 定义文件 : hello.thrift

namespace java service.demo service Hello { string helloString(1:string para) i32 helloInt(1:i32 para) bool helloBoolean(1:bool para) void helloVoid() string helloNull() }

Page 11: About Thrift

11

How: A Sample

生成客户端 / 服务端代码

Page 12: About Thrift

12

How: A Sample

编写客户端

Page 13: About Thrift

13

How: A Sample

服务具体实现

Page 14: About Thrift

14

How: A Sample

编写服务端

Page 15: About Thrift

15

Thrift设计

2 总体架构 主要功能 处理流程

Page 16: About Thrift

16

Arch

提供通用的传输层、协议层、 I/O 层(红色以下)

通过工具生成客户端 / 服务端读写逻辑(红色)

RD 只需关注业务逻辑(黄色)

Page 17: About Thrift

17

DataType

基本类型 bool : 布尔值, true 或 false ,对应 Java 的 boolean byte : 8 位有符号整数,对应 Java 的 byte i16 : 16 位有符号整数,对应 Java 的 short i32 : 32 位有符号整数,对应 Java 的 int i64 : 64 位有符号整数,对应 Java 的 long double : 64 位浮点数,对应 Java 的 double string : 未知编码文本或二进制字符串,对应 Java 的 String

结构体类型 struct :定义公共的对象( JavaBean 、 C 中的结构体)

容器类型: list : 对应 Java 的 ArrayList set : 对应 Java 的 HashSet map : 对应 Java 的 HashMap

异常类型: exception :对应 Java 的 Exception

服务类型: service : 对应服务的类

Page 18: About Thrift

18

Protocols

TBinaryProtocol :二进制编码格式

TCompactProtocol : 高效率、密集的二进制编码格式

TJSONProtocol : JSON 的数据编码协议

TSimpleJSONProtocol : 只提供 JSON 只写的协议,适用于通过脚本语言解析

Page 19: About Thrift

19

Transport

Tsocket :使用阻塞式 I/O 进行传输

TFramedTransport :非阻塞,按块大小传输

TNonblockingTransport :非阻塞,用于异步客户端

Page 20: About Thrift

20

Servers

TSimpleServer :单线程服务端,阻塞式 I/O

TThreadPoolServer :多线程服务端,阻塞式 I/O

TNonblockingServer :多线程服务端,非阻塞式 I/O

Page 21: About Thrift

21

Hello.java

Page 22: About Thrift

22

Process: Client

Page 23: About Thrift

23

Process: Server

Page 24: About Thrift

24

comparing: Size Comparison

http://jnb.ociweb.com/jnb/jnbJun2009.html

Page 25: About Thrift

25

Comparing : Performance

http://jnb.ociweb.com/jnb/jnbJun2009.html

Page 26: About Thrift

26

Comparing: Performance

http://jnb.ociweb.com/jnb/jnbJun2009.html

Page 27: About Thrift

27

参考资料

官网 http://thrift.apache.org/

wiki http://wiki.apache.org/thrift/FrontPage

论文 http://thrift.apache.org/static/thrift-20070401.pdf

Page 28: About Thrift

THRIFThttp://Jiaqing.me

2012-03-13

-END-