Your SlideShare is downloading. ×
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,547

Published on

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

No Downloads
Views
Total Views
6,547
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
41
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!

×