Apache-storm-distributed-messaging-system
Storm-分散メッセージングシステム
Apache Stormはリアルタイムデータを処理し、通常はメッセージキューシステムから入力されます。 外部の分散メッセージングシステムは、リアルタイムの計算に必要な入力を提供します。 Spoutは、メッセージングシステムからデータを読み取り、それをタプルに変換し、Apache Stormに入力します。 興味深い事実は、Apache Stormはnimbusとスーパーバイザー間の通信に独自の分散メッセージングシステムを内部的に使用していることです。
分散メッセージングシステムとは
分散メッセージングは、信頼できるメッセージキューイングの概念に基づいています。 メッセージは、クライアントアプリケーションとメッセージングシステムの間で非同期的にキューに入れられます。 分散メッセージングシステムには、信頼性、スケーラビリティ、および永続性という利点があります。
ほとんどのメッセージングパターンは、 publish-subscribe モデル(単純に Pub-Sub )に従います。メッセージの送信者は publishers 、メッセージを受信したい人は subscribers と呼ばれます。
メッセージが送信者によって公開されると、サブスクライバーはフィルターオプションを使用して、選択したメッセージを受信できます。 通常、2種類のフィルタリングがあります。1つは*トピックベースのフィルタリング*で、もう1つは*コンテンツベースのフィルタリング*です。
pub-subモデルはメッセージを介してのみ通信できることに注意してください。 非常に疎結合のアーキテクチャです。送信者でさえ、サブスクライバーが誰であるかを知りません。 多くのメッセージパターンでは、メッセージブローカーを使用して、多くのサブスクライバーがタイムリーにアクセスできるようにパブリッシュメッセージを交換できます。 実際の例としては、Dish TVがあります。これは、スポーツ、映画、音楽などのさまざまなチャンネルを公開し、誰でも自分のチャンネルセットに登録して、登録済みのチャンネルが利用可能になるといつでも入手できます。
次の表は、いくつかの一般的な高スループットメッセージングシステムについて説明しています-
Distributed messaging system | Description |
---|---|
Apache Kafka | Kafka was developed at LinkedIn corporation and later it became a sub-project of Apache. Apache Kafka is based on brokerenabled, persistent, distributed publish-subscribe model. Kafka is fast, scalable, and highly efficient. |
RabbitMQ | RabbitMQ is an open source distributed robust messaging application. It is easy to use and runs on all platforms. |
JMS(Java Message Service) | JMS is an open source API that supports creating, reading, and sending messages from one application to another. It provides guaranteed message delivery and follows publish-subscribe model. |
ActiveMQ | ActiveMQ messaging system is an open source API of JMS. |
ZeroMQ | ZeroMQ is broker-less peer-peer message processing. It provides push-pull, router-dealer message patterns. |
Kestrel | Kestrel is a fast, reliable, and simple distributed message queue. |
スリフトプロトコル
Thriftは、クロスランゲージサービス開発とリモートプロシージャコール(RPC)のためにFacebookで構築されました。 その後、オープンソースのApacheプロジェクトになりました。 Apache Thriftは Interface Definition Language であり、定義されたデータ型の上に簡単に新しいデータ型とサービス実装を定義できます。
Apache Thriftは、組み込みシステム、モバイルアプリケーション、Webアプリケーション、および他の多くのプログラミング言語をサポートする通信フレームワークでもあります。 Apache Thriftに関連する重要な機能のいくつかは、そのモジュール性、柔軟性、および高いパフォーマンスです。 さらに、分散アプリケーションでストリーミング、メッセージング、およびRPCを実行できます。
Stormは、内部通信とデータ定義にThriftプロトコルを広く使用しています。 Stormトポロジは、単純に Thrift Structs です。 Apache Stormでトポロジを実行するStorm Nimbusは* Thriftサービス*です。