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架构分层

thrift-layers

分层 职责
服务调用层 (客户端/服务端) 客户端、服务端调用。
协议层 消息解析
传输层包装 功能增强,实现各种复写传输层包括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白皮书