Apache Thrift
最后修改时间: 2017-11-11
简介
Thrift是一个轻量级、语言无关的软件栈,它具有一套为RPC通信生成代码的机制。Thrift为数据的传输、序列化,以及应用层处理提供了干净的抽象。采用这种抽象栈,它的代码生成器仅使用一种简洁的定义语言作为输入,便能够生成跨编程语言的代码,以构建互操作的RPC客户端和服务器。
Thrift能够让不同语言编写的程序轻易共享数据及调用远程过程。目前Thrift支持20多种编程语言,很可能你正在使用的那种语言碰巧包括在内。
Thrift是专门为客户端和服务器之间非原子地版本更新而设计的(译注:这个表述的含义是,当客户端和服务端之间的RPC请求或响应体发生变更时,不必同时升级客户端&服务端程序版本,即客户端、服务端同时具有向后兼容和向前兼容性。对于7*24的互联网服务来说,这个特性允许在不停服的情况下对分布式系统的不同组件或节点逐台滚动升级)。
有关Thrift设计和实现的更多详细内容,可以参考发布包中的《Thrift白皮书》或特定子目录中的README.md文件。
工程结构
- thrift/和compiler/包含C++实现的Thrift编译器。
- lib/ 包含Thrift软件库的实现, 细分为不同语言的实现。
-
cpp/,go/,java/,php/,py/ ,rb/ … test/包含Thrift示例文件以及跨目标语言的测试代码。
- tutorial/包含一个如何使用Thrift开发软件的教程。
必要条件
最新的构建条件列表,请参见 http://thrift.apache.org/docs/install 。
资源
关于Thrift的更多信息,可移步至官方主页:http://thrift.apache.org
致谢
Thrift的灵感来源于pillar, 一款由Adam D’Angelo编写的轻量级RPC工具, 同时也借鉴了Google的protocol buffers。
安装
如果是首次通过源码构建Thrift,那么需要先生成configure脚本。 (下载tar包时不需要此步骤) 从顶层目录执行以下命令:
./bootstrap.sh
生成configure脚本后, 就可以配置thrift了。从顶层目录执行以下命令:
./configure
可以根据需要显式指定boost文件的位置。假如boost安装在/usr/local目录, 则运行如下命令:
./configure --with-boost=/usr/local
注意:缺省情况下, Thrift的C++库在构建时会包含debug信息。如果要自定义该配置项,可以使用CXXFLAGS选项,如下:
./configure CXXFLAGS='-g -O2' ./configure CFLAGS='-g -O2' ./configure CPPFLAGS='-DDEBUG_MY_FEATURE'
要启用gcov所需的选项-fprofile-arcs -ftest-coverage,执行以下命令:
./configure --enable-coverage
运行 ./configure –help 可以查看其它配置项。
请注意:Python库会忽略 –prefix 选项,由distutils工具将其放置到适当的位置(通常位于/usr/lib/pythonX.Y/site-packages/)。 要想控制Python模块的安装目录, 需要设置PY_PREFIX环境变量。(DESTDIR 变量会同时控制 Python 和 C++)
编译 thrift:make
从顶层目录, 切换到超级用户执行: make install
注意:有些语言的库文件通过构建工具手动安装会更合适 (在编写本文时有这些语言:Java, Ruby, PHP).
关于安装每种语言lib包的更多详情,可以查看lib//目录下的README.md文件。
测试
客户端库的测试,一般是在顶层目录下执行以下命令来运行:
make -k check
该命令会运行每种客户端类库所定义的单元测试,并根据需要构建所有的库文件。单个语言构建失败时, 构建过程会继续运行并在结束时输出诊断信息。
要运行跨语言的测试集,请执行:
make cross
该命令将会运行由不同语言的客户端和服务器构成的测试集。
开发
该项目通过Travis CI构建,应当使用docker环境进行构建。
docker环境下详细构建说明在此。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/73122.html