欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Thrift(三)——传输层、协议、处理器、服务端

程序员文章站 2022-06-17 12:02:01
...

下图为Thrift的网络堆栈结构简单表示
Thrift(三)——传输层、协议、处理器、服务端

传输层(Transport)

传输层提供了一个简单的抽象,以用于从/向网络读/写。这使得Thrift能够将底层传输与系统的其他部分隔离(例如序列化/反序列化)
以下是Transport接口提供的一些方法:

 - open
 - close
 - write
 - read
 - flush

除了上面的Transport接口以外,Thrift还提供ServerTransport来接收/创建原始传输对象。顾名思义,ServerTransport主要用于服务端,为传入连接创建新的传输对象。

 - open
 - listen
 - accept
 - close

以下是Thrift所支持的大部分语言都可用的一些传输:

 - file:从/向磁盘上的文件读/写
 - http

协议(Protocol)

协议抽象定义了一种将内存数据结构映射为wire-format的机制。换句话说,协议指定数据类型如何使用传输层来对自身编码/解码。所以说协议实现控制编码方案并负责(反)序列化。常用的几种协议:
协议抽象定义了一种将内存数据结构映射为wire-format的机制。换句话说,协议指定数据类型如何使用传输层来对自身编码/解码。所以说协议实现控制编码方案并负责(反)序列化。常用的几种协议:

  • TBinaryProtocol:二进制编码格式传输
  • TCompactProtocol:高效密集的二进制编码格式传输
  • TDenseProtocoal:与TCompactProtocol相比,meta信息略有不同
  • TJSONProtocol:使用JSON编码格式传输
  • TDebugProtocoal:文本格式 方便调试
    Thrift协议是面向流式的,不需要任何明确的架构,比如说在序列化时,不需要提前知道字符串的长度或是列表的元素数量。

处理器(Processor)

Thrift处理器封装了从输入流读取数据和写入输出流的功能。输入和输出流由Protocol对象表示。处理器的接口也很简单

interface TProcessor {
    bool process(TProtocol in, TProtocol out) throws TException
}

处理器的类型有以下几种:

  • TSocket:阻塞的io
  • TFramedTransport:非阻塞io
  • TFileTransport:可以将一组thrift请求写到文件中
  • TMemoryTransport:使用内存 I/O
  • TZlibTransport:使用zlib压缩
    服务端的特殊处理器由Thrift编译器生成。处理器从网络通道上读取数据(通过输入协议),将处理委托给处理程序(由用户实现),并通过通道写入响应(通过写出协议)

服务端(Server)

服务端汇集了上述各种功能:

  • 创建Transport
  • 为Transport创建读/写协议
  • 基于协议创建处理器
  • 等待传入连接并将其转交给处理器
    服务端的类型有以下几种:

  • TSimpleServer:简单的阻塞式单线程模式

  • TNonblockingServer:非阻塞式单线程模式(利用NIO的方式实现)
  • TThreadPoolServer:线程池模式。主线程负责监听连接请求,其他线程负责处理请求
  • THsHaServer:半同步半异步模式。是TNonblockingServer的子类,引入了线程池,主线程负责监听请求,读取数据,然后交由线程池处理请求。(需要制定Transport为TFramedTransport)
  • TThreadedSelectorServer:这是Thrift目前提供的*的模式,它有一个专门的AcceptThread来监听连接请求,因此能够及时响应大量并发连接请求;有连接请求进来时,AcceptThread将网络I/O操作分散到多个SelectorThread线程中来完成,因此能够快速对网络I/O进行读写操作,能够很好地应对网络I/O较多的情况;由一个负载均衡器SelectorThreadLoadBalancer对象将请求分配到不同的SelectorThread;在SelectorThread得到请求后,将请求转发给ExecutorService类型的工作线程池中的线程,进行具体的业务处理。
    (几种不同的服务端类型的具体使用在下一节讲述)

Thrift系列博客:
Thrift(一)——基本使用与概念
Thrift(二)——数据类型
Thrift(三)——传输层、协议、处理器、服务端
Thrift(四)——几种服务端类型

相关标签: thrift