Thrift的日常—协议

简介: Thrift的日常—协议

1. 简介

   在Apache Thrift的上下文中,协议是用于序列化类型的方法。Apache Thrift RPC不支持每种语言定义的每种类型。相反,Apache Thrift类型系统包括大多数语言(int,double,string,等等),以及一些使用率高且得到广泛支持的容器类型(地图,集合,列表)。所有协议都必须能够读取和写入Apache Thrift类型系统中的所有类型。


2. 分类

   Apache Thrift提供了几种序列化协议,每种都有其自己的目标:

  • 二进制协议–简单快速
  • 紧凑协议–有较小的数据大小,没有过多的开销
  • JSON协议–标准和广泛的互操作性

   二进制协议是默认的Apache Thrift协议,Thrift最初发布时是唯一提供的协议。二进制协议需要最少的CPU开销,本质上是按照字节顺序将所需的类型写入字节流。

   紧凑协议旨在最大程度地减少数据的序列化表示。凑协议相当简单,但是在将位压缩的过程中使用了更多的CPU。在I / O瓶颈和CPU充足的情况下,是一个不错的协议。

   JSON协议将输入转换为JSON格式的文本。在三种常用的Apache Thrift协议中,JSON可能会消耗更多的资源。JSON的优点是广泛的互操作性和可读性。


3. 接口

   Apache Thrift语言通常提供称为TProtocol的抽象协议接口,该接口定义用于读取和写入每种Apache Thrift类型的方法,以及用于序列化容器,用户定义的类型和消息的组合方法。

   Apache Thrift类型系统允许定义结构。Apache Thrift结构是基于IDL的用户定义类型,由一组字段组成。这些字段可以是任何合法的Apache Thrift类型,包括基本类型,容器和其他结构。

   Apache Thrift消息是用于通过传输传递RPC调用和响应的封装。协议接口提供对序列化结构和消息的支持。

   下面列出了一些定义Apache Thrift类型系统的典型TProtocol方法。此处列出的每个写入方法都有一个具有相同后缀的对应读取方法例如writeBool()/ readBool())。

96447814-120fc980-1245-11eb-938d-6ea408716c72.png

4. IDL示例

   Apache Thrift IDL是一种接口定义语言,旨在简单明了的描述应用程序类型和服务接口且与语言无关。Apache Thrift IDL编译器读取IDL文件并以多种语言输出序列化代码和RPC存根。

   下面是一个定义的例子:

struct Date {                                          #A
  1: i16 year,
  2: i16 month,
  3: i16 day,
}
service HalibutTracking {                              #B
  i32 GetCatchInPoundsToday(),
  i32 GetCatchInPoundsByDate(1: Date d, 2: double t),  #C
}

   释义如下:

#A  Date是Apache Thrift用户定义的类型,为此将生成读/写序列化代码类型
#B  HalibutTracking是Apache Thrift服务接口,将为此接口生成客户端和服务器RPC存根
#C  用户定义的类型Date可用作参数或返回类型

   上面的IDL文件中定义的服务称为HalibutTracking。 此服务取决于用户定义的类型Date 。要将IDL编译为特定语言的代码,要使用指示目标语言的开关调用IDL编译器以生成代码。处理方式如下:

96447814-120fc980-1245-11eb-938d-6ea408716c72.png

   例如:命令“ thrift –gen java halibut.thrift”将输出一组Java文件,这些文件使用HalibutTracking服务启用日期类型和客户端/服务器RPC的序列化。其他语言的过程与此类似。


   今天的日常~~

相关文章
|
6月前
|
存储 XML JSON
应用层协议设计ProtoBuf/Thrift
应用层协议设计ProtoBuf/Thrift
64 0
|
网络协议 Java 编译器
Thrift在C++中的使用
Thrift在C++中的使用
Thrift在C++中的使用
|
Java Go Apache
gRPC vs Thrift
远程过程调用(Remote Procedure Call,RPC)服务于分布式架构,本文从分布式构架面临的问题,期望的结果,引出两种比较受关注的RPC框架,并从框架的出身、实现原理、特性、性能等方面做了对比分析,从而给出两者之间的选择建议。
11375 0
|
6月前
|
Java 编译器 测试技术
Thrift
Thrift是一个用于跨语言服务开发的工具,可以轻松实现不同语言间的通信和数据交换 【2月更文挑战第27天】
79 1
|
6月前
|
存储 JSON 编解码
IM通讯协议专题学习(十):初识 Thrift 序列化协议
本文将带你一起初步认识Thrift的序列化协议,包括Binary协议、Compact协议(类似于Protobuf)、JSON协议,希望能为你的通信协议格式选型带来参考。
154 1
|
XML JSON 编解码
Thrift 介绍
Thrift 介绍
169 0
|
消息中间件 网络协议 Java
Thrift的日常—传输层
Thrift的日常—传输层
Thrift的日常—传输层
|
缓存 JSON Kubernetes
一个请求过来都经过了什么?(Thrift版)
一个请求过来都经过了什么?(Thrift版)
一个请求过来都经过了什么?(Thrift版)
|
JavaScript 前端开发 Java
初探 thrift
初探 thrift
237 0