SlideShare a Scribd company logo
-- Randy Abernethy, rx-m llc, 2014
polyglotism
• Modern distributed applications are rarely composed of
modules written in a single language
• Weaving together innovations made in a range of languages
is a core competency of successful enterprises
• Cross language communications are a necessity, not a luxury
thrift • Apache Thrift
– A high performance, scalable cross language serialization and RPC framework
• What?
– Full RPC Implementation - Apache Thrift supplies a complete RPC solution:
clients, servers, everything but your business logic
– Modularity - Apache Thrift supports plug-in serialization protocols:
binary, compact, json, or build your own
– Multiple End Points – Plug-in transports for network, disk and memory end points,
making Thrift easy to integrate with other communications and storage solutions like
AMQP messaging and HDFS
– Performance - Apache Thrift is fast and efficient, solutions for minimal parsing
overhead and minimal size
– Reach - Apache Thrift supports a wide range of languages and platforms:
Linux, OSX, Windows, Embedded Systems, Mobile, Browser, C++, Go, PHP, Erlang,
Haskell, Ruby, Node.js, C#, Java, C, OCaml, ObjectiveC, D, Perl, Python, SmallTalk, …
– Flexibility - Apache Thrift supports interface evolution, that is to say, CI/CD
environments can roll new interface features incrementally without breaking existing
infrastructure
• Service
Interfaces
are described
with the
Apache Thrift
Interface
Definition
Language
(IDL)
• Client/Server
Stubs
are generated
with the
Apache Thrift
IDL Compiler
• The IDL Compiler can generate stubs in over 15 languages
• Existing code modules are easily converted into RPC services
using the Apache Thrift Server Library
rpcservices
performance
&reach
• Thrift provides excellent performance for
all but the most demanding solutions
• Thrift provides broad reach, supporting a
wide range of languages and platforms
Custom Thrift REST
Extreme
Performance
Extreme
Reach
High Performance
Broad Reach
Enterprise
Compact
Frameworks, C, etc.
Web tech,
scripting
SOA, RPC Servers,
Java, C#, C++, etc.
WebEmbedded
thriftidl
1. Define the service interface in IDL
2. Compile the IDL to generate client/server stubs
3. Connect the server stubs to the desired implementation
4. Choose an Apache Thrift server to host your service
5. Call RPC functions like local function using the client stubs
#sail_stats.thrift
service SailStats {
double GetSailorRating(1: string SailorName)
double GetTeamRating(1: string TeamName)
double GetBoatRating(1: i64 BoatSerialNumber)
list<string> GetSailorsOnTeam(1: string TeamName)
list<string> GetSailorsRatedBetween(1: double MinRating,
2: double MaxRating)
string GetTeamCaptain(1: string TeamName)
}
helloworld
~/thrift/hello $ ls -l
-rw-r--r-- 1 dev dev 95 Mar 26 16:28 hello.thrift
~/thrift/hello $ thrift -gen py hello.thrift
~/thrift/hello $ ls -l
drwxr-xr-x 3 dev dev 4096 Mar 26 16:31 gen-py
-rw-r--r-- 1 dev dev 95 Mar 26 16:28 hello.thrift
~/thrift/hello $ ls -l gen-py
drwxr-xr-x 2 dev dev 4096 Mar 26 16:31 hello
-rw-r--r-- 1 dev dev 0 Mar 26 16:31 __init__.py
~/thrift/hello $ ls -l gen-py/hello
-rw-r--r-- 1 dev dev 248 Mar 26 16:31 constants.py
-rw-r--r-- 1 dev dev 5707 Mar 26 16:31 HelloSvc.py
-rwxr-xr-x 1 dev dev 1896 Mar 26 16:31 HelloSvc-remote
-rw-r--r-- 1 dev dev 46 Mar 26 16:31 __init__.py
-rw-r--r-- 1 dev dev 398 Mar 26 16:31 ttypes.py
~/thrift/hello $
• Compiling IDL for an
RPC service
Generated Code
• Interface Constants
• HelloSvc Stubs
• Sample Client
• Package Init File
• Interface Types
helloserver • A Python RPC Server
helloclient • A Python RPC Client
compiled
languages
• A C++ RPC client
#include <iostream>
#include <string>
#include <boost/shared_ptr.hpp>
#include <thrift/transport/TSocket.h>
#include <thrift/protocol/TBinaryProtocol.h>
#include "gen-cpp/HelloSvc.h""
using namespace apache::thrift::transport;
using namespace apache::thrift::protocol;
using namespace boost;
int main() {
auto socket = make_shared<TSocket>("localhost", 8585);
socket->open();
auto protocol = make_shared<TBinaryProtocol>(socket);
HelloSvcClient client(protocol);
std::string msg;
client.hello_func(msg);
std::cout << "[Client] received: " << msg << std::endl;
}
jvmlanguages • A Java RPC client
operational
.netlanguages • A C# RPC client
• Apache Thrift uses a compiled IDL implementation
– IDL is compiled generating stubs used at run time
– Runtime serialization code allows for interface evolution
• Apache Thrift IDL supports
– Service Interface Definition
– Type Definition
• Service interfaces are exposed by Servers
– Servers can implement many service interfaces
– Interfaces can inherit from other interfaces
• Types define serialization schemas
– Types can be serialized to memory, disk or networks
– Collections are supported (map, list, set)
– Structures and Unions support composite types
– DAGs are supported
• New addition not widely implemented as of yet
morethanrpc
Interface Evolution
Apache Thrift allows
fields and parameters to
be added and removed
incrementally without
breaking pre-existing
code, allowing systems to
grow incrementally over
time (just like businesses)
Particularly effective
in dynamic CI/CD
environments
abstractand
isolated
• Crafting an effective IDL requires understanding
some of the most important things about your
system
– What are the key entities in your system and how are they
described
– What are their cardinalities
– What are their keys
– Which are immutable
– Can you define idempotent interfaces for mutations
– What are the operational affinity groups in your system
– What is your system model and how will state and services
be distributed across it
• All of these things bear directly on IDL design
• Free of implementation, you can get the concepts
right and then choose the best languages and tools
to implement them
entities&idl
• Modern IDLs, like
Apache Thrift, provide
a rich set of tools for
describing system
entities (aka. messages)
• Capturing and codifying
the key system entities
is prerequisite to
effective interface
specification
• In some settings
crafting the entities
(e.g. an order) is all that
the IDL need do
Services
are
Optional!
commschemes
• Streaming – Communications
characterized by an ongoing flow of
bytes from a server to one or more
clients.
– Example: An internet radio broadcast
where the client receives bytes over time
transmitted by the server in an ongoing
sequence of small packets.
• Messaging – Message passing
involves one way asynchronous, often
queued, communications, producing
loosely coupled systems.
– Example: Sending an email message
where you may get a response or you
may not, and if you do get a response you
don’t know exactly when you will get it.
• RPC – Remote Procedure Call systems
allow function calls to be made
between processes on different
computers.
– Example: An iPhone app calling a service
on the Internet which returns the
weather forecast.
Apache Thrift is an efficient cross platform
serialization solution for streaming interfaces
Apache Thrift provides a complete RPC framework
architecture
• User Code
– client code calls RPC
methods and/or
[de]serializes objects
– service handlers
implement RPC service
behavior
• Generated Code
– RPC stubs supply client
side proxies and server
side processors
– type serialization code
provides serialization for
IDL defined types
• Library Code
– servers host user
defined services,
managing connections
and concurrency
– protocols perform
serialization
– transports move bytes
from here to there
• The Thrift framework was originally developed at Facebook and
released as open source in 2007. The project became an Apache
Software Foundation incubator project in 2008, after which four
early versions were released.
• 0.2.0 released 2009-12-12
• 0.3.0 released 2010-08-05
• 0.4.0 released 2010-08-23
• 0.5.0 released 2010-10-07
• In 2010 the project was moved to Apache top level status where
several additional versions have been released.
• 0.6.0 released 2011-02-08
• 0.6.1 released 2011-04-25
• 0.7.0 released 2011-08-13
• 0.8.0 released 2011-11-29
• 0.9.0 released 2012-10-15
• 0.9.1 released 2013-07-16
• 0.9.2 released 2014-06-01
• 1.0.0 released 2015-01-01
versions
it is difficult to make
predictions, particularly
about the future.
-- Mark Twain, Yogi Berra,
etc.
Open Source
Community Developed
Apache License Version 2.0
resources
• Web
– thrift.apache.org
– github.com/apache/thrift
• Mail
– Users: user-subscribe@thrift.apache.org
– Developers: dev-subscribe@thrift.apache.org
• Chat
– #thrift
• Book
– Abernethy (2014), The Programmer’s Guide to
Apache Thrift, Manning Publications Co.
[http://www.manning.com/abernethy/]
Chapter
1 is free
Randy Abernethy
ra@apache.org

More Related Content

PDF
Apache Thrift : One Stop Solution for Cross Language Communication
Piyush Goel
 
PPT
Introduction to Thrift
Dvir Volk
 
PPTX
Facebook thrift
Priyadarshi Raj
 
PDF
RESTLess Design with Apache Thrift: Experiences from Apache Airavata
smarru
 
PDF
Apache thrift-RPC service cross languages
Jimmy Lai
 
ODP
An introduction to Apache Thrift
Mike Frampton
 
PDF
Apache Thrift
knight1128
 
PPT
Building scalable and language independent java services using apache thrift
Talentica Software
 
Apache Thrift : One Stop Solution for Cross Language Communication
Piyush Goel
 
Introduction to Thrift
Dvir Volk
 
Facebook thrift
Priyadarshi Raj
 
RESTLess Design with Apache Thrift: Experiences from Apache Airavata
smarru
 
Apache thrift-RPC service cross languages
Jimmy Lai
 
An introduction to Apache Thrift
Mike Frampton
 
Apache Thrift
knight1128
 
Building scalable and language independent java services using apache thrift
Talentica Software
 

What's hot (20)

PDF
Multiplexing in Thrift: Enhancing thrift to meet Enterprise expectations- Imp...
Impetus Technologies
 
PPTX
Thrift vs Protocol Buffers vs Avro - Biased Comparison
Igor Anishchenko
 
PPTX
Avro - More Than Just a Serialization Framework - CHUG - 20120416
Chicago Hadoop Users Group
 
PDF
3 apache-avro
zafargilani
 
PDF
Optimizing LAMPhp Applications
Piyush Goel
 
PDF
Rest style web services (google protocol buffers) prasad nirantar
IndicThreads
 
PPTX
Protocol Buffer.ppt
Shashi Bhushan
 
PDF
Thrift
银行 孙
 
PDF
Redis Lua Scripts
Itamar Haber
 
PDF
Build Your Own Tools
Shugo Maeda
 
PDF
Data Serialization Using Google Protocol Buffers
William Kibira
 
DOC
Servlet basics
Santosh Dhoundiyal
 
PDF
Fluentd and WebHDFS
SATOSHI TAGOMORI
 
PPTX
PHP ITCS 323
Sleepy Head
 
PPTX
Reversing Google Protobuf protocol
n|u - The Open Security Community
 
PPT
jkljklj
hoefo
 
PPTX
Apache Avro and Messaging at Scale in LivePerson
LivePerson
 
PDF
REST Servers in Delphi XE Using DataSnap
Embarcadero Technologies
 
PPT
Server Side Technologies
tawi123
 
PDF
Apache AVRO (Boston HUG, Jan 19, 2010)
Cloudera, Inc.
 
Multiplexing in Thrift: Enhancing thrift to meet Enterprise expectations- Imp...
Impetus Technologies
 
Thrift vs Protocol Buffers vs Avro - Biased Comparison
Igor Anishchenko
 
Avro - More Than Just a Serialization Framework - CHUG - 20120416
Chicago Hadoop Users Group
 
3 apache-avro
zafargilani
 
Optimizing LAMPhp Applications
Piyush Goel
 
Rest style web services (google protocol buffers) prasad nirantar
IndicThreads
 
Protocol Buffer.ppt
Shashi Bhushan
 
Thrift
银行 孙
 
Redis Lua Scripts
Itamar Haber
 
Build Your Own Tools
Shugo Maeda
 
Data Serialization Using Google Protocol Buffers
William Kibira
 
Servlet basics
Santosh Dhoundiyal
 
Fluentd and WebHDFS
SATOSHI TAGOMORI
 
PHP ITCS 323
Sleepy Head
 
Reversing Google Protobuf protocol
n|u - The Open Security Community
 
jkljklj
hoefo
 
Apache Avro and Messaging at Scale in LivePerson
LivePerson
 
REST Servers in Delphi XE Using DataSnap
Embarcadero Technologies
 
Server Side Technologies
tawi123
 
Apache AVRO (Boston HUG, Jan 19, 2010)
Cloudera, Inc.
 
Ad

Viewers also liked (16)

PPTX
Facebook thrift
Bhuvana Laksminarayanan
 
PPTX
Mongo DB로 진행하는 CRUD
Jin wook
 
PPT
SKOS - 2007 Open Forum on Metadata Registries - NYC
jonphipps
 
PPT
Metadata and Terminology Registries
Marcia Zeng
 
PDF
Illustration of TextSecure's Protocol Buffer usage
Christine Corbett Moran
 
PDF
Acceleration for big data, hadoop and memcached it168文库
Accenture
 
PPTX
HBase Advanced Schema Design - Berlin Buzzwords - June 2012
larsgeorge
 
PDF
Facebook architecture
mysqlops
 
PPT
Metadata for Terminology / KOS Resources
Marcia Zeng
 
PPT
Hive User Meeting March 2010 - Hive Team
Zheng Shao
 
PPT
Hive Object Model
Zheng Shao
 
PPTX
OVERVIEW OF FACEBOOK SCALABLE ARCHITECTURE.
Rishikese MR
 
PPTX
아파치 쓰리프트 (Apache Thrift)
Jin wook
 
PPTX
Facebook architecture presentation: scalability challenge
Cristina Munoz
 
PDF
Metadata is a Love Note to the Future
Rachel Lovinger
 
ODP
Apache ppt
poornima sugumaran
 
Facebook thrift
Bhuvana Laksminarayanan
 
Mongo DB로 진행하는 CRUD
Jin wook
 
SKOS - 2007 Open Forum on Metadata Registries - NYC
jonphipps
 
Metadata and Terminology Registries
Marcia Zeng
 
Illustration of TextSecure's Protocol Buffer usage
Christine Corbett Moran
 
Acceleration for big data, hadoop and memcached it168文库
Accenture
 
HBase Advanced Schema Design - Berlin Buzzwords - June 2012
larsgeorge
 
Facebook architecture
mysqlops
 
Metadata for Terminology / KOS Resources
Marcia Zeng
 
Hive User Meeting March 2010 - Hive Team
Zheng Shao
 
Hive Object Model
Zheng Shao
 
OVERVIEW OF FACEBOOK SCALABLE ARCHITECTURE.
Rishikese MR
 
아파치 쓰리프트 (Apache Thrift)
Jin wook
 
Facebook architecture presentation: scalability challenge
Cristina Munoz
 
Metadata is a Love Note to the Future
Rachel Lovinger
 
Apache ppt
poornima sugumaran
 
Ad

Similar to Apache Thrift, a brief introduction (20)

PDF
Building high performance microservices in finance with Apache Thrift
RX-M Enterprises LLC
 
PPT
Building scalable and language-independent Java services using Apache Thrift ...
IndicThreads
 
PDF
Thrift
Yury Kaliada
 
PDF
Thrift
Yury Kaliada
 
PDF
Cloud Native API Design and Management
AllBits BVBA (freelancer)
 
PDF
thrift-20070401
Hiroshi Ono
 
PDF
Steve Vinoski Rest And Reuse And Serendipity
deimos
 
PDF
Rest Reuse And Serendipity
QConLondon2008
 
PDF
服务框架: Thrift & PasteScript
Qiangning Hong
 
KEY
The use of Symfony2 @ Overblog
Xavier Hausherr
 
PPTX
Yotpo microservices
Ron Barabash
 
PPTX
facebookthrift-151001153400-lva1-app6891.pptx
PrasannaKumarpanda2
 
PDF
Generating Unified APIs with Protocol Buffers and gRPC
C4Media
 
PPTX
Cross-platform interaction
Oleksii Duhno
 
PPTX
Multi-Lingual Accumulo Communications
Accumulo Summit
 
PDF
Distributed Ruby and Rails
Wen-Tien Chang
 
PPT
ghfghg
hoefo
 
PDF
Qcon
adityaagarwal
 
PDF
Charlton Barreto - The OGF | Open Cloud Computing Interface
CloudCamp Hamburg
 
Building high performance microservices in finance with Apache Thrift
RX-M Enterprises LLC
 
Building scalable and language-independent Java services using Apache Thrift ...
IndicThreads
 
Thrift
Yury Kaliada
 
Thrift
Yury Kaliada
 
Cloud Native API Design and Management
AllBits BVBA (freelancer)
 
thrift-20070401
Hiroshi Ono
 
Steve Vinoski Rest And Reuse And Serendipity
deimos
 
Rest Reuse And Serendipity
QConLondon2008
 
服务框架: Thrift & PasteScript
Qiangning Hong
 
The use of Symfony2 @ Overblog
Xavier Hausherr
 
Yotpo microservices
Ron Barabash
 
facebookthrift-151001153400-lva1-app6891.pptx
PrasannaKumarpanda2
 
Generating Unified APIs with Protocol Buffers and gRPC
C4Media
 
Cross-platform interaction
Oleksii Duhno
 
Multi-Lingual Accumulo Communications
Accumulo Summit
 
Distributed Ruby and Rails
Wen-Tien Chang
 
ghfghg
hoefo
 
Charlton Barreto - The OGF | Open Cloud Computing Interface
CloudCamp Hamburg
 

Recently uploaded (20)

PPTX
Can You Build Dashboards Using Open Source Visualization Tool.pptx
Varsha Nayak
 
PDF
An Experience-Based Look at AI Lead Generation Pricing, Features & B2B Results
Thomas albart
 
PDF
10 posting ideas for community engagement with AI prompts
Pankaj Taneja
 
PPT
Activate_Methodology_Summary presentatio
annapureddyn
 
PPTX
slidesgo-unlocking-the-code-the-dynamic-dance-of-variables-and-constants-2024...
kr2589474
 
PDF
Summary Of Odoo 18.1 to 18.4 : The Way For Odoo 19
CandidRoot Solutions Private Limited
 
PDF
Exploring AI Agents in Process Industries
amoreira6
 
PDF
Applitools Platform Pulse: What's New and What's Coming - July 2025
Applitools
 
PPT
Why Reliable Server Maintenance Service in New York is Crucial for Your Business
Sam Vohra
 
PPTX
AI-Ready Handoff: Auto-Summaries & Draft Emails from MQL to Slack in One Flow
bbedford2
 
PDF
Adobe Illustrator Crack Full Download (Latest Version 2025) Pre-Activated
imang66g
 
PPTX
Presentation about Database and Database Administrator
abhishekchauhan86963
 
PPTX
ConcordeApp: Engineering Global Impact & Unlocking Billions in Event ROI with AI
chastechaste14
 
DOCX
Can You Build Dashboards Using Open Source Visualization Tool.docx
Varsha Nayak
 
PDF
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
ESUG
 
PDF
Protecting the Digital World Cyber Securit
dnthakkar16
 
PDF
Key Features to Look for in Arizona App Development Services
Net-Craft.com
 
PDF
New Download FL Studio Crack Full Version [Latest 2025]
imang66g
 
PDF
Generating Union types w/ Static Analysis
K. Matthew Dupree
 
PDF
Using licensed Data Loss Prevention (DLP) as a strategic proactive data secur...
Q-Advise
 
Can You Build Dashboards Using Open Source Visualization Tool.pptx
Varsha Nayak
 
An Experience-Based Look at AI Lead Generation Pricing, Features & B2B Results
Thomas albart
 
10 posting ideas for community engagement with AI prompts
Pankaj Taneja
 
Activate_Methodology_Summary presentatio
annapureddyn
 
slidesgo-unlocking-the-code-the-dynamic-dance-of-variables-and-constants-2024...
kr2589474
 
Summary Of Odoo 18.1 to 18.4 : The Way For Odoo 19
CandidRoot Solutions Private Limited
 
Exploring AI Agents in Process Industries
amoreira6
 
Applitools Platform Pulse: What's New and What's Coming - July 2025
Applitools
 
Why Reliable Server Maintenance Service in New York is Crucial for Your Business
Sam Vohra
 
AI-Ready Handoff: Auto-Summaries & Draft Emails from MQL to Slack in One Flow
bbedford2
 
Adobe Illustrator Crack Full Download (Latest Version 2025) Pre-Activated
imang66g
 
Presentation about Database and Database Administrator
abhishekchauhan86963
 
ConcordeApp: Engineering Global Impact & Unlocking Billions in Event ROI with AI
chastechaste14
 
Can You Build Dashboards Using Open Source Visualization Tool.docx
Varsha Nayak
 
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
ESUG
 
Protecting the Digital World Cyber Securit
dnthakkar16
 
Key Features to Look for in Arizona App Development Services
Net-Craft.com
 
New Download FL Studio Crack Full Version [Latest 2025]
imang66g
 
Generating Union types w/ Static Analysis
K. Matthew Dupree
 
Using licensed Data Loss Prevention (DLP) as a strategic proactive data secur...
Q-Advise
 

Apache Thrift, a brief introduction

  • 1. -- Randy Abernethy, rx-m llc, 2014
  • 2. polyglotism • Modern distributed applications are rarely composed of modules written in a single language • Weaving together innovations made in a range of languages is a core competency of successful enterprises • Cross language communications are a necessity, not a luxury
  • 3. thrift • Apache Thrift – A high performance, scalable cross language serialization and RPC framework • What? – Full RPC Implementation - Apache Thrift supplies a complete RPC solution: clients, servers, everything but your business logic – Modularity - Apache Thrift supports plug-in serialization protocols: binary, compact, json, or build your own – Multiple End Points – Plug-in transports for network, disk and memory end points, making Thrift easy to integrate with other communications and storage solutions like AMQP messaging and HDFS – Performance - Apache Thrift is fast and efficient, solutions for minimal parsing overhead and minimal size – Reach - Apache Thrift supports a wide range of languages and platforms: Linux, OSX, Windows, Embedded Systems, Mobile, Browser, C++, Go, PHP, Erlang, Haskell, Ruby, Node.js, C#, Java, C, OCaml, ObjectiveC, D, Perl, Python, SmallTalk, … – Flexibility - Apache Thrift supports interface evolution, that is to say, CI/CD environments can roll new interface features incrementally without breaking existing infrastructure
  • 4. • Service Interfaces are described with the Apache Thrift Interface Definition Language (IDL) • Client/Server Stubs are generated with the Apache Thrift IDL Compiler • The IDL Compiler can generate stubs in over 15 languages • Existing code modules are easily converted into RPC services using the Apache Thrift Server Library rpcservices
  • 5. performance &reach • Thrift provides excellent performance for all but the most demanding solutions • Thrift provides broad reach, supporting a wide range of languages and platforms Custom Thrift REST Extreme Performance Extreme Reach High Performance Broad Reach Enterprise Compact Frameworks, C, etc. Web tech, scripting SOA, RPC Servers, Java, C#, C++, etc. WebEmbedded
  • 6. thriftidl 1. Define the service interface in IDL 2. Compile the IDL to generate client/server stubs 3. Connect the server stubs to the desired implementation 4. Choose an Apache Thrift server to host your service 5. Call RPC functions like local function using the client stubs #sail_stats.thrift service SailStats { double GetSailorRating(1: string SailorName) double GetTeamRating(1: string TeamName) double GetBoatRating(1: i64 BoatSerialNumber) list<string> GetSailorsOnTeam(1: string TeamName) list<string> GetSailorsRatedBetween(1: double MinRating, 2: double MaxRating) string GetTeamCaptain(1: string TeamName) }
  • 7. helloworld ~/thrift/hello $ ls -l -rw-r--r-- 1 dev dev 95 Mar 26 16:28 hello.thrift ~/thrift/hello $ thrift -gen py hello.thrift ~/thrift/hello $ ls -l drwxr-xr-x 3 dev dev 4096 Mar 26 16:31 gen-py -rw-r--r-- 1 dev dev 95 Mar 26 16:28 hello.thrift ~/thrift/hello $ ls -l gen-py drwxr-xr-x 2 dev dev 4096 Mar 26 16:31 hello -rw-r--r-- 1 dev dev 0 Mar 26 16:31 __init__.py ~/thrift/hello $ ls -l gen-py/hello -rw-r--r-- 1 dev dev 248 Mar 26 16:31 constants.py -rw-r--r-- 1 dev dev 5707 Mar 26 16:31 HelloSvc.py -rwxr-xr-x 1 dev dev 1896 Mar 26 16:31 HelloSvc-remote -rw-r--r-- 1 dev dev 46 Mar 26 16:31 __init__.py -rw-r--r-- 1 dev dev 398 Mar 26 16:31 ttypes.py ~/thrift/hello $ • Compiling IDL for an RPC service Generated Code • Interface Constants • HelloSvc Stubs • Sample Client • Package Init File • Interface Types
  • 8. helloserver • A Python RPC Server
  • 9. helloclient • A Python RPC Client
  • 10. compiled languages • A C++ RPC client #include <iostream> #include <string> #include <boost/shared_ptr.hpp> #include <thrift/transport/TSocket.h> #include <thrift/protocol/TBinaryProtocol.h> #include "gen-cpp/HelloSvc.h"" using namespace apache::thrift::transport; using namespace apache::thrift::protocol; using namespace boost; int main() { auto socket = make_shared<TSocket>("localhost", 8585); socket->open(); auto protocol = make_shared<TBinaryProtocol>(socket); HelloSvcClient client(protocol); std::string msg; client.hello_func(msg); std::cout << "[Client] received: " << msg << std::endl; }
  • 11. jvmlanguages • A Java RPC client operational
  • 12. .netlanguages • A C# RPC client
  • 13. • Apache Thrift uses a compiled IDL implementation – IDL is compiled generating stubs used at run time – Runtime serialization code allows for interface evolution • Apache Thrift IDL supports – Service Interface Definition – Type Definition • Service interfaces are exposed by Servers – Servers can implement many service interfaces – Interfaces can inherit from other interfaces • Types define serialization schemas – Types can be serialized to memory, disk or networks – Collections are supported (map, list, set) – Structures and Unions support composite types – DAGs are supported • New addition not widely implemented as of yet morethanrpc Interface Evolution Apache Thrift allows fields and parameters to be added and removed incrementally without breaking pre-existing code, allowing systems to grow incrementally over time (just like businesses) Particularly effective in dynamic CI/CD environments
  • 14. abstractand isolated • Crafting an effective IDL requires understanding some of the most important things about your system – What are the key entities in your system and how are they described – What are their cardinalities – What are their keys – Which are immutable – Can you define idempotent interfaces for mutations – What are the operational affinity groups in your system – What is your system model and how will state and services be distributed across it • All of these things bear directly on IDL design • Free of implementation, you can get the concepts right and then choose the best languages and tools to implement them
  • 15. entities&idl • Modern IDLs, like Apache Thrift, provide a rich set of tools for describing system entities (aka. messages) • Capturing and codifying the key system entities is prerequisite to effective interface specification • In some settings crafting the entities (e.g. an order) is all that the IDL need do Services are Optional!
  • 16. commschemes • Streaming – Communications characterized by an ongoing flow of bytes from a server to one or more clients. – Example: An internet radio broadcast where the client receives bytes over time transmitted by the server in an ongoing sequence of small packets. • Messaging – Message passing involves one way asynchronous, often queued, communications, producing loosely coupled systems. – Example: Sending an email message where you may get a response or you may not, and if you do get a response you don’t know exactly when you will get it. • RPC – Remote Procedure Call systems allow function calls to be made between processes on different computers. – Example: An iPhone app calling a service on the Internet which returns the weather forecast. Apache Thrift is an efficient cross platform serialization solution for streaming interfaces Apache Thrift provides a complete RPC framework
  • 17. architecture • User Code – client code calls RPC methods and/or [de]serializes objects – service handlers implement RPC service behavior • Generated Code – RPC stubs supply client side proxies and server side processors – type serialization code provides serialization for IDL defined types • Library Code – servers host user defined services, managing connections and concurrency – protocols perform serialization – transports move bytes from here to there
  • 18. • The Thrift framework was originally developed at Facebook and released as open source in 2007. The project became an Apache Software Foundation incubator project in 2008, after which four early versions were released. • 0.2.0 released 2009-12-12 • 0.3.0 released 2010-08-05 • 0.4.0 released 2010-08-23 • 0.5.0 released 2010-10-07 • In 2010 the project was moved to Apache top level status where several additional versions have been released. • 0.6.0 released 2011-02-08 • 0.6.1 released 2011-04-25 • 0.7.0 released 2011-08-13 • 0.8.0 released 2011-11-29 • 0.9.0 released 2012-10-15 • 0.9.1 released 2013-07-16 • 0.9.2 released 2014-06-01 • 1.0.0 released 2015-01-01 versions it is difficult to make predictions, particularly about the future. -- Mark Twain, Yogi Berra, etc. Open Source Community Developed Apache License Version 2.0
  • 19. resources • Web – thrift.apache.org – github.com/apache/thrift • Mail – Users: [email protected] – Developers: [email protected] • Chat – #thrift • Book – Abernethy (2014), The Programmer’s Guide to Apache Thrift, Manning Publications Co. [http://www.manning.com/abernethy/] Chapter 1 is free Randy Abernethy [email protected]

Editor's Notes

  • #12: Roll the auto discussion into the non member begin/end discussion
  • #13: Roll the auto discussion into the non member begin/end discussion