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传输等。
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数据传输方式) |