web-dev-qa-db-ja.com

ApacheThriftとZeroMQの違い

Apache ThriftとZeroMQは異なるカテゴリに属する​​ソフトウェアであり、Appleとオレンジの比較)であるため、比較を行うのは簡単ではないことを理解しています。しかし、なぜそれらが属するのかわかりません。両方とも、異なる言語で記述されている場合とされていない場合がある異なるサービス間でデータを渡すために使用されていませんか?

Thriftはいつ使用する必要があり、メッセージキューはいつ使用する必要がありますか?

31
Joyce Babu

それらは主に、さまざまな懸念を持つさまざまな対象者を対象としているため、さまざまなカテゴリに属しています。したがって、彼らはさまざまなことに優れています。

Apache Thrift と同様 Google Protocol Buffers は、異なるマシン上のプロセス間で、場合によっては異なる言語でデータを送信するための、高レベルでかなり抽象化された手段となることを目的としています。それらは、メッセージを説明するためのIDL風のレイヤーを意図的に提供し、おそらく自動または半自動のバージョン管理とオプションのセクションを備えています。

ZeroMQ 一方、一般的にメッセージキューではなく(完全に別の質問になります)、すべてが速度。それらは効率的にバイトをもう一方の端に移動します。途中で停車する場所はできるだけ少なくしてください。そのため、シリアル化、バージョン管理、または開発者にとってあなたにとって重要なその他のことはすべてあなたが責任を負います。もちろん、これは、特に異なるプラットフォームや言語間で通信している場合、複雑さを意味する可能性がありますが、それは抽象化の欠如に対するペナルティの一部です。

どちらを選択しますか?プロジェクトによって異なります。絶対的な生のパフォーマンスが必要ない場合は、より高いレベルのツールキットで目的を十分に果たすことができます。高速で低レイテンシのアプリケーションを構築している場合は、とにかく金属に近づくことになります。

幸運を

44
sdg

Thriftは、複雑なデータをさまざまな言語で読み書きできるように表現する方法を定義します(したがって、転送される型を定義するIDLがあります)。また、このようなフォーマットされたメッセージを2つのエンドポイント間で転送する簡単な手段(別名、盗難転送)も定義します。

一方、ZeroMQは、エンドポイント間でメッセージを転送して、1対1、1対多、多対多、およびそのような転送の速度と信頼性に対するさまざまな期待などのさまざまな動作を取得できる方法で優れています。そして、メッセージ自体に関しては、それはZeroMQへの単なるブロブであり、アプリはそれらをエンコードデコードする方法を見つける必要があります。

したがって、複雑なデータ構造でありながら単純なメッセージングパターンがある場合は、節約の側に傾く可能性があります。単純なデータであるが複雑なメッセージングパターンがある場合は、ZeroMQまたはそのようなもの(AMQP)に頼ることができます。

また、両方が必要な場合は、THriftとZeroMQをペアで使用し、thriftを使用してメッセージをフォーマットし、ZeroMQを使用してメッセージを転送できます。

25

Davorinは、ThriftとZeroMQをペアで使用することに言及しました。そのアプローチに興味がある場合は、Thriftコードベースをチェックアウトし、thrift/contrib/zeromqでZermoMQを使用したThriftのデモを探してください。

7
Amir Haghighat