Thrift 学习笔记

    科技2022-08-13  96

     一、Apache Thrift是什么?

    Thrift是一个轻量级、跨语言的远程服务调用(Remote Procedure Call)框架。它通过自身的IDL中间语言, 并借助代码生成引擎生成各种主流语言的RPC服务端/客户端模板代码。

    二、软件栈

    传输层

    传输层负责直接从网络中读取和写入数据,它定义了具体的网络传输协议;比如说TCP/IP传输等。

    协议层

    协议层定义了数据传输格式,负责网络传输数据的序列化和反序列化;比如说JSON、XML、二进制数据等。

    处理层

    处理层是由具体的IDL(接口描述语言)生成的,封装了具体的底层网络传输和序列化方式,并委托给用户实现的Handler进行处理。

    服务层

    整合上述组件,提供具体的网络线程/IO服务模型,形成最终的服务。

    三、特性

    开发简单

    只需要编写IDL文件,再使用自动编译器即可生成服务端和客户端文件,即client、server stub可以自动生成服务端:只需要关注业务逻辑,在IDL对应的方法下实现类(业务逻辑)即可

    客户端:只需要像调用本地类方法一样,调用远程服务即可

    接口维护简单

    只需要修改IDL文件即可对接口进行修改、扩展

    学习成本低

    像编写面向对象的本地方法一样编写远程服务接口

    多语言、跨语言支持

    稳定/广泛使用

    国内小米、百度、字节、美团都在使用thrift框架

    四、数据类型

    基本类型

    string: utf8格式字符串

    bool:布尔

    i16:16位有符号整数

    i32:32位有符号整数

    i64:64位有符号整数

    double:64位浮点数

    binary: 二进制串

    结构体类型

    struct

    struct person { 1:i64 id, 2:string name, 3:string gender, 4:optional string job='' }

    容器类型

    list: 有序元素列表set: 无序无重复元素集合map: 有序的key/value集合

    异常类型

    exception: 异常类型

    服务类型

    service: 服务类型

    五、传输协议

    Thrift可以让用户(服务端定义传输协议)选择客户端与服务端之间传输通信协议的类别,在传输协议上总体划分为文本(text)和二进制(binary)传输协议。为节约带宽,提高传输效率,一般情况下使用二进制类型的传输协议为多数,有时还会使用基于文本类型的协议,这需要根据项目/产品中的实际需求。常用协议有以下几种:

    TBinaryProtocol:二进制编码格式进行数据传输TCompactProtocol:高效率的、密集的二进制编码格式进行数据传输TJSONProtocol: 使用JSON文本的数据编码协议进行数据传输TSimpleJSONProtocol:只提供JSON只写的协议,适用于通过脚本语言解析

    六、传输层类型

    TSocket:使用阻塞式I/O进行传输,是最常见的模式TNonblockingTransport:使用非阻塞方式,用于构建异步客户端TFramedTransport:使用非阻塞方式,按块的大小进行传输,类似于Java中的NIO

    七、服务层类型

    TSimpleServer:单线程服务器端,使用标准的阻塞式I/OTThreadPoolServer:多线程服务器端,使用标准的阻塞式I/OTNonblockingServer:单线程服务器端,使用非阻塞式I/OTHsHaServer:半同步半异步服务器端,基于非阻塞式IO读写和多线程工作任务处理TThreadedSelectorServer:多线程选择器服务器端,对THsHaServer在异步IO模型上进行增强


    总结

    Thrift的基本概念和使用方式

    Processed: 0.010, SQL: 9