1.1 リアルタイムのストリーミング計算
インターネットの誕生以来、***時間、世界への***変更は、情報のリアルタイムの相互作用を可能にするため、大幅に各リンクの効率を加速することです。リアルタイム応答と情報のリアルタイム相互作用の需要のため、データベースは、パーソナルオペレーティングシステムに加えて、ソフトウェア業界で最も急成長し、最も収益性の高い製品である必要があります。私は10年前、多くの銀行は、リアルタイムの転送はもちろんのこと、リアルタイムの照会を行うことはできませんが、データベースと高速ネットワークは、状況を変えている覚えています。
インターネットのさらなる発展により、ポータル情報閲覧型から検索情報検索型、SNS関係交流配信型、さらには電子商取引、インターネット観光、生活商品など、生活の流通はオンライン化されていきます。効率化の要求は、リアルタイム性の要求をさらに強化させ、点から点への情報連鎖、さらには情報ネットワークの方向性まで、情報の相互作用とコミュニケーションは、必然的に様々な次元のデータの相互相関をもたらし、データの爆発は避けられません。そのため、リアルタイムフレームワークと大規模データの保存と計算の問題を解決するために、それぞれストリーミング処理とNoSQL製品が登場しました。
早ければ7、8年前からUCバークレーやスタンフォードなどの大学でストリーミングデータ処理の研究が始まっていましたが、金融業界のビジネスシナリオやインターネットのトラフィック監視のビジネスシナリオに重点が置かれていたことや、当時のインターネットデータシナリオの制約から、従来のデータベース処理のストリーミングをベースにした研究が中心で、ストリーミングフレームワーク自体の研究は少ない方でした。現在では、そのような研究は徐々になくなり、業界はリアルタイムデータベースに力を入れるようになりました。
2010年のヤフーのS4のオープンソース化と2011年のツイッターのストームのオープンソース化は状況を変えました。以前は、インターネット開発者がリアルタイム・アプリケーションに取り組む場合、アプリケーション・ロジックと処理自体に集中するだけでなく、データのリアルタイム・フロー、インタラクション、配信についても心配しなければなりませんでした。しかし、現在の状況は非常に異なっている、嵐に、例えば、開発者はすぐにSQL製品やNoSQL製品やMapReduceコンピューティングプラットフォームで、堅牢で使いやすいリアルタイムストリーム処理フレームワークのセットを構築することができます、あなたは以前は想像することが困難であった低コストのリアルタイム製品の多くを作ることができます:例えば、製品の数の量子コンスタントコンタクトブランドのアモイデータ部門は、リアルタイムストリーム処理プラットフォーム上で構築されています。リアルタイムストリーム処理プラットフォーム
このチュートリアルは、嵐のマニュアルの基本的な入門ですが、また、それは嵐を使用するためのマニュアル以上のものであることを望んでいる、実際のデータ生産プロセスとアーキテクチャのアプリケーションでは、より多くの経験を追加します****目的は、すべての技術的な同僚のリアルタイムストリーム処理フレームワークを使用して喜んで助けることですが、また静かに世界を変える。
1.2 嵐の特徴
Stormは、オープンソースの分散リアルタイムコンピューティングシステムで、シンプルで信頼性の高い大量のデータストリームを処理することができます。Stormは、リアルタイム分析、オンライン機械学習、継続的コンピューティング、分散RPC、ETLなど、多くの使用シナリオを持っています。Stormの展開と運用保守は非常に便利で、さらに重要なのは、アプリケーションを開発するために任意のプログラミング言語を使用することができます。
ストームには以下のような特徴があります:
- シンプルなプログラミングモデル
ビッグデータ処理の面では、私はあなたがすでにHadoopに精通していると信じて、Googleのマップ/ Reduceに基づいて、Hadoopは、開発者にマップを提供し、並列バッチ処理手順は非常にシンプルで美しくなっているように、元の言語を削減します。同様に、Stormはまた、ビッグデータのリアルタイム計算のためのいくつかのシンプルで美しいプリミティブを提供し、大幅に並列リアルタイム処理を開発するタスクの複雑さを軽減し、迅速かつ効率的にアプリケーションを開発するのに役立ちます。
- スケーラブル
Stormクラスタで実際にトポロジーを実行する主なエンティティは、ワークプロセス、スレッド、タスクの3つです。Stormクラスタの各マシンは複数のワークプロセスを実行でき、各ワークプロセスは複数のスレッドを作成でき、各スレッドは複数のタスクを実行できます。スパウトとボルトは1つ以上のタスクとして実行されるように開発されています。
その結果、計算タスクは複数のスレッド、プロセス、サーバーにわたって並列に実行され、柔軟な水平スケーリングをサポートします。
- 高い信頼性
Stormは、スパウトが送信するすべてのメッセージが "完全に処理される "ことを保証しており、これはS4などの他のリアルタイムシステムとの直接的な違いです。
Stormはこのメッセージツリーの処理を追跡し、ツリー内のすべてのメッセージが処理された場合のみ、Stormはspoutが送信したメッセージが処理されたとみなします。「とみなします。ツリー内のいずれかのメッセージが処理に失敗した場合、またはツリー全体が制限時間内に「完全に処理」されなかった場合、spoutが送信したメッセージは再送されます。
メモリの消費を最小限に抑えるため、Stormはメッセージツリー内のすべてのメッセージを追跡するのではなく、メッセージツリー全体を追跡し、メッセージツリー内のすべてのメッセージの一意なIDを計算し、スパウトから送信されたメッセージが0かどうかを判断することで "完全に処理された "かどうかを判断するという特別な戦略を使用しています。"これにより、メモリが大幅に節約され、判断ロジックが単純化されます。
このモードでは、メッセージが送信されるたびにack/failが同期して送信されるため、ネットワークの帯域幅が消費されます。 信頼性に対する要求が高くない場合は、別のemitインターフェースを使用することで、このモードをオフにすることができます。
上述したように、Stormは各メッセージが少なくとも1回は処理されることを保証しますが、計算の場面によっては、各メッセージが1回しか処理されないことが厳密に要求されます。幸いなことに、Stormの0.7.0ではこの問題を解決するトランザクショントポロジーが導入されています。
- 高い耐障害性
メッセージ処理中に何か問題が発生した場合、Stormは問題が発生した処理ユニットを再スケジュールします。Stormは処理ユニットが常に実行されることを保証します。
もちろん、中間状態がプロセッシング・ユニットに保存されている場合、ストームによってプロセッシング・ユニットが再起動されたときに、アプリケーション自身が中間状態の回復を処理する必要があります。
- 複数のプログラミング言語をサポート
javaでspoutとboltを実装するだけでなく、Stormのいわゆる多言語プロトコルのおかげで、使い慣れたプログラミング言語を使ってこの作業を行うことができます。多言語プロトコルはStorm内の特別なプロトコルで、spoutやboltが標準入力と標準出力を使ってメッセージを渡すことができます。
多言語プログラミングのためのストームのサポートは、主にShellBolt、ShellSpoutとShellProcessクラスを介して、これらのクラスは、IBoltとISpoutインターフェイスを実装するだけでなく、スクリプトやプログラムを実行するためにjavaのProcessBuilderクラスを介してシェルをできるように実現するためのプロトコルです。
このアプローチでは、処理時に各タプルをjsonでコード化およびデコードする必要があるため、スループットへの影響が大きくなることがわかります。
- ローカルモードをサポート
Stormには "ローカルモード "があります。つまり、Stormクラスタのすべての機能のインプロセスシミュレーションが可能で、ローカルモードでトポロジーを実行すると、クラスタ上でトポロジーを実行するのと同じようになり、開発やテストに非常に便利です。
- 効率的
下層のメッセージキューとしてZeroMQを使用し、メッセージが迅速に処理されるようにします。





