Apache Thrift系列(一):Thrift基本及IDL语法

 

一、Thrift介绍

  Thrift是一个轻量级、跨语言的远程服务调用框架,最初由Facebook开发,后面进入Apache开源项目。主要包含三大部分:代码生成序列化框架RPC框架,相当于protoc + protobuffer + grpc,并且支持大量语言(C++、Go、JavaPythonPHPRuby等),是一套全栈式的RPC解决方案。整体架构图:

 

二、Thrift的数据类型及IDL语法

 thrift支持数据类型

基本类型:

  • bool: 布尔值
  • byte: 8位有符号整数
  • i16: 16位有符号整数
  • i32: 32位有符号整数
  • i64: 64位有符号整数
  • double: 64位浮点数
  • string: UTF-8编码的字符串
  • binary: 二进制串

结构体类型:

  • struct: 定义的结构体对象

容器类型:

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

异常类型:

  • exception: 异常类型

服务类型:

  • service: 具体对应服务的类

除此之外,Thrift 还支持枚举类型(enum)和常量类型(const)

IDL语法参考:

 

三、通讯协议及序列化协议

  Thrift可以让用户选择客户端服务端之间传输通信协议的类别,在传输协议上总体划分为文本(text)和二进制(binary)传输协议,主要有BinaryProtocol、CompactProtocol、JsonProtocol、MultiplexedProtocol,一般实现RPC最常用协议BinaryProtocol和CompactProtocol。常用协议有以下几种:

  • TBinaryProtocol:二进制编码格式进行数据传输
  • TCompactProtocol:高效率的、密集二进制编码格式进行数据传输
  • TJSONProtocol: 使用JSON文本的数据编码协议进行数据传输
  • TSimpleJSONProtocol:只提供JSON只写的协议,适用于通过脚本语言解析
 上面是RPC通讯协议,序列化协议Thrift实现主要是Binary、Compact、JSON,可以理解通讯协议里面包含了序列化协议。
 
 

 四、Thrift 网络栈

Thrift 网络栈主要包含四部分:
  • Server
    • 创建 transport
    • 为 transport 创建一个输入/输出 protocol
    • 基于 输入/输出 protocol 创建一个 processor
    • 等待连接并处理
  • Processor
    • 从输入流读取数据并写到输出流
  • Protocol
    • 协议层可以理解为主要负责序列化和反序列化,是与 Proto Buf 可类比的层
    • 常用的有 binary、compact:
  • Transport
    • 通常使用基于 Raw TCP 的传输协议,包括 Buffered 和 Framed 的;
    • 一般包含打开链接、关闭链接、读写数据、监听链接等接口和功能;

 

posted @ 2021-08-01 23:50  -零  阅读(1159)  评论(0编辑  收藏  举报