Thrift是一种
接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个
远程过程调用(RPC)框架来使用,是由
Facebook为“大规模跨语言服务开发”而开发的。它通过一个代码生成引擎联合了一个软件栈,来创建不同程度的、无缝的
跨平台高效服务,可以使用
C#、
C++(基于
POSIX兼容系统)、Cappuccino、
Cocoa、Delphi、
Erlang、
Go、
Haskell、
Java、
Node.js、
OCaml、
Perl、
PHP、
Python、
Ruby和
Smalltalk。虽然它以前是由Facebook开发的,但它现在是
Apache软件基金会的
开源项目了。该实现被描述在2007年4月的一篇由Facebook发表的技术论文中,该论文现由Apache掌管。
Thrift包含一套完整的栈来创建客户端和服务端程序。顶层部分是由Thrift定义生成的代码。而服务则由这个文件客户端和处理器代码生成。在生成的代码里会创建不同于内建类型的数据结构,并将其作为结果发送。协议和
传输层是
运行时库的一部分。有了Thrift,就可以定义一个服务或改变通讯和传输协议,而无需重新编译代码。除了客户端部分之外,Thrift还包括服务器基础设施来集成协议和传输,如阻塞、非阻塞及多线程服务器。栈中作为I/O基础的部分对于不同的语言则有不同的实现。
Thrift由C++编写,但可以为众多语言创建代码。要创建一个Thrift服务,必须写一些Thrift文件来描述它,为目标语言生成代码,并且写一些代码来启动服务器及从客户端调用它。