Apache Thrift


Apache_Thrift

Thriftは、多数のプログラミング言語のサービスを定義および作成するために使用されるインターフェイス定義言語およびバイナリ通信プロトコルです。リモートプロシージャコール(RPC)フレームワークを形成し、「スケーラブルなクロスランゲージサービス開発」のためにFacebookで開発されました。ソフトウェアスタックとコード生成エンジンを組み合わせて、ActionScript、C、C ++、 C#などのさまざまな言語やフレームワークで記述されたアプリケーションを接続できるクロスプラットフォームサービスを構築します。 Cappuccino、 Cocoa、Delphi、Erlang、Go、Haskell、Java、JavaScript、Objective-C、OCaml、Perl、PHP、Python、Ruby、Elixir、 Rust、Scala、Smalltalk、Swift。 Facebookで開発され、現在(2020)Apache SoftwareFoundationのオープンソースプロジェクトです。この実装は、現在ApacheでホストされているFacebookがリリースした2007年4月のテクニカルペーパーで説明されています。 Apache Thrift 原作者
Facebook、Inc。
開発者
Apache Software Foundation
安定リリース
0.14.1 / 2021年3月8日 ; 6ヶ月前  (2021-03-08)
リポジトリ
Thriftリポジトリ
で書かれている
ActionScript、C、C#、C ++、D、Dart、Delphi、Erlang、Go、Haskell、Haxe、Java、JavaScript、Node.js、OCaml、Perl、PHP、Python、Rust、Scala、SmallTalk
タイプ
リモートプロシージャコールフレームワーク
ライセンス
Apacheライセンス2.0
Webサイト
thrift .apache .org

コンテンツ
1 建築
2 利点
3 Thriftサービスの作成
4 も参照してください
5 参考文献
6 外部リンク

建築
image"
  Apache ThriftAPIクライアント/サーバーアーキテクチャ
Thriftには、クライアントとサーバーを作成するための完全なスタックが含まれています。上部は、Thrift定義から生成されたコードです。このファイルから、サービスはクライアントとプロセッサのコードを生成します。組み込み型とは対照的に、作成されたデータ構造は、生成されたコードの結果として送信されます。プロトコルとトランスポート層はランタイムライブラリの一部です。Thriftを使用すると、コードを再コンパイルせずに、サービスを定義し、プロトコルとトランスポートを変更できます。クライアント部分に加えて、Thriftには、ブロッキング、非ブロッキング、マルチスレッドサーバーなど、プロトコルとトランスポートを結び付けるサーバーインフラストラクチャが含まれています。スタックの基盤となるI / O部分は、言語ごとに実装が異なります。
Thriftはいくつかのプロトコルをサポートしています:
TBinaryProtocol –単純なバイナリ形式で、シンプルですが、スペース効率のために最適化されテキストプロトコルよりも処理は高速ですが、デバッグは困難です。
TCompactProtocol –よりコンパクトなバイナリ形式。通常、処理もより効率的です
TJSONProtocol –データのエンコードにJSONを使用します。
TSimpleJSONProtocol – JSONを使用してメタデータをドロップするため、Thriftで解析できない書き込み専用プロトコル。スクリプト言語による解析に適しています。
サポートされているトランスポートは次のとおりです。
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ます。C ++はを使用しstd::vectorます。
アプリケーションレベルのワイヤフォーマットとシリアル化レベルのワイヤフォーマットは明確に分離されています。それらは個別に変更できます。
事前定義されたシリアル化スタイルには、バイナリ、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はクラスenum内で単純になりPhoneます。

も参照してください
image
 無料のオープンソースソフトウェアポータル
データシリアル化形式の比較 Apache Avro 抽象構文表記1(ASN.1)
ヘッセ行列
プロトコルバッファ
外部データ表現(XDR)
インターネット通信エンジン(氷) gRPC SDXF

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

外部リンク
公式サイト
image