Your SlideShare is downloading. ×
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
about Thrift
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

about Thrift

6,569

Published on

Published in: Technology
0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,569
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
42
Comments
0
Likes
12
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Thrift Naoya Ito naoya at hatena ne jp
  • 2. Thrift
    • クロス言語 RPC フレームワーク
      • http://developers.facebook.com/thrift/
      • http://incubator.apache.org/thrift/
  • 3. Thrift が使える場面
    • 検索サービス開発
      • C++ でインデクサ、エンジン
        • "整数をbit単位で圧縮" な世界に LL は使いづらい
      • Perl や PHP でテキスト前処理、Web 部分
        • テキスト解析は C++ では大変
        • Web アプリケーションを C++ で作るのは手間
    Thrift: 各言語が得意な箇所をその言語で実装して RPC で結合
  • 4. XS や SWIG との違い
    • XS、SWIG ->ライブラリレベルでの結合
    • Thrift -> サービスレベルでの結合
      • RPC, 分散オブジェクト呼び出し
      • CORBA などに類似
  • 5. Thrift で RPC の手順
    • Thrift IDL を書く
    • thrift コマンドでコードを生成
    • サーバーを書く
    • クライアントを書く
  • 6. 1. Thrift IDL でインタフェースを定義
    • hello("naoya") -> "Hello, naoya"
    #!/usr/bin/thrift service Hello { string hello(1: string name) }
  • 7. 2. thrift コマンドでコード生成
    • クライアント用 perl ライブラリ
    • サーバー用 C++ スケルトン
    % thrift --gen cpp --gen perl hello.thrift % ls -F gen-cpp/ gen-perl/ hello.thrift
  • 8. サーバーのスケルトン #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;    /* ... 以下略 ...*/
  • 9. 3. サーバーを書く
    • スケルトンにドメインロジックを書く
    void hello(std::string& _return, const std::string& name) { // Your implementation goes here _return.append("Hello ").append(name); }
  • 10. サーバーコンパイル , 立ち上げ % g++ -g Hello_server.cpp Hello.cpp > -o Hello_server > -lthrift > -I/usr/local/include/thrift % ./Hello_server
  • 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 "%s ", $client->hello("naoya") ; $transport->close();
  • 12. 実行 % perl hello.pl Hello, naoya
  • 13. 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
  • 14. Thrift の良い所
    • 複雑なシステム環境が必要いらず
    • メジャーな言語に対応
      • C++, C#, Erlang, Haskell, Java, Objective C, OCaml, Perl, PHP, Python, Ruby, Squeak
        • Java でサーバ、 Ruby でクライアント
        • Haskell でサーバ、 OCaml でクライアント
        • ...
    • 世界最大規模のサイトでの稼働実績
      • Facebook の Web サーバーは 10,000 台以上
    • Thrift 内部の抽象レイヤの設計が◎
  • 15. Perl で Thrift
    • Thrift の Perl サポート
      • クライアントはサポートされている
      • サーバーは今のところ未サポート
    • Perl のサーバー実装を作りました
      • http://github.com/naoya/perl-thrift-server/tree/master
    • Web+DB PRESS Vol.46 にて解説
  • 16. 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
  • 17. まとめ
    • Thrift を使うと複数言語の良い所取りでサービス開発が可能です
    • IDL を書いてコードを生成し、クライアントとサーバーを書きます
  • 18. Thanks!

×