| 原作者 | フェイスブック株式会社 |
|---|---|
| 開発者 | Apache ソフトウェア財団 |
| 安定版リリース | 0.21.0 / 2024年9月9日[1] |
| リポジトリ | 貯蓄リポジトリ |
| 書かれた | ActionScript、C、C#、C++、D、Dart、Delphi、Erlang、Go、Haskell、Haxe、Java、JavaScript、Node.js、OCaml、Perl、PHP、Python、Rust、Scala、Smalltalk |
| タイプ | リモート プロシージャ コール フレームワーク |
| ライセンス | アパッチ2.0 |
| Webサイト | thrift.apache.org |
Thriftは、プログラミング言語のサービス定義と作成に使用されるIDL(インターフェース定義言語)とバイナリ通信プロトコルです。 [ 2 ] [3] Facebookによって開発されました。2020年以降、 Apache Software Foundationのオープンソースプロジェクトとなっています。
これはリモート プロシージャ コール(RPC) フレームワークを使用し、ソフトウェア スタックとコード生成エンジンを組み合わせてクロスプラットフォームサービスを構築します。Thrift は、ActionScript、C、C++、[4] C#、[5] Cocoa、Delphi、Erlang、Go、Haskell、Java、JavaScript、Objective-C、OCaml、Perl、PHP、Python、Ruby、Elixir、Rust、Scala、Smalltalk、Swiftなど、さまざまな言語やフレームワークで記述されたアプリケーションを接続できます。[6]この実装は、現在 Apache でホストされている Facebook によって 2007 年 4 月にリリースされた技術論文で説明されています。[7] [8]
建築

Thriftには、クライアントとサーバーを作成するための完全なスタックが含まれています。[9]上部はThrift定義から生成されたコードです。このファイルから、サービスはクライアントコードとプロセッサコードを生成します。組み込み型とは対照的に、生成されたデータ構造は生成されたコードの結果として送信されます。プロトコルとトランスポート層はランタイムライブラリの一部です。Thriftを使用すると、コードを再コンパイルせずにサービスを定義し、プロトコルとトランスポートを変更することができます。クライアント部分の他に、Thriftにはブロッキング、ノンブロッキング、マルチスレッドサーバーなどのサーバーインフラストラクチャが含まれています。スタックの基盤となるI/O部分は、プログラミング言語ごとに異なる方法で実装されています。[9]
Thriftはいくつかのプロトコルをサポートしています: [9]
- TBinaryProtocol –スペース効率が最適化されていないバイナリ形式。テキスト プロトコルよりも処理が高速です。
- TCompactProtocol – よりコンパクトなバイナリ形式。
- TJSONProtocol –データのエンコードにJSONを使用します。
- TSimpleJSONProtocol – JSONを使用してメタデータを削除するため、Thriftでは解析できない書き込み専用プロトコル。スクリプト言語による解析に適しています。[10]
サポートされているトランスポートは次のとおりです。
- TSimpleFileTransport – このトランスポートはファイルに書き込みます。
- TFramedTransport – このトランスポートは、非ブロッキング サーバーを使用する場合に必要です。長さの情報が先頭に付いたフレームでデータを送信します。
- TMemoryTransport – I/O にメモリを使用します。Java 実装は
ByteArrayOutputStream内部的に単純なものを使用します。 - TSocket – トランスポートにブロッキング ソケット I/O を使用します。
- TZlibTransport – zlibを使用して圧縮を実行します。別のトランスポートと組み合わせて使用されます。
Thrift では、次のような多数のサーバーも提供しています。
- TNonblockingServer –非ブロッキング I/Oを使用するマルチスレッド サーバー(Java 実装ではNIOチャネルを使用)。このサーバーでは TFramedTransport を使用する必要があります。
- TSimpleServer – 標準ブロッキング I/O を使用するシングルスレッド サーバー。
- TThreadedServer – 接続ごとに 1 つのスレッド モデルと標準のブロッキング I/O を使用するマルチスレッド サーバー。
- TThreadPoolServer – スレッド プールと標準ブロッキング I/O を使用するマルチスレッド サーバー。
Thrift は C++ で書かれていますが、他のプログラミング言語のコードも作成できます。Thrift サービスを作成するには、Thrift を記述する Thrift ファイルを作成し、目的の言語でコードを生成し、サーバーを起動するコードを作成し、クライアントから呼び出す必要があります。このような記述ファイルの例を次に示します。
enum PhoneType { HOME 、WORK 、MOBILE 、OTHER }
構造体Phone { 1 : i32 ID 、2 :文字列番号、3 : PhoneTypeタイプ}
サービスPhoneService { Phone findById ( 1 : i32 id )、リスト< Phone > findAll ( ) }
Thrift は、この記述情報からコードを生成します。たとえば、Java では、 はクラス内にPhoneTypeあります。
enumPhone
参照
- データシリアル化形式の比較
- アパッチアブロ
- 抽象構文記法 1 (ASN.1)
- ヘッセン
- プロトコル バッファ
- 外部データ表現(XDR)
- インターネット通信エンジン(Ice)
- GRPC とは
- フォーマット
参考文献
- ^ 「Apache Thrift - ダウンロード」。2024年9月27日閲覧。
- ^ 「JavaでApache Cassandraをインストールして使用するパート4(Thriftクライアント)」。Sodeso – ソフトウェア開発ソリューション。2022年3月31日時点のオリジナルからアーカイブ。2011年3月30日閲覧。Thrift
は、バイナリ通信プロトコルである別のApacheプロジェクトです。
- ^ Prunicki, Andrew. 「Apache Thrift: 入門」。オブジェクト コンピューティング。2011 年 7 月 23 日のオリジナルからアーカイブ。2011年4 月 11 日取得。
コード生成を使用して、Thrift はクライアントやサーバーの作成に使用できる一連のファイルを作成します。
- ^ “ThriftRequirements”. Apache Software Foundation . 2024年2月26日時点のオリジナルよりアーカイブ。2024年6月22日閲覧。
{{cite web}}: CS1 maint: unfit URL (link) - ^ Fred Potter、「Using Thrift with Cappuccino」 、Wayback Machineに 2011-08-12 アーカイブ、parallel48 の posterously luscious ブログ、2010 年 6 月 10 日。
- ^ Andrew Prunicki. 「Apache Thrift: コード生成」。オブジェクトコンピューティング。2011年7月23日時点のオリジナルよりアーカイブ。 2011年4月12日閲覧。
- ^ Mark Slee、Aditya Agarwal、Marc Kwiatkowski、Thrift: スケーラブルなクロス言語サービスの実装
- ^ “LibraryFeatures”. Apache Software Foundation . 2019年7月11日. 2024年5月3日時点のオリジナルよりアーカイブ。 2016年4月21日閲覧。
- ^ abc Andrew Prunicki. 「Apache Thrift: 入門」.オブジェクトコンピューティング. 2011年7月23日時点のオリジナルよりアーカイブ。 2011年4月11日閲覧。
- ^ Skelton, Steven (2013年8月3日). 「Developer Friendly Thrift Request Logging」. stevenskelton.ca . 2024年1月24日時点のオリジナルよりアーカイブ。 2014年7月3日閲覧。
外部リンク
- 公式サイト
