先日のMediumの記事で,TypeSafeのKevin Webber氏は,リアクティブプログラミングについて,レスポンシブでレジリエント,スケーラブルなシステム構築を支援する意味から,"単なる新たなトレンドではなく,現代のソフトウェア開発者が学ぶべきパラダイム"である,と論じた。さらに,リアクティブシステムにおいてもっとも有益な基盤となるのはアクタベースの並行性だ,とも述べている。
リアクティブマニフェストによれば,リアクティブアプリケーションは4つの基本理念に基づく - 応答性,回復性,拡張性,そしてメッセージ駆動アーキテクチャだ。氏の見解では,これら4つの基本理念には緊密な関連性が存在する。さまざまな動作条件や負荷の下で,"ユーザの操作に迅速に反応可能な"システムの応答性を維持する上で,回復性と拡張性はいずれも必要なシステム品質である,というように。その上でメッセージ駆動アーキテクチャは,レジリエントでスケーラブルなシステムが備えるべき性質を自然にサポートすることで,"レスポンシブシステムのための基盤全体を提供"するのだ。
メッセージ駆動アーキテクチャによっておのずと実現される,レジリエントシステムの3つの重要な特徴について,氏は改めて確認する – それはアイソレーションであり,位置透過性であり,エラー専用の独立したチャネルの存在である。いずれも"アプリケーションに堅牢なエラー処理フォールトトレランスを組み込む"上で有用なファクタだ。
拡張性に関して,氏は,メッセージ駆動システムの持つ2つの明確なアドバンテージを強調する。並行性に対する古典的なスレッドベースのアプローチにおいて生ずる,"共有可変状態やスレッド,ロックをベースとするアプリケーションを拡張"することの困難さ,そして,"システム変更の必要に応じて,新しいリソースをオンデマンドでシステムに追加する"能力としての,システム回復性のサポートである。
そして最後に氏は,メッセージ駆動システムを構築するための,2つの異なるアプローチを説明する。イベント駆動,そしてアクタベースだ。イベント駆動システムは,イベントとイベントオブザーバに基づくシステムだ。システム内でイベントが発生すると,ある種のコールバックシステムを通じて,そのオブザーバに配信される。それに対してアクタベースシステムでは,メッセージは無記名のコールバックではなく,受信者であるアクタに直接向けられる。アクタはそれぞれ,3つのプロパティを持つ。
- メッセージを受信するためのメールボックス。
- パターンマッチングによって受信したメッセージの各タイプの扱い方を決定する,アクタのロジック。
- 要求間で状態を保存するための – 共有状態ではない – 単離的な状態情報。
氏によれば,アクタベースの並行処理にも2つのアドバンテージが存在する。ひとつはコールバック地獄と呼ばれる現象の回避であり,もうひとつは,コールバックのネストを考慮する必要がなく,アクタ間のメッセージフローのみに注目すればよいことから,そしてネットワークバウンダリを越えるスケールアウトが容易であることだ。
TypeSafeはリアクティブアプリケーション開発プラットフォームのプロバイダである。Akka event-driven runtimeや,同社プラットフォーム用のブラウザベースのツールであるTypeSafe Activatorなどを提供している。
リアクティブプログラミングは,InfoQがこれまでに幅広く取り上げているトピックのひとつだ。最近のハイライトとしては,"What Every Hipster Should Know About Functional Reactive Programming"や"End-to-End Reactive Programming at Netflix"などのプレゼンテーションの他,"Virtual Panel on Reactive Programming"などの記事がある。