July Tech Festa 2013(CEP Tool "Setsuna" Hands-on)
品川の産業技術大学院大学で行われた「July Tech Festa 2013」というインフラ系の勉強会に行ってきました。テーマは「コードの中のインフラ (Infrastructure as Programming)」という事で、発表・ハンズオンともに、そっち系ですw。
5トラックが並行して行われており、とても網羅できないので、印象に残ったセッションを1つだけ挙げておきます。
講師:デジタル・ラボ 岩瀬 高博さん
分散KVS-Okuyamaの開発などで知られる岩瀬さんが、自ら開発したCEP(複合イベント処理)ツール「Setsuna」について初心者向けハンズオンを開いて下さいました。
以下、その内容と感想です。
自分で聞いてメモった内容なので、誤り等あればご指摘頂けると助かります!_o_
1.CEPってなに?
Complex Event Proccessingの略。直訳すると、"複合"、"出来事"、"処理"。
ん?という感じですが、いくつかの条件が重なったときだけに、イベント(=プロセスを再起動するとか、通知するとか)を行ってくれるツールとのこと。
世間的には、ESperだとかの高価な製品が有名だそうですが、手軽でシンプルなCEPが欲しく「Setsuna」の開発に至ったとか。
今回のハンズオンでは、OSのロードアベレージと、Webサーバのレスポンスを組み合わせた形でのデモ環境を用意してくれました。
※余談:デモ環境(Windows)が、岩瀬さんの想定された64bitではなかったということで、ツールのベースとなるJavaが正常に動作しないというハプニングがありました。こういうのはなかなか想定し辛いですね。。 (個人的には、今後、勉強会を運営する側になったときの良いTIpsを得ました;)
2. CEPツールのメリット
複数のデータを横断的に見ることが出来ると、いままで見えなかったことが見えたりしてくる。単体の事象では異常と言い切れず、いくつかの事象が重なって初めて異常と判断できるようなケースにおいて、データの複合的な解析が役立つ。
これを高速に処理し、後続処理まで面倒を見てくれるのが、CEPツールである。
なお、このロジックはクレジットカードの不正利用調査や株取引などにも広く使われている分野だとか。
3. Setsunaのアーキテクチャ
SetsunaCore
カスタマイズ要素を制御し、全体をコントロールするコア要素
3つのカスタマイズ要素
・Adapter
Setsunaにイベントを入力する部分。
入力後のデータを好きな単位で分解可能
・Query
Adapterからの入力に検索を行い、データの変化を調べるもの。トリガーとクエリーの2つがある。
->トリガー:単純な変化をつかむ
->クエリー:SQLを使って複雑な条件で検証する
・UserEvent
メール通知やサーバ再起動など、条件によって起動する処理を行うところ。
処理の流れとしては、"Adapter"で入力した情報を"Query"で定義した条件で変化を調べ、"UserEvent"でイベントを起動すると。(多分そういうお話しだったと思う...汗)
※ 「Setsuna」は、Javeで実装されたOSSのCEPツール。他のCEPツールに比べ、簡単に動作させる事が特徴。データの変化を定義する言語はSQL。
※ インプットデータはインメモリDBに展開しており、通常、データは短時間でサイクルされる。
4. ハンズオンの内容について
「Setsuna」のアーキテクチャを分かりやすく理解できるよう、順に定義(Adapter->Query->UserEvent)を重ねていく内容でした。サーバの負荷が一定を超えても、httpdに変化がなければOKというシナリオで、実際の使いどころがイメージしやすいものでした。
Setsunaはパイプ入力とMessagePack-RPC入力が実装済みなので、パイプ入力を使うときはこんな感じになる。
$ java -cp ./ TopDummy | java -jar setsuna.jar -stream topst
※デモ環境がtopのないWindows環境ゆえ、パイプ前の部分はtopのダミーコマンド。これを"setsuna.jar"がスペース区切りで分解して、DBに格納してくれる。
↑Setsunaを実行し、標準出力に結果を出しているところ。(後続のイベントは未定義の場合、画面のように標準出力となる。)
これに、データの変化を検知するTriggerを付け足すと、こんな感じの命令になる。
$ java -cp ./ TopDummy | java -jar setsuna.jar -stream topst -trigger "colomn11 >2"
上記は、"カラム11(現在のロードアベレージ部分)"が"2"以上の場合をトリガーとした場合。
ここまでは、普通にシェル操作で出来てしまう部分だが、Setsunaではさらに、SQLを条件式に付け足すことが出来る。(このクエリの部分を正しくメモれなかったので、後で試して追記します。)
また、SQLの手入力は面倒なので、"easyquery"という関数が用意されている。これを使うと便利!
4. 触れてみての感想
デモ環境に難があり、時間内では正直動かすのがやっという状況でしたけど、イメージしていたほどは難しくもなく、複合的なイベント処理がもたらすメリットに大きな可能性を感じました。かなり使い道がありそうな気がするので、しばらく触ってみたいと思います!