オープンソースらしく単純な名前のPivotalのライブラリ “Reactor” が,先の火曜日に,バージョン1.0のGA(General Availability)リリースというマイルストンに達した。イベント駆動でリアクティブなプログラミングモデル用に低レベルの抽象化を提供するReactorは,Spring IO Platformの"IO Foundation"レイヤの構成メンバだ。
ReactorはSpring IO Platformの基本的なコンポーネントとして設計されているが,それ自身はSpring Frameworkへの直接的な依存性を持っていない。プロジェクトのwikiには,"reactor-spring" モジュールによってSpringを "ネイティブにサポート"するが,コアAPIは自己完結的なライブラリとして提供されているので,Springのアプリケーションコンテキスト外でも利用可能だ,と説明されている。
Reactorは "毎秒数千,数万,あるいは数百万という並列要求を処理する必要のある" ,高スループットで低レイテンシなアプリケーション開発を可能にする。確かにリリース発表のブログ記事では,Reactorを "標準的な開発用ラップトップ上で毎秒1,000~1,500万のイベント" を処理する能力がある,としているが,同時に "アプリケーションの処理内容に ... Reactorの処理能力の低下は,処理するタスクに大きく依存" することも明記されている。
Reactorの発想の大部分は,イベントディスパッチによる非同期処理モデルを定義したReactorデザインパターンから得たものだ。プロジェクトにインスピレーションを与えたのは,しかしながらデザインパターンのみではない。他にリリースノートには,多数のオープンソースプロジェクト,さらには近く公開されるJava 8 リリースが引用されている。Reactorはこれらの領域からコンセプトを借用して,StreamsやPromisesといった非同期プログラム技術を抽象化して提供しているのだ。
Reactorはインテグレーションを簡素化するために,さまざまな有名ライブラリや言語に対して,充実したサポートを組み込みで提供している。またキャッチフレーズである "Fast Data" をさらに強調するものとして,"極めてハイパフォーマンスな金融取引を実現するために" 設計された,高スループットのLMAX Disruptor用のAPIについて明記することも忘れていない。
さらにプロジェクトでは,NettyベースのTCPクライアントおよびサーバ用APIを備えた “reactor-tcp” モジュールを開発,提供している。Nettyは “高パフォーマンス,高スケーラビリティの ... 非同期イベント駆動のネットワークアプリケーションフレームワークとツーリング” 提供するJVM用のネットワークライブラリだ。
文法面でのシンプルさと関数プログラミングサポートの両方を提供するため,主要言語としてGroovyを採用し,Closureをコールバックとして使用する。ReactorはGroovy DSLを広範に採用することで,シンプルなコンフィギュレーション体験を提供している。Java 8も主要な開発言語の対象とされていて,ReactorのAPIではコールバックとしてメソッド参照に加えて,ラムダを活用するように設計されている。またClojurewerkzのプロジェクトであるMeltdownでは,ClojureからReactorへのインターフェースを提供している。ReactorチームはライブラリのAPIについて,"拡張性を備えた設計である ... したがって,非JVM言語でも利用可能" である点を強調している。
ReactorのソースコードはApacheライセンスで公開されていて,GitHubから自由に取得することができる。初学者を具体的な例でガイドするために,クイックスタート資料やサンプルプロジェクトも用意されている。デザインを一新したSpring.IO webサイトのガイドの章にも,総合的な "Getting Started" チュートリアルがある。
さまざまなReactorのモジュールはMavenのリソースとしても提供されていて,リリースノートの末尾に説明があるように,Maven Centralから入手可能だ。