開発者による「青写真」の実行(「具現化」)や、実行エンジンのいずれかを使った実行のスケジューリングを可能にすることで、処理内容と処理方法を切り離しているのです。このような実行はシングルスレッドやパラレルスレッドでも、分散処理でも可能です。
Akka Streamsでは、さまざまなストリームの終端からデータを捕捉し、新たな出力を生成した後、それらストリームをLEGOのブロックのようにつなぎ合わせ、グラフを作り上げることで、アプリケーションのワークフローをストリーミングアーキテクチャ上に持ち込めるようにしているのです。Akka Streamsは、ストリーミング処理でよく登場する分割や変換、マージといった幅広いタスクを取り扱う、豊富なストリーム変換ステージをあらかじめ定義して提供しています。
われわれは、ストリーミングアプリケーションの開発における非常に複雑かつ予測不能な工程を簡潔かつ、しっくりとしたかたちでモデル化できたことに満足しています。
——このストリーミング運動で生み出されるイノベーションの全容について、そして主な賛同者について聞かせてください。
選択肢の多様性があらゆるレベルで広がっているという点で、システムアーキテクトにとっては良い時代になりました。しかし、そういった選択肢すべてと、ものごとの進歩の速さを考えると、コンシューマーにとっては極めて混乱しやすい時代でもあります。
クラスタ間をまたがる分散型のリアルタイム処理フレームワークには、Intelの「GearPump」やLinkedInの「Apache Samza」、米Yahooの「Apache S4」、Twitterの「Apache Storm」、Googleの「MillWheel」など、星の数ほどのイノベーションが存在しています。
また、TypesafeのAkka StreamsやNetflixの「ReactiveX/RxJava」、Pivotalの「Reactor」、Red Hatの「Vert.x」のように「Reactive Streams」と互換性を持つライブラリも爆発的に増加しています。さらに、Java 8にもStreamライブラリが用意されています。
そして「Event Store」や「Akka Persistence」「Eventuate」といった、イベントソーシングやコマンドクエリ責務分離(CQRS)のためのシステムもあります。
さらには、取り込んだデータをApache Sparkに(マイクロバッチ形式で)流し込む「Apache Spark Streaming」といったシステムのほか、「Apache Cassandra」や「Riak」「MongoDB」「Membase」などのほとんどのNoSQLデータベースに対応したストリーミングドライバも数多くあります。
また、「Apache Kafka」や「LevelDB」、「Java-Chronicle」といった、イベントログを取得するためのインフラ系ツールもあります。
Typesafeの「Slick」のような、SQL向けのストリーミングライブラリもあります。
それから、「Esper」や「Oracle Complex Event Processing」といった、複合イベント処理(CEP)を取り扱う古典的なツールもあるうえ、低レイテンシが要求される高頻度取引(HFT)まわりでも「Informatica Ultra Messaging」や、「Aeron」といった製品により、さまざまな興味深い動きがあります。