thrift架构设计
Thrift是一个轻量、支持多语言、可扩展、高性能的远程服务调用框架。
提供了数据传输、序列化、应用层处理的清晰抽象。
The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.
(1) thrift架构分层
分层 | 职责 |
---|---|
服务调用层 (客户端/服务端) | 客户端、服务端调用。 |
协议层 | 消息解析 |
传输层包装 | 功能增强,实现各种复写传输层包括http、framed、buffered、压缩传输等 |
低级传输层 | 靠近网络层、作为rpc框架接收报文的入口,提供各种底层实现如socket创建、读写、接收连接等。 |
语言层 | thrift采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发 |
操作系统层 | 由编程语言提供各种操作系统的支持 |
Thrift的核心组件有:
TServer,Client 服务器和客户端组件
IDL组件 动态代理、序列化、网络调用
TProtocol 协议组件 数据传输格式 支持多种传输协议
TTransport 传输方式组件 定义了消息是怎样在客户端和服务器端之间通信 thrift传输层 支持阻塞IO、非阻塞IO等
TProcessor 服务调用组件
(2) 数据类型
基础数据类型
(3) thrift如何支持多语言
lib
(4) idl-thrift如何处理复杂的RPC逻辑
idl
compiler
(5) 协议层
thrift协议规则
Thrift可以让用户选择客户端与服务端之间传输通信协议的类别
在传输协议上总体划分为文本(text)和二进制(binary)传输协议
(6) 传输层
thrift支持多种传输方式
支持的传输方式
传输方式 | 特点 |
---|---|
TSocket | 阻塞型 socket,用于客户端,采用系统函数 read 和 write 进行读写数据。 |
TServerSocket | 非阻塞型 socket,用于服务器端,accecpt 到的 socket 类型都是 TSocket(即阻塞型 socket)。 |
TBufferedTransport | |
TFramedTransport | |
TMemoryBuffer | |
TFileTransport | |
TFDTransport | |
TSimpleFileTransport | |
TZlibTransport | |
TSSLSocket | |
TSSLServerSocket |
(7) 服务端
服务端
(8) 客户端
客户端
参考资料
[1] thrift-github
[2] Apache Thrift – 可伸缩的跨语言服务开发框架
[3] Apache Thrift 跨语言服务开发框架
[4] Apache Thrift系列详解(一) - 概述与入门
[5] Thrift源码分析
[6] 深入浅出 RPC - 深入篇
[7] thrift源码分析-架构设计
[8] Thrift 简单介绍
[9] 和 Thrift 的一场美丽邂逅
[10] thrift原理分析
[11] thrift官网
[12] thrift白皮书