Title: An introduction to Apache Thrift
1Apache Thrift
- What is it ?
- Languages
- Process
- Architecture
- Example
www.semtech-solutions.co.nz info_at_semtech-solutions
.co.nz
2Apache Thrift What is it ?
- A multi language software framework
- For client / services development
- It is scalable
- Uses a compiler to generate source code
- Released with Apache 2 License
- Uses an IDL ( interface descripton language )?
- Originally developed at Facebook
www.semtech-solutions.co.nz info_at_semtech-solutions
.co.nz
3Apache Thrift Languages
- Languages supported
- C Cocoa
- Java JavaScript
- Python Node.js
- PHP Smalltalk
- Ruby OCaml
- Erlang Delphi
- Perl ..... and others
- Haskell
- C
www.semtech-solutions.co.nz info_at_semtech-solutions
.co.nz
4Apache Thrift Process
- So how do we start to create a Thrift based app ?
- We define a Thrift file
- Which includes our interface definition
- Defines our Thrift types
- Defines our services
- Our clients will be able to call our services
- We now use the Thrift compiler
- thrift --gen ltlanguagegt ltThrift filegt
- To generate our source code
- Now we add our extra client / server functionality
www.semtech-solutions.co.nz info_at_semtech-solutions
.co.nz
5Apache Thrift Service
www.semtech-solutions.co.nz info_at_semtech-solutions
.co.nz
6Apache Thrift Where used ?
- So who is using Thrift ?
- Cassandra
- Scribe
- Hadoop Hbase
- ThriftDB
- Others .........
www.semtech-solutions.co.nz info_at_semtech-solutions
.co.nz
7Apache Thrift Architecture
www.semtech-solutions.co.nz info_at_semtech-solutions
.co.nz
8Apache Thrift Example (Java)?
- Create Thrift interface file
- time.thrift
- namespace java tserver.gen
- typedef i64 Timestamp
- service TimeServer
- Timestamp time()?
-
- Compile to Java code
- thrift --gen java time.thrift
www.semtech-solutions.co.nz info_at_semtech-solutions
.co.nz
9Apache Thrift Example
- Create interface in TimeServerImpl.java
- package server
- import org.apache.thrift.TException
- import tserver.gen.
- class TimeServerImpl implements TimeServer.Iface
- _at_Override
- public long time() throws TException
- long time System.currentTimeMillis()
- System.out.println("time() called "
time) - return time
-
www.semtech-solutions.co.nz info_at_semtech-solutions
.co.nz
10Apache Thrift Example Java Server
- package server
- import java.io.IOException
- import org.apache.thrift.protocol.TBinaryProtocol
- import org.apache.thrift.protocol.TBinaryProtocol.
Factory - import org.apache.thrift.server.TServer
- import org.apache.thrift.server.TThreadPoolServer
- import org.apache.thrift.transport.TServerSocket
- import org.apache.thrift.transport.TTransportExcep
tion - import tserver.gen.TimeServer
- public class Server
- private void start()
- try
- TServerSocket serverTransport new
TServerSocket(7911) - TimeServer.Processor processor new
TimeServer.Processor(new TimeServerImpl()) - Factory protFactory new
TBinaryProtocol.Factory(true, true) - TServer server new TThreadPoolServer(pr
ocessor, serverTransport, protFactory) - System.out.println("Starting server on
port 7911 ...") - server.serve()
- catch (TTransportException e)
www.semtech-solutions.co.nz info_at_semtech-solutions
.co.nz
11Apache Thrift Example Java Client
- package client
- import java.net.SocketException
- import org.apache.thrift.TException
- import org.apache.thrift.protocol.TBinaryProtocol
- import org.apache.thrift.protocol.TProtocol
- import org.apache.thrift.transport.TSocket
- import org.apache.thrift.transport.TTransport
- import org.apache.thrift.transport.TTransportExcep
tion - import tserver.gen.TimeServer.Client
- public class TimeClient
- private void start()
- TTransport transport
- try
- transport new TSocket("localhost",
7911) - TProtocol protocol new
TBinaryProtocol(transport)Client client new
Client(protocol) - transport.open()
- long time client.time()
- System.out.println("Time from server"
time) - transport.close()
www.semtech-solutions.co.nz info_at_semtech-solutions
.co.nz
12Contact Us
- Feel free to contact us at
- www.semtech-solutions.co.nz
- info_at_semtech-solutions.co.nz
- We offer IT project consultancy
- We are happy to hear about your problems
- You can just pay for those hours that you need
- To solve your problems