Complex Event Processing Engineをつくりはじめた

久しぶりの投稿だ。。




今まではokuyamaメインでOSS活動をしていたけども、新たにプロダクトを始めました。
新しいプロダクトはCEPと言われる種類のソフトウェアです。
そもそも、CEPってなんだ??
Complex Event Processingの略になります。
訳すと、複合イベント処理です。
でっ、何が出来るかなんですが


リアルタイム処理が得意なエンジンです。
これだけではピンとこないので、少し例を考えてみます。


例1)
あるサーバの監視がしたいとします。
監視には馴染みのsarや、topを使うと便利ですよね。
例えばtopを-bなどの標準出力に結果を書き出すモードで動かして、
これをパイプでgrepにつないでロードアベレージ
部分を取り出して、1を超えてたらメールを投げたい。こんな場合どう作りましょう?
ロードアベレージを取り出すまではこのままで良さそうです。
じゃあこれをファイルにリダイレクトして、それを監視しするスクリプトを書きましょうか。
結構面倒です。それに発見までにタイムラグがありそうです。


これを整理すると、
ロードアベレージというデータの流れに
条件検索を行って、
結果次第で処理をしています。


では、次は例2)
例1に別の要素を加えたらどうでしょう?
ロードアベレージが規定値を越えただけでメールが着たら夜寝れないので、
もう少し監視を賢くしたいです。
たとえばロードアベレージが規定値を超えてる場合にすぐメールを送るのではなく、
サイトの応答速度が3秒を越えてる場合にだけおくりたい。
または、I/O-Waitが30% を越えてる場合にメールを送りたい。
考え出すとキリがありません。


しかもロードアベレージがヤバくなってからサイトの応答速度を計測してたのでは遅そうです。
この処理は先ほどのロードアベレージだけではなくサイトの応答時間や、I/O-Waitなど、
ロードアベレージがこうなって、応答時間がこうなった場合という複数の条件検索をおこなって
満たした場合に処理をおこなっています。




こういった複数の条件を満たした場合を検知するには結構な仕組みが必要だと思います
しかも条件をみたしたと同時に処理をすぐに行わなければならない。




そこでCEPです。
CEPはリアルタイムに複数のデータに横断的に条件マッチングを行ってそれに
その結果次第でイベントを発生させることに特化しています。
okuyamaのようにデータをためたりはできません。でも、一定期間のデータを
蓄えることは出来ます。なので、その一定期間に対して処理をすることも
得意です。さっきの例でいうと、今のロードアベレージではなく直近5分のロード
アベレージの平均がこうだったらとか、サイトの応答が3秒以上かかっていることが
5分以内に100回以上あったらなどを見つけることが出来ます。
そしてユーザが作成したイベントを勝手に呼び出してくれます。
そしてなによりこの一連の処理を相当高速におこないます。
なのでアクセスログのような凄い勢いでつくりだされるデータを
リアルタイムに処理することにも向いています。


このあたりのお話と今作っているエンジンのお話を今度
神戸である勉強会でお話する予定です。
http://atnd.org/events/25695




まだリリースはしてませんが、一応以下に実装中のコードがあります。
http://sourceforge.jp/projects/setsuna/