Address
:
[go:
up one dir
,
main page
]
Include Form
Remove Scripts
Accept Cookies
Show Images
Show Referer
Rotate13
Base64
Strip Meta
Strip Title
Session Cookies
More Web Proxy on the site http://driver.im/
Submit Search
about Thrift
•
Download as PPT, PDF
•
11 likes
•
2,300 views
N
Naoya Ito
Follow
1 of 18
Download now
Downloaded 43 times
More Related Content
about Thrift
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!
Download