Stormとは、twitterが公開して開発中のリアルタイム分散処理フレームワークです。
開発も活発で結構よいのでこれからHadoopのように使われるようになるんじゃないかと個人的に思っていて、日本語の情報が全然ないので勝手に日本語で紹介しています。

Stormの概要については前にも書いたけど、今回はその前の、なぜStormを使うのか、どういう処理がターゲットなのか、と言う話について書きます。

Stormの概要について書いた記事: twitterが発表したリアルタイム分散処理フレームワークStorm | tjun memo

本記事は、Stormの公式のRationaleを元に書いているので、できれば公式を読むことをお勧めします。


なぜStormを使うのか

最近はMapReduceやHadoop等の技術で、以前には考えられなかったスケールでデータ処理を行うことができるようになりました。しかし、それらの技術はリアルタイム処理のための技術ではありません。リアルタイム処理は、バッチ処理とは根本的に異なる要求があるため、Hadoopをリアルタイム処理に利用することはできません。 しかし、大きなスケールでのリアルタイムデータ処理に対する要求は高まっています。「リアルタイムなHadoop」がないことは、データ処理のエコシステムにおける大きな問題と言えます。

Stormはこの問題を解決します。

Storm以前は、リアルタイム処理のためには例によってキューとワーカーからなるネットワークを作り上げていたでしょう。ワーカーはキューからメッセージを取り出し、データベースを更新して、次の処理のために新たなメッセージを異なるキューへ送ります。残念ながら、この手法には、深刻な制限があります。

  1. 1. 退屈な仕事:開発者は、開発時間のほとんどをメッセージの送信先の設定、ワーカーや中間キューのデプロイに取られ、リアルタイムなデータ処理のロジックへかけられる時間はわずかです。
  2. 2. 脆弱: 耐故障性に欠けるため、あなたはワーカーとキューが落ちていないか気を配る必要があります。
  3. 3. 拡張が大変: 1つのワーカーやキューにおけるメッセージのスループットが高まった時、データをどのように分散させるか考える必要があります。メッセージの送り先が変わるため、ワーカーの再設定も必要です。

キューとワーカーによるモデルが大量のメッセージの処理を可能にしましたが、メッセージ処理がリアルタイム処理の基本となるパラダイムです。 そこで、問題となるとは、どうやって、データを失うことなく、スケールして膨大なデータに対応するか、またどうやってそれを簡単に使い、操作できるようにするか、ということです。

Stormはこれを実現します。

Stormの重要性

Stormはリアルタイム処理のための簡単な枠組みを提供します。MapReduceが並列バッチ処理をとても簡単に書けるようにしたように、Stormの基本機能は並列リアルタイム処理を簡単に書けます。

Stormの特徴は、

  1. 1. 幅広いユースケース: Stormはメッセージ処理、データベースの更新、連続的なクエリ処理、そしてクライアントに対する処理の結果のストリーミング、検索クエリのようなクエリの並列処理、などいろいろなことができます。Stormの基本機能は、これらの幅広いユースケースを実現します。
  2. 2. スケーラブル: Stormは膨大なメッセージに対してもスケールします。Topologyをスケールするには、マシンを追加して、並列数の設定を大きくするだけでいいのです。例えば、10台のノードで毎秒100万メッセージの処理と、数百回のデータベース呼び出しを行うようなシステムが作れます。ZookeeperがStormのクラスタの調停を行っているため、さらに大きいサイズへスケールさせることもできます。
  3. 3. データの保証:リアルタイム処理システムは、データが処理されることを必ず保証する必要があります。データの処理漏れがあるシステムはほとんどユースケースがないでしょう。Stormは、すべてのメッセージが処理されることを保証します。この点において、S4のようなシステムと決定的に異なります。
  4. 4. 堅牢性: Hadoopのように扱いにくいシステムと違って、Stormは管理が簡単です。Stormプロジェクトは、ユーザにとって扱いやすいクラスタを実現する、という明確なゴールを持っています。
  5. 5. 耐故障性: もし処理中に故障しても、Stormは処理の再割当てを行います。Stormは処理が動き続けることを保証します。(処理のkillをするまで)
  6. 6. 言語非依存: ロバストでスケーラブルなリアルタイム処理は、プログラミング言語に縛られるべきではない。StormのTopologyや処理のコンポーネントは、さまざまな言語で定義でき、誰でも利用できます。

今回の記事は以上です。 以下のスライドの前半部でも同じようなことが書いてあります。

Storm
View more presentations from nathanmarz