Thrift Naoya Ito naoya at hatena ne jp
Thrift <ul><li>クロス言語 RPC フレームワーク </li></ul><ul><ul><li>http://developers.facebook.com/thrift/ </li></ul></ul><ul><ul><li>h...
Thrift  が使える場面 <ul><li>検索サービス開発 </li></ul><ul><ul><li>C++ でインデクサ、エンジン </li></ul></ul><ul><ul><ul><li>&quot;整数をbit単位で圧縮&quo...
XS  や  SWIG  との違い <ul><li>XS、SWIG ->ライブラリレベルでの結合 </li></ul><ul><li>Thrift -> サービスレベルでの結合 </li></ul><ul><ul><li>RPC, 分散オブジェ...
Thrift  で  RPC  の手順 <ul><li>Thrift IDL を書く </li></ul><ul><li>thrift コマンドでコードを生成 </li></ul><ul><li>サーバーを書く </li></ul><ul><l...
1. Thrift IDL  でインタフェースを定義 <ul><li>hello(&quot;naoya&quot;)  ->  &quot;Hello, naoya&quot; </li></ul>#!/usr/bin/thrift serv...
2. thrift  コマンドでコード生成 <ul><li>クライアント用 perl ライブラリ </li></ul><ul><li>サーバー用 C++ スケルトン </li></ul>% thrift --gen cpp --gen perl...
サーバーのスケルトン #include &quot;Hello.h&quot; /*  中略  */ class HelloHandler : virtual public HelloIf { public: HelloHandler() { ...
3.  サーバーを書く <ul><li>スケルトンにドメインロジックを書く </li></ul>void hello(std::string& _return, const std::string& name) { // Your implem...
サーバーコンパイル ,  立ち上げ % g++ -g Hello_server.cpp Hello.cpp  > -o Hello_server  > -lthrift  > -I/usr/local/include/thrift % ./He...
4. Perl  でクライアントを書く use lib './gen-perl'; ## Thrift  インストール時にインストールされているライブラリ群 use Thrift; use Thrift::BinaryProtocol; use...
実行 % perl hello.pl Hello, naoya
Ruby  でクライアントを書く <ul><li>Perl 版とほとんど同じ </li></ul><ul><li>Thrift の抽象レイヤの賜 </li></ul>transport = TBufferedTransport.new(TSoc...
Thrift  の良い所 <ul><li>複雑なシステム環境が必要いらず </li></ul><ul><li>メジャーな言語に対応 </li></ul><ul><ul><li>C++, C#, Erlang, Haskell, Java, Ob...
Perl  で  Thrift <ul><li>Thrift の Perl サポート </li></ul><ul><ul><li>クライアントはサポートされている </li></ul></ul><ul><ul><li>サーバーは今のところ未サポ...
Thrift  情報 <ul><li>CyDN -  フレームワーク「 Thrift 」調査報告 </li></ul><ul><ul><li>Thrift  の概要、簡単な利用方法 </li></ul></ul><ul><ul><li>http...
まとめ <ul><li>Thrift を使うと複数言語の良い所取りでサービス開発が可能です </li></ul><ul><li>IDL を書いてコードを生成し、クライアントとサーバーを書きます </li></ul>
Thanks!
Upcoming SlideShare
Loading in …5
×

Thrift

4,685 views
4,609 views

Published on

Published in: Technology
1 Comment
6 Likes
Statistics
Notes
No Downloads
Views
Total views
4,685
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
25
Comments
1
Likes
6
Embeds 0
No embeds

No notes for slide

Thrift

  1. 1. Thrift Naoya Ito naoya at hatena ne jp
  2. 2. Thrift <ul><li>クロス言語 RPC フレームワーク </li></ul><ul><ul><li>http://developers.facebook.com/thrift/ </li></ul></ul><ul><ul><li>http://incubator.apache.org/thrift/ </li></ul></ul>
  3. 3. Thrift が使える場面 <ul><li>検索サービス開発 </li></ul><ul><ul><li>C++ でインデクサ、エンジン </li></ul></ul><ul><ul><ul><li>&quot;整数をbit単位で圧縮&quot; な世界に LL は使えない </li></ul></ul></ul><ul><ul><li>Perl や PHP でテキスト前処理、Web 部分 </li></ul></ul><ul><ul><ul><li>テキスト解析は C++ では大変 </li></ul></ul></ul><ul><ul><ul><li>Web アプリケーションを C++ で作るのは手間 </li></ul></ul></ul>Thrift: 各言語が得意な箇所をその言語で実装して RPC で結合
  4. 4. XS や SWIG との違い <ul><li>XS、SWIG ->ライブラリレベルでの結合 </li></ul><ul><li>Thrift -> サービスレベルでの結合 </li></ul><ul><ul><li>RPC, 分散オブジェクト呼び出し </li></ul></ul><ul><ul><li>CORBA などに類似 </li></ul></ul>
  5. 5. Thrift で RPC の手順 <ul><li>Thrift IDL を書く </li></ul><ul><li>thrift コマンドでコードを生成 </li></ul><ul><li>サーバーを書く </li></ul><ul><li>クライアントを書く </li></ul>
  6. 6. 1. Thrift IDL でインタフェースを定義 <ul><li>hello(&quot;naoya&quot;) -> &quot;Hello, naoya&quot; </li></ul>#!/usr/bin/thrift service Hello { string hello(1: string name) }
  7. 7. 2. thrift コマンドでコード生成 <ul><li>クライアント用 perl ライブラリ </li></ul><ul><li>サーバー用 C++ スケルトン </li></ul>% thrift --gen cpp --gen perl hello.thrift % ls -F gen-cpp/ gen-perl/ hello.thrift
  8. 8. サーバーのスケルトン #include &quot;Hello.h&quot; /* 中略 */ class HelloHandler : virtual public HelloIf { public: HelloHandler() { // Your initialization goes here } void hello(std::string& _return, const std::string& name) { // Your implementation goes here printf(&quot;hello &quot;); } }; int main(int argc, char **argv) { int port = 9090;    /* ... 以下略 ...*/
  9. 9. 3. サーバーを書く <ul><li>スケルトンにドメインロジックを書く </li></ul>void hello(std::string& _return, const std::string& name) { // Your implementation goes here _return.append(&quot;Hello &quot;).append(name); }
  10. 10. サーバーコンパイル , 立ち上げ % g++ -g Hello_server.cpp Hello.cpp > -o Hello_server > -lthrift > -I/usr/local/include/thrift % ./Hello_server
  11. 11. 4. Perl でクライアントを書く use lib './gen-perl'; ## Thrift インストール時にインストールされているライブラリ群 use Thrift; use Thrift::BinaryProtocol; use Thrift::Socket; ## IDL から gen-perl/ 以下に生成されたライブラリ use Hello; my $transport = Thrift::Socket->new('localhost', 9090); my $client = HelloClient->new( Thrift::BinaryProtocol->new($transport) ); $transport->open(); printf &quot;%s &quot;, $client->hello(&quot;naoya&quot;) ; $transport->close();
  12. 12. 実行 % perl hello.pl Hello, naoya
  13. 13. Ruby でクライアントを書く <ul><li>Perl 版とほとんど同じ </li></ul><ul><li>Thrift の抽象レイヤの賜 </li></ul>transport = TBufferedTransport.new(TSocket.new('localhost', 9090)) client = Hello::Client.new( TBinaryProtocol.new(transport)) transport.open puts client.hello(&quot;naoya&quot;) transport.close
  14. 14. Thrift の良い所 <ul><li>複雑なシステム環境が必要いらず </li></ul><ul><li>メジャーな言語に対応 </li></ul><ul><ul><li>C++, C#, Erlang, Haskell, Java, Objective C, OCaml, Perl, PHP, Python, Ruby, Squeak </li></ul></ul><ul><ul><ul><li>Java でサーバ、 Ruby でクライアント </li></ul></ul></ul><ul><ul><ul><li>Haskell でサーバ、 OCaml でクライアント </li></ul></ul></ul><ul><ul><ul><li>... </li></ul></ul></ul><ul><li>世界最大規模のサイトでの稼働実績 </li></ul><ul><ul><li>Facebook の Web サーバーは 10,000 台以上 </li></ul></ul><ul><li>Thrift 内部の抽象レイヤの設計が◎ </li></ul>
  15. 15. Perl で Thrift <ul><li>Thrift の Perl サポート </li></ul><ul><ul><li>クライアントはサポートされている </li></ul></ul><ul><ul><li>サーバーは今のところ未サポート </li></ul></ul><ul><li>Perl のサーバー実装を作りました </li></ul><ul><ul><li>http://github.com/naoya/perl-thrift-server/tree/master </li></ul></ul><ul><li>Web+DB PRESS Vol.46 にて解説 </li></ul>
  16. 16. Thrift 情報 <ul><li>CyDN - フレームワーク「 Thrift 」調査報告 </li></ul><ul><ul><li>Thrift の概要、簡単な利用方法 </li></ul></ul><ul><ul><li>http://cydn.cybozu.co.jp/2007/06/thrift.html </li></ul></ul><ul><li>Thrift Wiki </li></ul><ul><ul><li>オフィシャル Wiki </li></ul></ul><ul><ul><li>http://wiki.apache.org/thrift/ </li></ul></ul><ul><li>Thrift Whitepaper </li></ul><ul><ul><li>Thrift IDL の詳細、内部設計についても言及あり </li></ul></ul><ul><ul><li>http://developers.facebook.com/thrift/thrift-20070401.pdf </li></ul></ul>
  17. 17. まとめ <ul><li>Thrift を使うと複数言語の良い所取りでサービス開発が可能です </li></ul><ul><li>IDL を書いてコードを生成し、クライアントとサーバーを書きます </li></ul>
  18. 18. Thanks!

×