Thirftフレーム紹介

4224 ワード

原文:http://dongxicheng.org/search-engine/thrift-framework-intro/
1、はじめに
Thriftは言語を超えたサービス展開の枠組みであり、最初はFacebookで2007年に開発され、2008年にApacheのオープンソースプロジェクトに入った。Thriftは、中間言語(IDL、インターフェース定義言語)によってRPCのインターフェースとデータタイプを定義し、異なる言語のコード(現在はC+++、Java、Python、PHP、Ruby、Errlang、Perl、Haskell、C柚、Cocoa、Smalltalk、OCamlをサポートしています。)を生成し、RPCのトランスポート・プロトコルを実行します。
本明細書では、以下のように構成されています。1)引用2)アーキテクチャ3)によってサポートされるデータ伝送フォーマット、データ伝送方式、サービスモデル4)Thriftインストール5)によって、Thift配置サービスを利用して、
2、アーキテクチャ
Thriftは実際にC/Sモードを実現し、コード生成ツールを通じてインタフェース定義ファイルをサーバ端とクライアントコード(異なる言語でも良い)に生成し、サービス端末とクライアントの言語横断サポートを実現します。ユーザーはThirft記述ファイルで自分のサービスを宣言します。これらのサービスはコンパイルされた後、該当言語のコードファイルを作成し、ユーザーがサービス(クライアントコールサービス、サーバ端末サービス)を実現すればいいです。プロトコール(プロトコル層、データ転送フォーマットを定義し、バイナリやXMLなど)やトランスポート層(トランスポート層、データ転送方式を定義し、TCP/IP伝送、メモリ共有やファイル共有など)をランタイムライブラリとして使用することができる。上図の詳細説明は【1】を参照してください。
3、サポートされているデータ伝送フォーマット、データ伝送方式とサービスモデル
(1)サポートされている送信フォーマット
TB inaryProtocl–バイナリフォーマット.
TCompactProtocol–圧縮フォーマット
TJSONProtocol–JSONフォーマット
TSimpleJSONProtocol–JSONはプロトコルだけを書いて、作成したファイルはスクリプト言語で解析しやすいです。
TDebug Protocol–debugのために分かりやすい読み取り可能なテキストフォーマットを使用します。
(2)サポートされているデータ伝送方式
TSocket-閉塞式socker
TFrame edTransport–frame単位で伝送し、非閉塞式サービスで使用します。
TFileTransport–ファイル形式で転送します。
TMemoryTransport–メモリをI/O.javaに使うと内部に実際に簡単なByteArayOutputStreamが使われます。
TZlibTransport–zlibを用いて圧縮し、他の伝送方式と連携して使用する。現在はjavaが実現されていません。
(3)サポートされているサービスモデル
TSimpleServer–簡単なシングルスレッドサービスモデルは、常にテストに使用されます。
TThreadPoolServer–マルチスレッドサービスモデルは、標準的なブロックIOを使用しています。
TNonblockingServer–マルチスレッドサービスモデルは、非ブロッキングIOを使用しています(TFrame edTransportデータ伝送方式を使用してください)。
4、Thriftインストール
ダウンロード:http://incubator.apache.org/thrift/download/
設置要求:
Unix/linuxシステム、windows+cygwin
C++言語:g+、book
java言語:JDK、Apache Ant
他の言語:Python、PHP、Perl、etc…
コンパイルインストール:./configure–」make install
1、Thriftを利用した配置サービス
主なプロセス:サービス説明を作成し、保存します。thriftファイル–は必要に応じて、編集します。thriftファイルは、対応する言語ソースコードを生成します。
(1).thriftファイル作成
一般的にサービスを一つの.thriftファイルに入れます。サービスの作成文法はC言語文法とほぼ一致しています。thriftファイルには主に以下の内容があります。変数宣言、データ声明(struct)とサービスインターフェース声明(serviceは他のインターフェースを継承できます。)。
Thriftのtutorialにある例を以下に分析します。
ヘッダを含むファイル:
59行:include「shared.thrift」–
ターゲット言語を指定:
65行:namespace cpp tutorial–
変数を定義:
80行:const i 32 INT 32コンNSTANT=9853–
構造体を定義:
103行:struct Work{
1:i 32 num 1=0、
2:i 32 num 2、
3:Operation op、
4:optionl string compment、

サービスを定義:
service Calculator extens sharred.Shared Service{
void ping()、
i 32 add(1:i 32 num 1,2:i 32 num 2)
i 32 calculate(1:i 32 logid,2:Work w)throws(1:InvalidOperation ouch)
ワンウェイay void zip()
)
        C++  :./thrift --gen cpp tutorial.thrift,       gen-cpp   
        java  :./thrift --gen java tutorial.thrift,       gen-java   
      ….. 
(2)client端とserver端コード編纂
client端とsever端コードはコンパイル・thriftが生成した中間ファイルを呼び出します。
cppファイルの下のCppClient.cppとCppServer.cppコードを分析します。
client端において、ユーザーがCalculatoCientタイプのオブジェクトをカスタマイズし(ユーザが.thriftファイルで宣言したサービス名がCalculatorである場合、生成した中間コードの主な種類はCalculatoClient)、このオブジェクトには様々なサービスが封入されており、直接に呼び出すことができます。
serverでは、clientからの要求を処理するために、thriftファイルで宣言されたサービスのすべての機能を実現する必要があります。
【参考資料】1、 http://wiki.apache.org/thrift/2を選択します http://jnb.ociweb.com/jnb/jnbJun2009.html3を選択します http://blog.rushcj.com/tag/thrift/4を選択します http://www.vvcha.cn/c.aspx?id=319845を選択しますhttp://www.thoss.org.cn/mediawiki/index.php/Thrift%E7%9A%84%E9%80%9A%E4%BF%A1%E6%9C%BA%E5%88%B6%E5%8F%8A%E5%85%B6%E5%9C%A8cassandra%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8
オリジナルの文章は転載します。 ブログを転載しました。
ここのリンク先: http://dongxicheng.org/search-engine/thrift-framework-intro/