• 検索結果がありません。

ファイル置き場 日本Cassandraコミュニティ Using Thrift

N/A
N/A
Protected

Academic year: 2018

シェア "ファイル置き場 日本Cassandraコミュニティ Using Thrift"

Copied!
17
0
0

読み込み中.... (全文を見る)

全文

(1)

Using Thrift

Fumihiko Sato

(2)

Agenda

Thrift とは

       なぜ RPC

Thrift の特徴

       使いかた

       参考

        ※ 本内容の対象バージョン:  0.2.0

(3)

Thrift とは

Facebook で開発された RPC フレームワーク

( 現在は OSS として Apache 財団に寄与 )

         そもそも、 RPC (Remote Procedure Call) とは ...

       プログラムから別のアドレス空間にある

       サブルーチンや手続きを実行することを可能にする技術

       例) CORBA, XML-RPC(SOAP)

REST は一意の URI に対してリソースを要求するもので、 RPC は操作を要求するものとして区別される。

       同様の目的で、 Protocol Buffer(Google), BERT-RPC(GitHub) などがある。 

(4)

なぜ RPC

            昨今の Web サービス実装において、

LAMP だけでは解決しないケースが多い

            役割に応じてリソースを分散し、

            それぞれの役割に最適な言語で処理を

             記述するのが主流の設計となっている

            処理 / リソース ( データ ) 要求において

、              手軽な REST が使われることが多いが

            転送データサイズが肥大化したり、

            実装側でパースとか面倒だったりする

(5)

Thrift の特徴

     ・既存の RPC(SOAP, CORBA) に比べて軽量で自由度が高い

     ・サポート言語が豊富

C++(g++ 3.3.5+ with Boost 1.33.1+), Java(1.5+/Ant), Python(2.4+) PHP(5.0+), Ruby(1.8+), Perl(5/Bit::Vector/Class::Accessor),

Erlang(R12), Cocoa,...

       各言語用の Server/Client コードジェネレータが付属している (thrift コマンドはジェネレータそのものだったりする )

     ・プロトコル層とトランスポート層を抽象レイヤとして

         設計されているため、言語別で同等の API を提供する 

     ・バージョニング(メソッドパラメータ)

(6)

Thrift の特徴

Thrift のレイヤについて Client 側から考察

IDL より自動生成される Client モジュール

→ TBinaryProtocol しかないみたい

→ TBufferdTransport(with TSocket)

THttpClient( 言語の HTTP client 機能を使用 )      その他 ...

      実装言語で若干種類が異なるようだ

↑ 下層のインスタンスを持って上層のインスタンスを生成するイメージ。

(7)

Thrift の特徴

Thrift で扱えるデータ型

         ・基本データ型

bool(true/false), byte(signed byte), i16(16-bit signed integer), i32(32-bit signed integer), i64(64-bit signed integer),

double(64-bit floating point number), strin(text/binary)

         ・構造体

         ・コンテナ

list(ordered list), set(unordered list), map(key-value)

         ・例外 

         ・サービス 

(8)

(インストール方法は省略)

使い方

        ■ 準備 

1) IDL にてインターフェースを定義する

      

例として  "Hello" というサービスで

hello というメソッドを  hello.thrift に記述したとする #!/usr/local/thrift/bin/thrift

service Hello {

string hello(1: string name) }

2) thrift コマンドにより、対象言語のコードを生成

      

例としてサーバに C++, クライアントに PHP を使うとする

$ thrift --gen cpp --gen php hello.thrift

(9)

使い方

         ■ サーバ側

1) Server スケルトンのドメインロジックを記述する

$ cd gen-cpp/

$ cp Hello_server.skeleton.cpp Hello_server.cpp $ vi Hello_server.cpp

IDL で定義したメソッド内部のロジックだけを記述する

       必要に応じて include するヘッダファイルの追加等はある

       

 

(10)

使い方

2) コンパイル

$ g++ Hello_server.cpp Hello.cpp -o Hello_server -lthrift ¥ -I/usr/local/include/thrift

3) 起動(デフォルトではポート 9090 で listen )

$ ./Hello_server

(11)

使い方

        ■ クライアント側

1) Thrift の PHP モジュールおよび生成モジュールを

       然るべき場所に格納する

(12)

使い方

2) クライアントスクリプトの作成  (hello.php)

[ 概要 ]

- $GLOBALS['THRIFT_ROOR'] = 然るべきパスを設定

- ホスト、ポート指定で TSocket インスタンス ($tsock) を作成 - $tsock をもって TTransport インスタンス ($ttrans) を作成

- $trrans をもって TProtocol インスタンス ($tproto) を作成 - $tproto をもって HelloClient インスタンス ($client) を作成 - $ttrans->open();

- $res = $client->hello($arg); IDL 定義のメソッド - $ttrans->close();

(13)

使い方

(14)

使い方

3) 叩く

$ php hello.php Thrift

Hello Thrift $res を echo したとして

       接続に失敗した場合は、 TException が発生する getMessage するとこんな感じ

TSocket: Could not connect to fedora:9090 (Connection refused [61])

python, perl もほとんど一緒

(15)

参考

Apache Incubator

http://incubator.apache.org/thrift/

CyDN - フレームワーク「 Thrift 」調査報告

http://cydn.cybozu.co.jp/2007/06/thrift.html

     はてな 伊藤直哉氏によるプレゼンスライド

http://www.slideshare.net/guestf259ae/thrift

※WEB-DB PRESS vol.46 にも記事あり

Thrift: Scalable Cross-Language Services Implementation

http://developers.facebook.com/thrift/thrift-20070401.pdf

(16)

補足

PHP の場合は Server/Client とも実行環境に thrift そのものが

     インストールされている必要はない

(IDL からコード生成するときだけに必要 )

Server に PHP を使った場合、 HTTP に乗っかることになる

(Content-Type:application/x-thrift)

        →  このとき、 Client のトランスポートは THttpClient を

使う 

HTTP であれば、普通に 80 ポートで FireWall を超えた

       呼び出しも可能である (Evernote API のパターン )

APC を使えば、 PHP Client 側で Socket Pool が使える

(17)

Thanks.

参照

関連したドキュメント

日本語接触場面における参加者母語話者と非母語話者のインターアクション行動お

〜は音調語気詞 の位置 を示す ○は言い切 りを示 す 内 は句 の中のポイ ント〈 〉内は場面... 表6

操作は前章と同じです。但し中継子機の ACSH は、親機では無く中継器が送信する電波を受信します。本機を 前章①の操作で

【その他の意見】 ・安心して使用できる。

利用している暖房機器について今冬の使用開始月と使用終了月(見込) 、今冬の使用日 数(見込)

本センターは、日本財団のご支援で設置され、手話言語学の研究と、手話の普及・啓

(3) 貨物の性質、形状、機能、品質、用途その他の特徴を記載した書類 商品説明書、設計図面等. (4)

本研究科は、本学の基本理念のもとに高度な言語コミュニケーション能力を備え、建学