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.特殊...