RedisPubSubを用いたアプリケーションの可能性

RedisPubSubを用いてすでにJ-PARC/MLFではLive Data Reduction(実時間・オンライン解析)の利用が始まっている。

空蝉Live Data Reduction

BL21オンラインモニター

BL17用2次元検出器オンラインモニター

今までもデータ測定中にDAQ-Middleware(DAQMW)コンポーネントとしてオンライン解析を走らせていた。 ただ、すでに述べたようにDAQMWコンポーネントはデータ収集(Gathererコンポーネント)と密に結合しているため、オンライン解析のちょっとしたミスがデータ収集システムをダウンさせる。 そのため、DAQMWコンポーネントによる解析プログラムの開発は進まなかった。

そこで、データ収集から切り離し(疎結合にして)データファイルからデータを読み出すという方法を取ることで、たとえ解析プログラムがこけてもデータ収集システムがダウンしないような仕組みが出来上がった。 大きな進歩であり、これにより開発された解析プログラムを気兼ねなく試せるようになった。

RedisPubSubを用いたアプリケーションも「解析プログラムがこけてもデータ収集システムがダウンしないような仕組み」になっている点では同じである。 それでは何が新しいのか?1つはその仕組みを一般化したことである。 情報を発信することもその情報を利用することも自由になり(疎結合になり)、生データに限らずあらゆるデータをこの仕組みで扱えるようになった点である。 しかもその仕様がシンプルである点も強調したい。

生データファイルからデータを読み出す方法でも、1つのファイルを複数の解析プログラムが利用することは可能だ。 読み出しを開始するタイミングも読み出しを終了させるタイミングも、この方法でも自由に得られる。 しかし、書き込みと読み込みが同時に行われるため、性能や安全の視点で問題があった。 また実際には生データは1つの計算機やNFSに集中管理されているため、1点にアクセスが集中するという問題もあった。 RedisPubSubは複数のRedisサーバに分散させることが容易なため、それらの問題を解決することができる。

RedisPubSubによって発信された生データの利用は、オンライン解析に止まらずに、さらに広げることが可能だ。 1つの例は、DAQMWコンポーネントLoggerMlfが行なっている機能をSubscriberで行うことである。 全装置グループの生データを一括管理して利用するとき、生データの一元管理が容易になる仕組みが作りやすくなる。

生データに限らず、例えば中性子位置検出器(PSD)からのデータのオーバーフローをリアルタイムに検出する仕組みをGathererPsdPubで試みている。 定期的にオーバーフロー情報が発信できれば、オーバーフローが起きた時点で、担当者に電子メールを送るという仕組みを作ることができる。

新しいIROHA2にもRedisが実装され、デバイス情報も発信可能となった。モニタすべきデバイス情報を集め、デバイス情報の相関を見るのも容易になる。

RedisPubSubのもとになっているRedisはPublish/Subscribeという優れた機能を持っていることはすでに述べたが、情報の取り扱い方法にはさらに異なる形態がある。 分散キュー機能は、データをキューに入れて必要な全てのデータを溜めておくことで、後から参入するオンライン解析でも全てのデータを扱う仕組みを容易に実現させることができる。 また、分散共有メモリ機能も有用な1つである。Pub/Subと異なり、情報は上書きされる。 常に最新情報を保持するという機能は、Pub/Subにはない利用が可能である。 Redisはこれらの全ての機能を実現させることができるので、必要に応じて、RedisPubSubの機能を補う形で発展させることが可能だ。