狠狠撸

狠狠撸Share a Scribd company logo
http://Jiaqing.me
      2012-03-13
大纲

? Thrift介绍
? Thrift设计




             2
Thrift介绍
? Thrift是什么
? Thrift解决什么问题
? 简单示例




                 3
What:Introduction of Thrift

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

 opensource by




                              4
What:Features

? 接口定义语言(IDL)
? 多语言支持:C/C++/Java/PHP/Perf/Ruby..
? 名字空间支持
? 通用数据类型
? 支持容器类型
? 支持自定义异常
?…



                                     5
What:Non-features

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




                    6
Why:the Problem FB Encountered

? 各技术体系间的统一桥梁
? 性能需求




                                 7
How:A Sample

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




                                      8
How:A Sample

? 编译,生成基础jar包




                9
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()

     }

                                                10
How:A Sample

? 生成客户端/服务端代码




                11
How:A Sample

? 编写客户端




               12
How:A Sample

? 服务具体实现




               13
How:A Sample

? 编写服务端




               14
Thrift设计
? 总体架构
? 主要功能
? 处理流程




           15
Arch

? 提供通用的传输层、协议层、I/O层(红色以下)
? 通过工具生成客户端/服务端读写逻辑(红色)
? RD只需关注业务逻辑(黄色)




                          16
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: 对应服务的类                                17
Protocols

? TBinaryProtocol
                :二进制编码格式
? TCompactProtocol: 高效率、密集的二进制编码格式
? TJSONProtocol : JSON 的数据编码协议
? TSimpleJSONProtocol : 只提供 JSON 只写的协议,
 适用于通过脚本语言解析




                                          18
Transport

? Tsocket:使用阻塞式 I/O 进行传输
? TFramedTransport :非阻塞,按块大小传输
? TNonblockingTransport :非阻塞,用于异步客户端




                                       19
Servers

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




                                       20
Hello.java




             21
笔谤辞肠别蝉蝉:颁濒颈别苍迟




                 22
笔谤辞肠别蝉蝉:厂别谤惫别谤




                 23
comparing:Size Comparison




                http://jnb.ociweb.com/jnb/jnbJun2009.html
                                                            24
Comparing : Performance




                 http://jnb.ociweb.com/jnb/jnbJun2009.html
                                                             25
颁辞尘辫补谤颈苍驳:笔别谤蹿辞谤尘补苍肠别




               http://jnb.ociweb.com/jnb/jnbJun2009.html
                                                           26
参考资料

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

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

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




                                                                27
http://Jiaqing.me
      2012-03-13
          -END-

More Related Content

Thrift