Apache Thrift

Apache Thrift
Developer(s) Apache Software Foundation
Stable release
0.9.3 / 6 October 2015 (2015-10-06)
Type Remote procedure call framework
License Apache License 2.0
Website thrift.apache.org

Thrift is an interface definition language and binary communication protocol[1] that is used to define and create services for numerous languages.[2] It is used as a remote procedure call (RPC) framework and was developed at Facebook for "scalable cross-language services development". It combines a software stack with a code generation engine to build cross-platform services that can connect applications written in a variety of languages and frameworks, including ActionScript, C, C++,[3] C#, Cappuccino,[4] Cocoa, Delphi, Erlang, Go, Haskell, Java, Node.js, Objective-C, OCaml, Perl, PHP, Python, Ruby and Smalltalk.[5] Although developed at Facebook, it is now an open source project in the Apache Software Foundation. The implementation was described in an April 2007 technical paper released by Facebook, now hosted on Apache.[6][7]

Architecture

The Apache Thrift API client/server architecture

Thrift includes a complete stack for creating clients and servers.[8] The top part is generated code from the Thrift definition. The services generate from this file client and processor code. In contrast to built-in types, created data structures are sent as result in generated code. The protocol and transport layer are part of the runtime library. With Thrift, it is possible to define a service and change the protocol and transport without recompiling the code. Besides the client part, Thrift includes server infrastructure to tie protocols and transports together, like blocking, non-blocking, and multi-threaded servers. The underlying I/O part of the stack is implemented differently for different languages.

Thrift supports a number of protocols:[8]

The supported transports are:

Thrift also provides a number of servers, which are

Benefits

Some stated benefits of Thrift include:

Creating a Thrift service

Thrift is written in C++, but can create code for a number of languages. To create a Thrift service, one has to write Thrift files that describe it, generate the code in the destination language, write some code to start the server, and call it from the client. Here is a code example of such a description file:

enum PhoneType {
  HOME,
  WORK,
  MOBILE,
  OTHER
}

struct Phone {
  1: i32 id,
  2: string number,
  3: PhoneType type
}

Thrift will generate the code out of this descriptive information. For instance, in Java, the PhoneType will be a simple enum inside the Phone class.

See also

References

  1. "Installing and using Apache Cassandra With Java Part 4 (Thrift Client)". http://www.sodeso.nl/: Sodeso – Software Development Solutions. Retrieved 2011-03-30. Thrift is a separate Apache project which is, to put it simply, a binary communication protocol.
  2. Andrew Prunicki. "Apache Thrift: Introduction". http://www.ociweb.com/: Object Computing Inc. – An Open Solutions Company. Retrieved 2011-04-11. Through a simple and straightforward Interface Definition Language (IDL), Thrift allows you to define and create services that are both consumable by and serviceable by numerous languages. Using code generation, Thrift creates a set of files that can then be used to create clients and/or servers. In addition to interoperability, Thrift can be very efficient through a unique serialization mechanism that is efficient in both time and space.
  3. Thrift Requirements, see this issue for Windows support
  4. Fred Potter, Using Thrift with Cappuccino, parallel48's posterously luscious blog, 10 June 2010.
  5. Andrew Prunicki. "Apache Thrift: Code Generation". http://www.ociweb.com/: Object Computing Inc. – An Open Solutions Company. Retrieved 2011-04-12. Thrift supports many languages too varying degrees. The complete list is below. Be careful before assuming that just because your language has some support that it supports all of the features of Thrift. Python for instance, only supports TBinaryProtocol. Cocoa, C++, C#, Erlang, Haskell, Java, OCaml, Perl, PHP, Python, Ruby, and Smalltalk
  6. Mark Slee, Aditya Agarwal, Marc Kwiatkowski, Thrift: Scalable Cross-Language Services Implementation
  7. "LibraryFeatures - Thrift Wiki". Retrieved 2016-04-21.
  8. 1 2 Andrew Prunicki. "Apache Thrift: Introduction". http://www.ociweb.com/: Object Computing Inc. – An Open Solutions Company. Retrieved 2011-04-11. The top portion of the stack is generated code from your Thrift definition file. Thrift services result in generated client and processor code. These are represented by the brown boxes in the diagram. The data structures that are sent (other than built-in types) also result in generated code. These result in the red boxes. The protocol and transport are part of the Thrift runtime library. Therefore with Thrift, you can define a service, and are free to change the protocol and transport without re-generating your code. Thrift also includes a server infrastructure to tie the protocols and transports together. There are blocking, non-blocking, single and multi-threaded servers available. The "Underlying I/O" portion of the stack differs based on the language in question. For Java and Python network I/O, the built-in libraries are leveraged by the Thrift library, while the C++ implementation uses its own custom implementation.
  9. Skelton, Steven. "Developer Friendly Thrift Request Logging". Retrieved 3 July 2014.

External links

This article is issued from Wikipedia - version of the 9/13/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.