ストーム-分散メッセージングシステム
Apache Stormはリアルタイムデータを処理し、入力は通常、メッセージキューシステムから送信されます。外部分散メッセージングシステムは、リアルタイム計算に必要な入力を提供します。Spoutは、メッセージングシステムからデータを読み取り、それをタプルに変換して、ApacheStormに入力します。興味深い事実は、ApacheStormがニンバスとスーパーバイザー間の通信に独自の分散メッセージングシステムを内部的に使用していることです。
分散メッセージングシステムとは何ですか?
分散メッセージングは、信頼性の高いメッセージキューの概念に基づいています。メッセージは、クライアントアプリケーションとメッセージングシステム間で非同期にキューに入れられます。分散メッセージングシステムは、信頼性、スケーラビリティ、および永続性の利点を提供します。
ほとんどのメッセージングパターンは、 publish-subscribe モデル(単に Pub-Sub)メッセージの送信者が呼び出される場所 publishers そしてメッセージを受け取りたい人は呼ばれます subscribers。
メッセージが送信者によって公開されると、サブスクライバーはフィルタリングオプションを使用して選択したメッセージを受信できます。通常、2種類のフィルタリングがあります。1つはtopic-based filtering もう1つは content-based filtering。
pub-subモデルは、メッセージを介してのみ通信できることに注意してください。これは非常に疎結合のアーキテクチャです。送信者でさえ、サブスクライバーが誰であるかを知りません。メッセージパターンの多くは、メッセージブローカーで公開メッセージを交換して多くのサブスクライバーがタイムリーにアクセスできるようにします。実際の例は、スポーツ、映画、音楽などのさまざまなチャンネルを公開するDish TVです。誰でも自分のチャンネルのセットを購読して、購読しているチャンネルが利用可能になるといつでもそれらを取得できます。
次の表は、一般的な高スループットメッセージングシステムの一部を示しています。
分散メッセージングシステム | 説明 |
---|---|
Apache Kafka | KafkaはLinkedInCorporationで開発され、後にApacheのサブプロジェクトになりました。Apache Kafkaは、ブローカー対応の永続的な分散パブリッシュ/サブスクライブモデルに基づいています。Kafkaは高速でスケーラブルで、非常に効率的です。 |
RabbitMQ | RabbitMQは、オープンソースの分散型の堅牢なメッセージングアプリケーションです。使いやすく、すべてのプラットフォームで実行できます。 |
JMS(Javaメッセージサービス) | JMSは、あるアプリケーションから別のアプリケーションへのメッセージの作成、読み取り、および送信をサポートするオープンソースAPIです。保証されたメッセージ配信を提供し、パブリッシュ/サブスクライブモデルに従います。 |
ActiveMQ | ActiveMQメッセージングシステムは、JMSのオープンソースAPIです。 |
ZeroMQ | ZeroMQは、ブローカーレスのピアピアメッセージ処理です。プッシュプル、ルーターディーラーのメッセージパターンを提供します。 |
チョウゲンボウ | Kestrelは、高速で信頼性が高く、シンプルな分散メッセージキューです。 |
Thriftプロトコル
Thriftは、クロスランゲージサービス開発とリモートプロシージャコール(RPC)のためにFacebookで構築されました。その後、オープンソースのApacheプロジェクトになりました。ApacheThriftはInterface Definition Language 定義されたデータ型の上に新しいデータ型とサービスの実装を簡単に定義できます。
Apache Thriftは、組み込みシステム、モバイルアプリケーション、Webアプリケーション、およびその他の多くのプログラミング言語をサポートする通信フレームワークでもあります。Apache Thriftに関連する重要な機能のいくつかは、そのモジュール性、柔軟性、および高性能です。さらに、分散アプリケーションでストリーミング、メッセージング、およびRPCを実行できます。
Stormは、内部通信とデータ定義にThriftProtocolを幅広く使用しています。ストームトポロジは単純ですThrift Structs。ApacheStormでトポロジを実行するStormNimbusは、Thrift service。