Laharsub はチャット,オンラインでの共同作業,ニュースや株式取引情報の配信などのリアルタイム Web アプリケーションを対象とした,オープンソースの .NET 用 publish-subscribe (出版-購読) 型メッセージサーバだ。
Laharsub はフロントエンド = クライアント,中間層 = Web サービス,そしてバックエンド = publish-subscribe 機能とストレージ能力を持つシステム,という3層アーキテクチャで構築された publish-subscribe 型のメッセージサーバである。クライアントはブラウザを前提としているが,HTTP 要求を発行できるものならば何でもよい。中間層は,クライアントと双方向のメッセージ配信を行う WCF HTTP サービスである。そして,実際にメッセージに関連するロジックはバックエンドに実装される。
クライアントはトピック (Topic) を生成し,RESTful な API を通じてそれを送信する。他のクライアントは HTTP ロングポーリングを使用してトピックを購読 (subscribe) する。1つの要求で複数のトピックを購読することが可能だ。 Laharsub は jQuery,Silverlight,.NET 4.0 で作成されたクライアントに対して,フレーミングと多重化,ロングポーリング管理の機能を提供する。プロジェクトのコーディネータである Tomasz Janczuk 氏によれば,将来的には WebSocket を使用する予定である。
Web サービスはステートレスであるためスケールアウト性がよい,と Janczuk 氏は言う。Laharsub ではインメモリで動作するバックエンドが提供されている。これは数千のクライアントに対してスケールアウトするが,単一ノードという制限がある。よりスケール性を求める向きには "publish-subscribe 機能,メッセージストレージを提供し,Web ファームでの複数のノードにスケールアウトするカスタムバックエンド" というオプションがある。 Web サービスは Windows サービスプロセスあるいはコンソールアプリケーションとして実行される。
トピック購読は次のように行う。
GET http://laharsrv/ps/sql/subscriptions/volatile?subs[0][topicid]=14&subs[0][from]=1 HTTP/1.1 Host: laharsrv
対する応答は次のようなものだ。
HTTP/1.1 200 OK Content-Length: 406 Content-Type: multipart/mixed; boundary=1d69db84.154e.47f7.be93.cc8b65b6efd0 Server: Microsoft-HTTPAPI/2.0 Date: Tue, 18 May 2010 23:14:24 GMT --1d69db84.154e.47f7.be93.cc8b65b6efd0 Content-Type: text/plain; charset=UTF-8 Content-Description: 14/929 Hello, world!
プロジェクトは CodePlex にホストされていて,新 BSD ライセンス (BSD) のもとに提供される。サーバに対するいくつかの負荷テストとパフォーマンス計測の結果,関連する説明が こちら のページで公開されている。将来的な計画 には,Window Azure や Amazon EC2 上のサーバへの配信,複数マシンへのスケールアウト機能なども含まれる。