Yahoo!のリアルタイムMapReduce「S4」メモ(1)

(2010/11/06) 続き書きました

自分用メモ。

注意:「リアルタイム」について

Yahoo! からの最初のリリースで「リアルタイム」MapReduce と書かれていたので仕方なくそう書いているが、人によっては聞いただけでキレるので注意すること。(特にOS屋さん相手のとき)

参考:リアルタイムシステム - Wikipedia

ちなみに下記公式サイトには "Realtime" という文字は一切出てこない。

リンクまとめ(技術者用)

  • wiki
    • Tutorials
      • "getting started" で導入手順について記載している。後述
      • !!! RHEL4 でしかテストしてないとか何気にすごいこと書いてあるので試す人は注意 !!!
    • Manual
      • オーバービューに S4 の説明がある。後述
      • API ドキュメントのページを作る予定のようだが今のところページはない できた。以下参照
    • API javadoc
    • Cookbook
      • ものすごいざっくりとした Eclipse 環境の整え方が書いてあるだけ
  • github

オーバービューまとめ

Overviewの内容を簡単にまとめた。
一見全訳してるように見えるがそうではない。
おまけに誤訳とか適当訳が多いのであまり信用しないように。

S4 って何?
  • 汎用、分散、スケーラブル、部分フォールトトレラント、プラガブルなプラットフォーム
  • 連続的なデータ処理を簡単に開発できる
  • 秒間数千のイベントを処理できる
    • イベントというのは要するにメッセージのこと
  • keyed data(キー付きデータ,ハッシュのこと?)のイベントはプロセッシングエレメント(PE)と紐づけられる。PEはイベントを消費し以下のうちどちらかあるいは両方を実行する(この辺訳が怪しい)
    • PEについては後述
    • 他のPEによって消費された1つ以上のイベントをエミットする
    • おそらく外部データストアあるいはコンシューマに対し結果を発行する
  • アーキテクチャについて
主要な特徴
  • スケーラブル
  • 地方分権
    • 全てのノードは対称的で SPOF がない
  • 部分フォールトトレランス
    • クラスタ管理レイヤはZooKeeperベースで、障害発生サーバから別のサーバに自動的にイベントを再配置する
  • Elastic
    • 異なるスペックのサーバでクラスタ組んでも最適な負荷バランスにしてくれる。ハードウェア障害などでデータに偏りが生じても自動的にリバランシングしてくれる
  • 拡張性
    • シンプルなAPIがあるのでアプリケーション書くのが簡単
  • オブジェクト指向
設計原理
アーキテクチャオーバービュー
  • S4はメッセージパッシングシステム
  • イベント(メッセージのこと)は任意のオブジェクト
  • Adapter は外部データを S4 が処理可能なイベントに変換する
  • イベントはストリームにディスパッチされる
  • ストリームは文字列で識別される
  • PEは以下の4つのコンポーネントによってユニークに識別される
    • PEクラスと関連する設定により定義される機能性
    • そのPEが消費する名前つきストリーム
    • ストリーム内に入れられたキー付き要素
    • キー付き要素の value
  • PEはキーつきの値と関連するイベントだけを消費し、場合によっては出力イベントを作成する
  • PEはキーつきの値ごとにインスタンス化されることに注意
  • PEでカウント、集約、join などができる
  • S4の開発ツール使えばカスタムPEを簡単に作れる
  • キーなしPEとか value なし PE(PE プロトタイプ)なんかもある
  • 処理ノード(Processing Node, PN) は PE の論理ホスト
    • イベントを受け取って処理して投げる責任を持つ

今のところの疑問

  • どうやって低レスポンスタイム処理してるか
    • 多分誰もが一番気にしてるところ
  • 可用性の仕組み
    • ZooKeeper使ってるとはわかってるけどもう少し詳細知りたい
  • 実際の性能
  • Cent5,6あたりでも動くのか
    • まあjavaだし動くと思うが一応

この辺はソース見ないと分かんないしまた後日。