ストリーム処理は現状、まだまだ力業で乗り切っている
まず、かつては大量トラフィックとデータを、どのように処理していただろうか。LAMP環境を作り、RDBにデータを溜める方法を取っていたが、複雑なバッチを流すとIOが詰まり障害が起こる、同期処理でWebアプリケーションを書いていると、貯めこんだデータをユーザーの画面にリアルタイムに表示するのが一苦労という課題があったそうだ。昨今は、巨大なデータに対するバッチ処理については、Hadoop、BigQueryなどの活用が当たり前になってきたので、バッチ処理で悩む機会は少なくなった。
では、バッチ処理ではない処理、次々流れてくるデータをどうやってリアルタイムにアプリケーションに反映するかというストリーム処理については、それもまだまだ力業で乗り切っているのが現状だ、と伊藤氏は言う。例えば、KAIZEN Platformの自社サービスであるABテストサービスについて、ユーザーのサイトの、A案/B案どちらに流れたかといったログデータをリアルタイムで処理するとなると、普通の同期的なWebアプリケーションと全く違った要件になる。
必然的に、裏側にログを受け取るログサーバーを置き、フロントのWebアプリと通信して、という分散システムになる。現在はこれらの実装を、Node.jsやRuby on Railsなどで疎結合に作っているが、今後どうなるかを見ていくのが、本セッションの主題だ。
標準的なAPIや作り方でリアルタイムWebを目指す「Reactive System」
2010年ごろから、「リアルタイムWeb」という言葉が聞かれるようになった。Twitter、Facebook、Googleの検索に代表されるこのリアルタイムWebは、ストリームデータを受け取って、ユーザーにインタラクションを伴わせずに、画面に表示するというものだ。
2015年には、リアルタイムWebという言葉は聞かなくなった。廃れたわけではなく、昨今はコモディティ化し、コンシューマー向けサービスではリアルタイムにデータを画面に反映することが当たり前になった。しかし、Pub/Subのミドルウェアを入れて一部だけイベント駆動にしたり、裏でポーリングして画面上位はAjaxを使ってリアルタイムに見せかけたり、JSON over HTTPで同期通信するだけだったりと、相変わらず力業でやっているのが現状だ。
こうした課題を解決するためのものとして、伊藤氏が見たなかで印象深かったものは、Typesafeの「Reactive Platform」が挙げられる。Typesafeは、ScalaのフレームワークであるPlay Frameworkや、ミドルウェアAkkaなどの開発会社だ。Reactive Platformでは、データがストリーミングで流れてくるようなリアルタイムWeb的なオペレーションを、標準的なAPIと作り方で、よくあるフレームワークで書けるようにするということを目指している。