Thrift
Upcoming SlideShare
Loading in...5
×
 

Thrift

on

  • 6,092 views

 

Statistics

Views

Total Views
6,092
Views on SlideShare
6,033
Embed Views
59

Actions

Likes
6
Downloads
24
Comments
1

4 Embeds 59

http://www.slideshare.net 35
http://hihu.tumblr.com 21
http://s.deeeki.com 2
http://devel.slideee.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Thrift Thrift Presentation Transcript

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