Thrift 学习笔记

 一、Apache Thrift是什么?

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

二、软件栈

  • 传输层

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

    • 协议层定义了数据传输格式,负责网络传输数据的序列化反序列化;比如说JSONXML二进制数据等。
  • 处理层

    • 处理层是由具体的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/O
  • TThreadPoolServer:多线程服务器端,使用标准的阻塞式I/O
  • TNonblockingServer:单线程服务器端,使用非阻塞式I/O
  • THsHaServer:半同步半异步服务器端,基于非阻塞式IO读写和多线程工作任务处理
  • TThreadedSelectorServer:多线程选择器服务器端,对THsHaServer异步IO模型上进行增强


总结

Thrift的基本概念和使用方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值