Stormの内部実装を解説する資料確認してます(その2
こんにちは。
前回に引き続き、Stormの内部実装説明資料の確認を進めます。
1.Structure of the codebase(続き
Java interfaces
=======
StormのAPIインタフェースはJavaで定義されている。
主に、下記の3つのインタフェースが存在する。
- IRichBolt
- IRichSpout
- 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パッケージ配下を参照のこと。
※パッケージは省略します。
=======
StreamIDがある関係上2系列のクラスがある辺り、納得がいく理由ではあります。
後は、DRPCとTransactionalは実際Javaでロジックがそれなりに見えますので、
この辺はアプリケーションに近いレイヤーという位置づけというわけですね。
では、次回から実際の中身の方に入っていきます。