はじめに

RedisPubSubはJ-PARC/MLFの計算環境の中で生成されるさまざまな情報、例えば中性子検出器からの生データやタイミング情報やステータス情報を効率良く利用する仕組みを提供する。

RedisPubSubで利用する情報モデルは、近年盛んに計算機科学分野で研究されてきたいわゆる出版・購読型モデル(Publish/Subscribe model)である。 このモデルの特長は、空間的な疎結合・時間的な疎結合・同期的な疎結合を実現させるところにある。 空間的な疎結合とは、情報を発信する者は情報を受け取る者がどこにいるかを知る必要がなく、情報を受け取る者は情報発信者が誰であるかを心配する必要がない。 必要なのは情報のキー名(チャネル名)であり、接続するサーバ名だけである。 時間的な疎結合とは、情報の発信(出版)と受け取り(購読)が同時であってもいいし同時でなくてもいいことを意味する。 同期的な疎結合とは、購読者は非同期に読むことができることである。 非同期にできるとは、購読予約を行い情報が発信された時に読むことができることである。

空間的な密結合・時間的な密結合・同期的な密結合でありDAQ-Middlewareでのデータ転送に利用している、リモートプロシージャコール(RPC)と対比してみるとその違いがわかる。 RPCは、リモートサーバにあるメソッドを呼び出す仕組みだが、呼び出す方も呼び出される方も、わかった相手と交信し同時に交信するという密結合である。もちろん購読予約もできない。 出版・購読型モデルが提供するそれらの疎結合は、さまざまな利点をもたらす。 情報のキー名さえ知っていれば、誰に送るべきか、その情報がどこにあるか、を知る必要がないため、情報の発信・取得のメタ情報は少ない。 また、いつでも情報を出版・購読できるため、それぞれの都合のいいタイミングで出版・購読できる。 さらに、非同期であるため、ブロックされたりポーリングするなどのよけいな処理が不要で、効率的である。

このように優れた特徴を持つ出版・購読型モデルを持つソフトウエアパッケージの中で、Redisを選択した。

Redisは、いくつかの異なるデータ型をサポートするメッセージブローカー(サーバ)であり、メモリにデータを格納するため高速な処理を実現させる、オープンソースのソフトウエアである。

RedisPubSubでは、Redisの出版・購読型モデルを実現するAPIを利用し、J-PARC/MLFに利用しやすいようにRedisの複雑さを隠蔽し簡単なAPIにラップした。 当面提供するAPIはC++だが、Python版は検討中である。

このマニュアルは、RedisPubSubの外部仕様を解説するものである。