夢とガラクタの集積場

落ちこぼれ三流エンジニアである管理人の夢想=『夢』と、潰えた夢=『ガラクタ』の集積場です。

Stormの内部実装を解説する資料確認してます(その2

こんにちは。

前回に引き続き、Stormの内部実装説明資料の確認を進めます。

1.Structure of the codebase(続き

Java interfaces

=======
StormのAPIインタフェースはJavaで定義されている。
主に、下記の3つのインタフェースが存在する。

  1. IRichBolt
  2. IRichSpout
  3. TopologyBuilder

上記はJavaでインタフェースを定義し、
その上でデフォルト実装を施したクラスの提供も行っている。
実際のデフォルト実装はBaseRichSpoutクラスを参照。
SpoutとBoltは既に記述されているように、TopologyのThrift定義としてシリアライズされる。

紛らわしいインタフェース定義として、IBolt&ISpout⇔IRichBolt&IRichSpoutがある。
主な違いとしては、IRich〜とつくクラス群は追加で「declareOutputFields」を持っていること。
上記のようにインタフェースを分けている理由としては、declareOutputFieldはFieldGroupingに
用いられる関係上、ThriftのStream定義に影響があるため。
TopologyBuilderクラスにおいて、declareOutputFieldを取得し、Thrift定義に変換している。
上記の変換については〜〜参照。

Implementation

Stormで提供される機能は一通りJavaのインタフェースを通じて利用可能とし、
JavaユーザがStormを快適に利用出来る環境を整備している。

他方、StormのメインロジックはClojureで実装されている。
前述のようにコードはライン上50%Java、50%ClojureだがメインロジックはClojureとなっている。

但し、2つ例外がある。
DRPCと、Transactional Topologiesの実装である。この2つについてはロジック部もJavaで実装されている。
上記2つについては、Stormの上で実装された、抽象度の高いコンポーネントのため。
DRPCと、Transactional Topologiesは下記の3パッケージ配下を参照のこと。

  1. backtype.storm.coordination
  2. backtype.storm.drpc
  3. backtype.storm.transactional

※パッケージは省略します。

=======
StreamIDがある関係上2系列のクラスがある辺り、納得がいく理由ではあります。
後は、DRPCとTransactionalは実際Javaでロジックがそれなりに見えますので、
この辺はアプリケーションに近いレイヤーという位置づけというわけですね。

では、次回から実際の中身の方に入っていきます。