ApacheThrift

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
ApacheThrift
ApacheThriftlogo.svg
原作者Facebook、Inc。
開発者Apache Software Foundation
安定リリース
0.14.1 / 2021年3月8日; 11ヶ月前 (2021-03-08)
リポジトリスリフトリポジトリ
で書かれているCallManagerCC#C ++DDartDelphiErlangGoHaskellHaxeJavaJavaScriptNode.jsOCamlPerlPHPPythonRustScalaSmallTalk
タイプリモートプロシージャコールフレームワーク
ライセンスApacheライセンス2.0
Webサイトthrift .apache .org

Thriftは、多数のプログラミング言語のサービス を定義および作成するために使用されるインターフェイス定義言語および バイナリ通信プロトコル[1]です。[2] Facebookで「スケーラブルなクロスランゲージサービス開発」のために開発され、2020年現在、 Apache SoftwareFoundationのオープンソースプロジェクトです。

リモートプロシージャコール(RPC)フレームワークを使用すると、ソフトウェアスタックとコード生成エンジンを組み合わせて、ActionScriptCC ++[3] C#などのさまざまな言語やフレームワークで記述されたアプリケーションを接続できるクロスプラットフォームサービスを構築できます。Cappuccino[4] CocoaDelphiErlangGoHaskellJavaJavaScriptObjective-COCamlPerlPHP PythonRubyElixir[5] RustScalaSmalltalkSwift[6] 実装は、現在ApacheでホストされているFacebookによってリリースされた2007年4月のテクニカルペーパーで説明されていました。[7] [8]

アーキテクチャ

Apache ThriftAPIクライアント/サーバーアーキテクチャ

Thriftには、クライアントとサーバーを作成するための完全なスタックが含まれています。[9]上部は、Thrift定義から生成されたコードです。このファイルから、サービスはクライアントとプロセッサのコードを生成します。組み込み型とは対照的に、作成されたデータ構造は、生成されたコードの結果として送信されます。プロトコルとトランスポート層ランタイムライブラリの一部です。Thriftを使用すると、コードを再コンパイルせずに、サービスを定義し、プロトコルとトランスポートを変更できます。クライアント部分に加えて、Thriftには、ブロッキング、非ブロッキング、マルチスレッドサーバーなど、プロトコルとトランスポートを結び付けるサーバーインフラストラクチャが含まれています。スタックの基礎となるI / O部分は、言語ごとに異なる方法で実装されます。

Thriftは多くのプロトコルをサポートしています:[9]

サポートされているトランスポートは次のとおりです。

  • TSimpleFileTransport –このトランスポートはファイルに書き込みます。
  • TFramedTransport –このトランスポートは、非ブロッキングサーバーを使用する場合に必要です。フレーム単位でデータを送信します。各フレームの前には長さ情報があります。
  • TMemoryTransport – I / Oにメモリを使用します。Java実装は、ByteArrayOutputStream内部的に単純なものを使用します。
  • TSocket –トランスポートにブロッキングソケットI / Oを使用します。
  • TZlibTransport –zlibを使用して圧縮を実行します別のトランスポートと組み合わせて使用​​されます。

Thriftは、いくつかのサーバーも提供しています。

  • TNonblockingServer –非ブロッキングI / Oを使用するマルチスレッドサーバー(Java実装はNIOチャネルを使用します)。このサーバーではTFramedTransportを使用する必要があります。
  • TSimpleServer –標準のブロッキングI / Oを使用するシングルスレッドサーバー。テストに役立ちます。
  • TThreadedServer –接続モデルごとのスレッドと標準のブロッキングI / Oを使用するマルチスレッドサーバー。
  • TThreadPoolServer –スレッドプールと標準のブロッキングI / Oを使用するマルチスレッドサーバー。

メリット

スリフトのいくつかの述べられた利点は次のとおりです。[要出典]

  • バイナリ形式を使用しているため、 SOAPなどの代替手段よりもオーバーヘッドが少ない言語間シリアル化。
  • XML構成ファイルはありません。
  • 言語バインディング自然に感じます。たとえば、Javaはを使用しArrayList<String>ます。C ++はを使用しstd::vector<std::string>ます。
  • アプリケーションレベルのワイヤフォーマットとシリアル化レベルのワイヤフォーマットは明確に分離されています。それらは個別に変更できます。
  • 事前定義されたシリアル化スタイルには、バイナリ、HTTP対応、コンパクトバイナリが含まれます。
  • クロスランゲージファイルのシリアル化を兼ねています
  • プロトコルのソフトバージョニング[明確化] 。Thriftは、メジャーバージョン/マイナーバージョンのような一元化された明示的なメカニズムを必要としませんゆるく結合されたチームは、RPC呼び出しを自由に進化させることができます。
  • ビルドの依存関係や非標準のソフトウェアはありません。互換性のないソフトウェアライセンスの組み合わせはありません。

Thriftサービスの作成

ThriftはC ++で記述されていますが、多くの言語のコードを作成できます。Thriftサービスを作成するには、それを説明するThriftファイルを作成し、宛先言語でコードを生成し、サーバーを起動するためのコードを作成して、クライアントから呼び出す必要があります。このような記述ファイルのコード例を次に示します。

列挙型PhoneType {  
  ホーム
  仕事
  モバイル
  他の
}

struct Phone {  
  1 i32 id   
  2 文字列番号  
  3 PhoneTypeタイプ  
}

サービスPhoneService {  
  電話findById 1 i32 id )、   
  リスト<電話> findAll  
}

Thriftは、この記述情報からコードを生成します。たとえば、Javaでは、はクラス PhoneTypeで単純になります。enumPhone

も参照してください

参考文献

  1. ^ 「Javaパート4(Thriftクライアント)でのApacheCassandraのインストールと使用」Sodeso –ソフトウェア開発ソリューション2011年3月30日取得Thriftは、バイナリ通信プロトコルである別個のApacheプロジェクトです。
  2. ^ アンドリュープルニッキ。「ApacheThrift:はじめに」http://www.ociweb.com/:Object Computing Inc. –オープンソリューション企業2011年4月11日取得Thriftは、シンプルでわかりやすいインターフェイス定義言語(IDL)を使用して、[ユーザー]が多数の言語で使用可能であり、サービス可能なサービスを定義および作成できるようにします。Thriftは、コード生成を使用して一連のファイルを作成します。このファイルは、クライアントやサーバーの作成に使用できます。相互運用性に加えて、Thriftは、時間と空間の両方で効率的な独自のシリアル化メカニズムによって非常に効率的になります。 {{cite web}}:(ヘルプ外部リンク|location=
  3. ^ 節約の要件、 Windowsサポートについてはこの問題を参照
  4. ^ フレッド・ポッター、カプチーノでスリフトを使用して2011年8月12日に ウェイバックマシンアーカイブ、parallel48の事後的に甘美なブログ、2010年6月10日。
  5. ^ pinterest / elixir-thrift、Pinterest、2020-02-05、2020-02-06取得
  6. ^ アンドリュープルニッキ。「ApacheThrift:コード生成」http://www.ociweb.com/:Object Computing Inc. –オープンソリューション企業2011年4月12日取得Thriftは、さまざまな程度の多くのプログラミング言語をサポートしています。完全なリストは以下のとおりです。あなたの言語がThriftのすべての機能をサポートしているという理由だけで、それを想定する前に注意してください。たとえば、PythonはTBinaryProtocolのみをサポートします。Cocoa、C ++、C#、Erlang、Haskell、Java、OCaml、Perl、PHP、Python、Ruby、Smalltalk {{cite web}}:(ヘルプ外部リンク|location=
  7. ^ Mark Slee、Aditya Agarwal、Marc Kwiatkowski、 Thrift:スケーラブルな言語間サービスの実装
  8. ^ 「LibraryFeatures-ThriftWiki」2016年4月21日取得
  9. ^ a b AndrewPrunicki。「ApacheThrift:はじめに」http://www.ociweb.com/:Object Computing Inc. –オープンソリューション企業2011年4月11日取得スタックの最上位部分は、Thrift定義ファイルから生成されたコードです。スリフトサービスにより、クライアントとプロセッサのコードが生成されます。これらは、図の茶色のボックスで表されています。送信されるデータ構造(組み込み型を除く)も、生成されたコードになります。これらは赤いボックスになります。プロトコルとトランスポートは、Thriftランタイムライブラリの一部です。したがって、Thriftを使用すると、サービスを定義でき、コードを再生成せずにプロトコルとトランスポートを自由に変更できます。Thriftには、プロトコルとトランスポートを結び付けるサーバーインフラストラクチャも含まれています。ブロッキング、非ブロッキング、シングルスレッドおよびマルチスレッドのサーバーが利用可能です。スタックの「基になるI / O」部分は、問題の言語によって異なります。JavaおよびPythonネットワークI / Oの場合、 {{cite web}}:(ヘルプ外部リンク|location=
  10. ^ スケルトン、スティーブン。「開発者に優しい節約リクエストのログ」2014年7月3日取得

外部リンク