このプロジェクトを使用すると、さまざまなイベントをリアルタイムで確実に処理することができます。 たとえば、Storm を使用すると、データ ストリームをリアルタイムで分析したり、機械学習タスクを実行したり、継続的なコンピューティングを組織したり、RPC や ETL を実装したりできます。 このシステムは、クラスタリング、フォールト トレラント構成の作成、保証されたデータ処理モードをサポートしており、XNUMX つのクラスタ ノードで XNUMX 秒あたり XNUMX 万件を超えるリクエストを処理するのに十分な高いパフォーマンスを備えています。
さまざまなキュー処理システムおよびデータベース テクノロジとの統合がサポートされています。 Storm アーキテクチャには、計算のさまざまな段階間で分割する機能を備えた任意の複雑なプロセッサを使用して、非構造化で常に更新されるデータ ストリームを受信して処理することが含まれます。 Twitter が最初にフレームワークを開発した会社 BackType を買収した後、このプロジェクトは Apache コミュニティに引き継がれました。 実際には、BackType で Storm を使用して、新しいツイートとそこで使用されているリンクをオンザフライで比較することにより、マイクロブログ内のイベントの反映を分析しました (たとえば、Twitter で公開された外部リンクやアナウンスが他の参加者によってどのように再ブロードキャストされたかを評価しました) )。
Storm の機能は Hadoop プラットフォームと比較されますが、主な違いは、データがウェアハウスに保存されず、外部で取り込まれてリアルタイムで処理されることです。 Storm にはストレージ層が組み込まれておらず、分析クエリはキャンセルされるまで受信データに適用され始めます (Hadoop は有限時間の MapReduce ジョブを使用しますが、Storm は継続的に実行される「トポロジ」のアイデアを使用します)。 ハンドラーの実行は複数のサーバーに分散できます。Storm は、異なるクラスター ノード上のスレッドを使用して作業を自動的に並列化します。
このシステムはもともと Clojure で書かれており、JVM 仮想マシン内で実行されます。 Apache Foundation は、Storm を Java で書かれた新しいカーネルに移行する取り組みを開始しました。その結果は、Apache Storm 2.0 のリリースで提案されています。 プラットフォームのすべての基本コンポーネントは Java で書き直されています。 Clojure でのハンドラー作成のサポートは維持されていますが、バインディングの形式で提供されるようになりました。 Storm 2.0.0 には Java 8 が必要です。マルチスレッド処理モデルが完全に再設計され、
新しいバージョンでは、関数型プログラミング スタイルの操作を使用してハンドラーを定義できる新しい型付き Streams API も提供します。 新しい API は、標準の基本 API の上に実装され、処理を最適化するための操作の自動マージをサポートします。 ウィンドウ操作用の Windowing API に、バックエンドでの状態の保存と復元のサポートが追加されました。
決定を下す際に追加のリソースを考慮するためのサポート
CPU とメモリ (ネットワークや GPU の設定など)。 プラットフォームとの統合を確実にするために、多数の改善が行われました。
Storm の応用分野:
- 新しいデータまたはデータベース更新のストリームをリアルタイムで処理します。
- 継続的コンピューティング: Storm は継続的なクエリを実行し、継続的なストリームを処理して、処理結果をリアルタイムでクライアントに配信できます。
- 分散リモート プロシージャ コール (RPC): Storm を使用して、リソースを大量に消費するクエリを並列実行できます。 Storm のジョブ (「トポロジ」) は、処理が必要なメッセージが到着するのを待つノード間で分散される機能です。 メッセージを受信した後、関数はローカル コンテキストでメッセージを処理し、結果を返します。 分散 RPC の使用例としては、検索クエリを並列処理したり、大規模なセットに対して操作を実行したりすることが挙げられます。
嵐の特徴:
- リアルタイムのデータ処理を大幅に簡素化するシンプルなプログラミング モデル。
- あらゆるプログラミング言語のサポート。 モジュールは Java、Ruby、Python で利用できますが、サポートするのに約 100 行のコードを必要とする非常にシンプルな通信プロトコルのおかげで、他の言語への適応も簡単です。
- フォールト トレランス: データ処理ジョブを実行するには、コードを含む jar ファイルを生成する必要があります。 Storm は、この jar ファイルをクラスター ノード全体に個別に配布し、それに関連付けられたハンドラーを接続し、監視を組織します。 ジョブが完了すると、コードはすべてのノードで自動的に無効になります。
- 水平方向のスケーラビリティ。 すべての計算は並列モードで実行され、負荷が増加した場合は、単に新しいノードをクラスターに接続するだけで十分です。
- 信頼性。 Storm は、すべての受信メッセージが少なくとも XNUMX 回は完全に処理されることを保証します。 メッセージは、すべてのハンドラーを通過するときにエラーがなかった場合に XNUMX 回だけ処理されます。問題が発生した場合は、失敗した処理が繰り返されます。
- スピード。 Storm のコードは高パフォーマンスを念頭に置いて書かれており、高速な非同期メッセージングにシステムを使用しています。
ゼロMQ .
出所: オープンネット.ru