読者です 読者をやめる 読者になる 読者になる

夢とガラクタの集積場

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

1人、Stormソースコードを読んでみよう(No.2

というわけで始まってしまった(?)この記録。

まずは、ディレクトリの中身概要を確認してみます。
確認の結果下記のようになっていました。

Storm
├─bin        起動/環境構築スクリプト
├─conf       Stormの設定ファイル
├─log4j       Stormのログ出力設定ファイル
├─src
│  ├─clj
│  │  ├─backtype  StormのコアClojure開発部
│  │  └─zilch     ZeroMQ/VirtualPort用のClojureコード
│  ├─dev
│  │  └─resources テスト用に使用されるスクリプト(?)
│  ├─jvm      StormのコアJava開発部
│  ├─multilang
│  │  ├─fy ??? Stormのトポロジ構築を行うスクリプト(言語何でしょう・・)
│  │  ├─py    PythonでStormのトポロジ構築を行うスクリプト
│  │  └─rb    RubyでStormのトポロジ構築を行うスクリプト
│  ├─py
│  │  └─storm     Thriftを用いたリモート起動用のPythonスクリプト
│  └─ui
│      └─public
│          ├─css   Storm UI用のCSS
│          └─js    Storm UI用のJavaScript
└─test
    ├─clj
    │  ├─backtype Storm本体用のClojureテストコード
    │  └─zilch   ZeroMQ用のClojureテストコード
    └─multilang
        └─fy        ???テストコードではある

・・・すみません、fyという拡張子を持つソースコード
何のソースかわかりませんでした(汗

尚、JavaClojureのコード量を比較してみると下記のようになっています。

言語 コード量(実行Step) ディレクトリ
Java 29940 src/jvm
Clojure 5732 srv/clj

・・・これだけみるとJavaの方がコード量が多かったりするのですが、
2つの理由により、実質的にはClojureでつくられたプロダクト、と言えるはずです。

1.Clojureの方がStep辺りの機能集約度が高い(割合はいまいちわかっていません)
2.Javaのコードはかなりの割合で自動生成されている(下記のコメントがついている)
/**
 * Autogenerated by Thrift Compiler (0.7.0)
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 */

自動生成されたコード(backtype.storm.generatedパッケージのコード)は
23211Stepにもなりました。

なので、実際には下記のようになりますね。

言語 コード量(実行Step) ディレクトリ
Java(開発) 6729 src/jvm(generatedパッケージ以外)
Java(自動生成) 23211 src/jvm(generatedパッケージ)
Clojure 5732 srv/clj

加えて、バックグラウンドの制御部分はほぼClojureで書かれています。
Javaで書かれている部分は「Stormを使うために必要な部分」でしかありません。
そんなわけで、Clojureを読まずして本当の意味で理解できるプラットフォームではないようです。

では、次回はパッケージ構成を確認してみましょうか。
・・・Clojureのパッケージ確認で色々嵌りそうではありますが(汗