Thrift阅读笔记

发布 2021-05-02 18:43:28 阅读 3782

thrift:scalable coss-language services implementation

修订历史记录。

相关联系人。

正文目录。1 introduction(简介) 4

2 types(类型) 4

2.1 base types(基本类型) 4

2.2 structs(结构体) 5

2.3 containers(容器) 5

2.4 exceptions(异常) 5

2.5 services(服务) 5

3 transport(传输) 6

3.1 interface(接口) 6

3.2 implementation(实现) 7

3.2.1 tsocket 7

3.2.2 tfiletransport 7

3.2.3 utilities 7

4 protocol(协议) 7

4.1 interface(接口) 7

4.2 structure(结构体) 8

4.3 implementation(实现) 9

5 versioning(版本化) 9

5.1 field identifiers(域标识符) 9

5.2 isset 9

5.3 case analysis(案例分析) 10

5.4 protocol/transport versioning(协议/传输版本化) 10

6 rpc implementation(远程过程调用实现) 11

6.1 tprocessor 11

6.2 generated code(生成的**) 11

6.3 tserver 11

7 implementation details(实现的细节) 12

7.1 target languages(目标语言) 12

7.2 generated structs(生成的结构体) 12

7.3 rpc method identification(rpc方法识别) 12

7.4 servers and multithreading(服务器和多线程) 13

7.5 thread primitives(线程原语) 13

7.6 thread,runnable and shared_ptr 14

7.7 threadmanager 14

7.8 timermanager 15

7.9 nonblocking operation(非阻塞操作) 15

7.10 compiler(编译器) 15

7.11 tfiletransport 15

8 facebook thrift services(facebook的thrift服务) 15

8.1 search(搜索) 16

8.2 logging(日志) 16

9 conclusions(总结) 16

thrift是facebook开发出的一个软件库和一组**生成工具,以加快高效率、可扩展的后端服务的开发与实现的速度。它通过对各语言最常用的部分加以抽象,把它们放进一个通用库里,再用各个语言实现,来实现跨编程语言的高效而可靠的通信。亦即,thrift允许开发者在一个单独的语言无关的文件里,定义数据类型和服务接口,然后生成用来构建rpc客户和服务器所需的全部**。

thrift:

在多种编程语言之间建立一个透明的、高效的桥梁;

一个在众多编程语言之中实现的语言中立的软件栈,以及相关的**生成引擎,该引擎将一种简单的接口和数据定义语言,转换为客户及服务器远程过程调用库;

设计为对开发者尽可能简单,对一个复杂的服务,在单个短文件里即可定义全部必需的数据结构和接口。

网络环境下,跨语言交互的一些关键组件:

1. 类型(types)——需要一种通用的类型系统。类型的转换上,编程者不需编写任何应用层以下的**。

2. 传输(transport)——各个语言必须有一种双向传输原始数据的通用接口。一个给定的传输是如何实现的,应该与服务开发者无关。

3. 协议(protocol)——数据类型必须有某种方法,来使用传输层对它们自身编码和解码。同样地,应用开发者不需要关心该层。重要的是,数据能够以一种一致的、确定的方式被读写。

4. 版本化(versioning)——健壮的服务相关的数据类型必须提供一种自身版本化的机制。具体来说,它应当能在一个对象中添加或移除域,或改变一个函数的参数列表,而不干扰服务。

5. 处理器(processors)——最后,我们生成能够处理数据流以实现远程过程调用的**。

thrift类型系统的目标是使编程者能使用完全在thrift中定义的类型,而不论他们使用的是哪种编程语言。

thrift类型系统没有引入任何特殊的动态类型或包装器对象,也不要求开发者编写任何对象序列化或传输的**。

thrift idl文件在逻辑上,是开发者对他们的数据结构进行注解的一种方法,该方法告诉**生成器怎样在语言之间安全传输对象,所需的额外信息量最小。

所有编程语言中都可用的关键类型。

bool 布尔值,真或假。

byte 有符号字节。

i16 16位有符号整数。

i32 32位有符号整数。

i64 64位有符号整数。

double 64位浮点数。

string 与编码无关的文本或二进制字符串。

许多语言中都没有无符号整数类型,且无法防止某些语言(如python)的开发者把一个负值赋给一个整型变量,这会导致程序无法预料的行为。

从设计角度讲,无符号整型鲜少用于数学目的,实际中更长用作关键词或标识符。这种情况下,符号是无关紧要的,可用有符号整型代替。

thrift结构体定义了一个用在多种语言之间的通用对象。定义一个thrift结构体的基本语法与c结构体定义非常相似。域可由一个整型域标识符(在该结构体的作用域内是唯一的),以及可选的默认值来标注。

struct example {

1:i32 number=10,2:i64 bignumber,3:double decimals,4:string name="thrifty"

thrift容器是强类型的,映射为通用编程语言中最常使用的容器。使用c++模板类来标注。有三种可用类型:

list 元素的有序列表。直接翻译为stl vector,j**a arraylist,或脚本语言中的native array。可包含重复元素。

set 不重复元素的无序集合。翻译为stl set,j**a hashset,python中的set,或php/ruby中的native dictionary。

map 严格唯一的键(keys)到值(values)的映射。翻译为stl map,j**a hashmap,php associative array,或python/ruby dictionary。

在目标语言中,定义将产生有read和write两种方法的类型,使用thrift tprotocol对象对对象进行序列化和传输。

异常在语法和功能上都与结构体相同,唯一的区别是它们使用exception关键词,而非struct关键词进行声明。

阅读笔记格式阅读笔记格式

阅读笔记格式 阅读笔记格式4篇。读书笔记一则。文。题。每个人都是一扇窗。作。者。田。野。语文知识积累。好词。碧野飞花。伤天暮景。惨淡愁云。和风徐徐。春意盎然。热情洋溢。好句。和不同的人交往,就像打开一扇不同的窗子。然而,就像蜜蜂永远迷恋花丛,就像花儿永远期待春光。我们每个人都希望结识一个优秀的朋友,...

英语阅读笔记

考研英语阅读笔记。第一,扫描提干,划关键项。第二,通读全文,抓住中心。1.通读全文,抓两个重点 首段 中心句 核心概念常在第一段,常在首段出题 其他各段的段首和段尾句。其他部分略读,有重点的读 2.抓住中心,用一分半时间思考3个问题 文章叙述的主要内容是什么?文章中有无提到核心概念?作者的大致态度是...

阅读笔记格式

判断 文章结构类型,给出判断方法。标记 3.态度。4.事物之间的关系。5.事物的缺陷。句。7.列举。8.强对比。9.专有名词首次出现的句子。10.与文章密切相关的词汇。详读 1.标记的地方。2.让步句 强调句后面的转折。3.出现be driven to,purpose of等固定短语的句子。4.特殊...