今月、Yahoo!は新しいオープンソースフレームワークを発表した。これは"途切ない、境目の無いデータの流れを処理する"ためのものだ。このS4という名のフレームワークは絶えず変更されるデータに対する巨大な分散計算処理を実現する。
"リアルタイムマップリディース"と説明する向きもあるが、S4はストリーミングデータベースや複合イベント処理システムと比べるほうが適切だ。StreamBase、Oracle、Tibco、Sybaseのようなベンダはこのようなシステムについて長い歴史を持っている。また、Active Insight、Esper、OpenESBのようなオープンソースのプロジェクトも同様に長い歴史がある。これらのベンダのシステムの多くはより大きなエンタープライズサービスバズの製品に包摂された。
Yahooの発表はS4が正確には何ができるのかについて多くの開発者を混乱させた。Yahoo!チームはドキュメントが多少あることを認めたが、開発者が試せるように可能な限り早くコードを公開したかったと言った。初心者向けにYahoo!チームはS4を使ったサンプルの実装を提供している。
このサンプルを理解するためには、開発者はイベントとプロセッシングエレメントがS4のコンセプトの中核にあることを理解する必要がある。ひとつのイベントはS4の中を流れる任意のJavaオブジェクトであり、プロセッシングエレメントはイベントを取り込んでそのイベントに基づいた何らかの処理を行うロジックだ。多くの場合、プロセッシングエレメントはひとつのイベントを受け取り、他のイベントを出力する。ほとんどのイベントは"キー"を持っている。S4は同じキーを持っている2つのイベントが最終的に同じ仕組みで処理されることを保証する。S4の拡張性にとって極めて重大なのは、エレメントを処理するプロセッシングイベントの各インスタンスはひとつのキーしか扱わないという考え方だ。例えば、S4のオーバービューを見ると、文字数かうんとアプリケーションはひとつの文字を数える毎にひとつのプロセッシングエレメントのインスタンスを生成するようになっているのがわかる。
サンプル実装のひとつはTwitterの上位10個のハッシュタグを追跡するアプリケーションだ。このサンプルコードはたった8つの比較的シンプルな処理をするクラスでできている。まず、TwitterFeedListenerがTwitterの"消防ホース"から提供されるJSONをS4が扱うJavaのイベントに変換する。それからTopicExtractorPEが各ツイートのハッシュタグを抜き出し、ハッシュタグ毎に新しいイベントを生成する。次にTopicCountAndReportPE(ハッシュタグ毎に生成される)が自分の扱うハッシュタグの出現回数を数え、ハッシュタグと出現回数を保持する新しいイベントを生成する。最後に単一のTopNTopicPEがすべてのハッシュタグの出現回数を取り込んで上位10個の ハッシュタグがソートさせた状態にする。
切れ目のないデータの流れを処理するための典型的なS4の使い方としては他に、株式売買の信号を検出することや不正なトランザクションを監視すること、プロセスのログを監視して異常を見つけることなどが挙げられる。
S4が一番得意なのはビジネス上詳細を保持するのではなく集計を行いたいようなライフサイクルの短いデータを大量に扱うことだ。S4を使うことでデータの場所を追跡し、失敗を検出できるので、開発者はロジックを書くことだけに集中できる。