Thrift 概念

本文最后更新于:2024年3月18日 凌晨

Thrift 概念

  • Thrift是一个轻量级,跨语言的RPc框架,主要用于各个服务之间的RPC通信,最初由Facebook于2007年开发,2008年进入Apache开源项目,它通过自身的IDL中间语言,并借助代码生成引擎生成各种主流语言的RPC服务端/客户端模板代码。
  • Thrift支持多种不同的编程语言,包括C++,Java,Python,PHP,Ruby,Erlang,Haskell,C#,Cocoa,Javascript,Node js,Smalltalk,ocaml,Golang等。

架构

  • Thrift技术栈分层从下向上分别为:服务层(Server Layer),处理层(Processor Layer),协议层(Protocol Layer)和传输层(Transport Layer)
  • 服务层(Server Layer):整合下述组件,提供具体的网络IO模型(单线程/多线程/事件驱动),形成最终的服务。
  • 处理层(Processor Layer):处理层是由具体的IDL(接口描述语言)生成的,封装了具体的底层网络传输和序列化方式,并委托给用户实现的Handler进行处理。
  • 协议层(Protocol Layer):协议层定义了数据传输格式,负责网络传输数据的序列化和反序列化,比如说JSON,XML,二进制数据等。
  • 传输层(Transport Layer):传输层负责直接从网络中读取和写入数据,它定义了具体的网络传输协议,比如说TCP/P传输等。
image-20220526204050741

Thrift⽀持的协议及服务模型。

协议层

参数 描述
TBinaryProtocol 二进制格式
TCompactProtocol 压缩格式
TJSONProtocol JSON格式
TSimpleJSONProtocol 提供JSON只写协议,生成的文件很容易通过脚本语言解析,
TDebugProtocol 使用易懂的可读的文本格式,以便于debug

传输层

参数 描述
TSocket 阻塞式socker
TFramedTransport 以frame为单位进行传输,非阻塞式服务中使用,
TFileTransport 以文件形式进行传输,
TMemoryTransport 将内存⽤于I/O,java实现时内部实际使⽤了简单的ByteArrayOutputStream
TZlibTransport 使⽤zlib进⾏压缩,与其他传输⽅式联合使⽤,当前⽆java实现,

服务层

参数 描述
TSimpleServer 简单的单线程服务模型,常用于测试
TThreadPoolServer 多线程服务模型,使用标准的阻塞式IO
TNonblockin Server 多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式)

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!