2011年9月18日、Twitterは分散リアルタイム処理システム「Storm」をオープンソースで公開しました。より正確に言うと、2011年7月に買収されたBackTypeのメンバーが買収以前より開発を進めていたものです。BackTypeはTwitterのつぶやきを解析するシステムを開発していたスタートアップ企業でHadoopのヘビーユーザでもありましたが、リアルタイム性の問題点を解消すべくStormの開発に至ったようです。ちなみに同じオープンソースの分散リアルタイム処理システムとして米Yahoo! が「S4」を公開していますが、Stormはデータを処理する信頼性の高さやAPIのシンプルさに違いがあります。
StormのアーキテクチャはHadoopと似通っており、クラスタはMaster-Workerパターンに基づいています。Masterノードには「Nimbus」、Workerノードには「Supervisor」というデーモンが稼働し、クラスタ間の協調管理はApache Zookeeperによって行われます。
また、Stormを処理するコンポーネントとして「Spout」「Bolt」の2種類があります。SpoutはキューやTwitter Stream APIなどデータストリームを発する部分を、Boltはストリームを受け取りフィルタやジョインなどの加工を行ってストリームを出力する部分を定義します。複数のSpoutやBoltでできた構成を「Topology」と呼びますが、これはHadoopで言うところのJobに相当します(図1)。
Stormは複数マシンで構成されたクラスタ上で動作することを前提に設計されていますが、Hadoopと同じく1台のマシンで動作するローカルモードもサポートしています。またstorm-starterというプロジェクトも公開しており、数分で手軽にStormを動かせるようになっています。Storm自体はJVM上で動作しますが、SpoutやBoltの処理はPythonやRubyなど任意の言語でも記述できます。
URL:https://github.com/nathanmarz/storm