昨今のカンファレンスでの講演を改めて見直せば,今日のソフトウェア・システムの多くがステートレスな処理,分散データベース,高性能なメッセージブローカで構成されている,と考えるのは理に適ったことだ。スタートアップのSwimは先頃,データベース、メッセージブローカ、アプリケーションサーバ、あるいはストレージといったものに依存せず,ステートフルな"デジタルツイン(Digital Twins)"を使用してストリームデータをリアルタイムに分析する,自社製のプラットフォームをオープンソースとして公開した。
Swimではこのプラットフォームを説明して,"最小のコンピューティングデバイスから最大のクラウドまで、すべての場所で効率的な実行が可能な,単一の統合ソフトウェアスタック"だ,と述べている。このソフトウェアは,デバイスないしサーバで動作する,2MBのJVMエクステンションとして構成されている。Data Center Knowledgeの説明によると,この"ソフトウェアはメッシュに接続され,マシンラーニングを利用して生成中のデータ変化を予測する‘デジタルツイン’を通じて動作する"。
同社CEOのChris Sachs氏は,The New Stackに,このプラットフォームは独自のデータへのアプローチを採用している,と語っている。
"エッジとクラウドの違いは,データベースに大きく関係しています。当社の見解では、クラウドアプリケーションはデータベース中心のアプリケーションなのです"と,Sachs氏はインタビューの中で述べています。"エッジはそうではありません。私たちのソフトウェアは物理的なエッジデバイス上で動作しますが,ここで言うエッジとはデバイスではなく,何らかの場所を意味するものでもありません。クラウド内か物理的なエッジ上かは関係なく,データをデータストアに格納した後に処理するのではない,フローするデータによって駆動されるアプリ,という意味なのです。物理的にどこで動作しているのかは問題ではありません。"
...
Sachs氏によれば、SWIMのエッジコンピューティングプラットフォームは、データベースに格納された後ではなく、到着時にリアルタイムで処理するという点において,従来のクラウドコンピューティングのパラダイムとはまったく違っています。氏はアプリケーションを,データベース中心(database-centric)とデータ駆動(data-driven)という2つのカテゴリに分類しています。Swimは後者を実現するのです。
Swimが公開したソースは,ステートフルなアプリケーションを構築および実行するためのコンポーネント、ストリーミングの可視化を実現するUIフレームワークとSDK、さまざまなデータストリームを統合するためのストリーミングAPIから構成されている。プラットフォームの重要な部分のひとつが,WARPストリーミングプロトコルだ。Swimが開発したこのプロトコルは,"分散アプリケーションサービス間で双方向のストリーミングリンクを生成可能にするために、多重ストリーミングを実現した,HTTPのアップグレード版"である,と説明されている。
創業4年のこのスタートアップが,Apache 2.0ライセンスの下で,自社プラットフォームのオープンソース版をリリースした。同社は今後,"コアとなるSwinプラットフォームにセキュリティ,管理性,永続性,および拡張機能"をプロプライエタリ版に追加するという,"オープンコア"モデルの採用を計画している。
InfoQでは,より詳しい情報を得るべく,同社CTOのSimon Crosby氏にコンタクトを取った。氏はXenSourceを創立し,CitrixでCTOを努め,セキュリティ企業のBromiumを共同創業した,業界のベテランとして著名な人物である。
InfoQ: OSS Swimプラットフォームについて,コミュニティにはどのようなことを期待しますか?拡張機能の開発でしょうか?新たなユースケースの発見ですか?
Simon Crosby: Swimは,データ駆動アプリケーションを開発する上で,非常に効率的で簡単な方法としての可能性を秘めています。コミュニティが新たな用途を見つけてくれることを,とても楽しみにしています。また,他の人たちが利用可能な新たなアプリケーションフレームワークの開発に貢献するコミュニティを育成し,サポートしていきたいとも思っています。
InfoQ: 私がプラットフォームを正しく理解できているか,確認させてください。このプラットフォームは,それぞれ"モノ"のオブジェクトをインスタンス化し,アクセス可能になったオブジェクトにその"モノ"の状態を格納して,実際の"モノ"の状態が変化すればそれを更新する。そしてフレームワークが,収集した情報を表現するモデル,あるいはそのコレクションに関するインテリジェンスを生成する — このような解釈でよいでしょうか?
Crosby: そのとおりです。Swimはデータから,実世界のライブモデルを構築します。モデルは現実世界の情報源のデジタルツインのグラフであり、近接性や封じ込めなどの関係を反映するためのリンクを備えています。デジタルツインは,実世界の状態を映し出す,アクティブでステートフルなオブジェクトです。グラフ内のデータフローに対して,リアルタイムで分析や学習,予測,クエリなども行って,その結果をストリーミングします。
InfoQ: 最近の分散システムは,データベースをバックエンドに使用したステートレスなマイクロサービスと,イベントブローカの支援によって行われる非同期通信で構成されている,というのが一般的な見方ですが,あなた方の視点はこれとは違っています。分散システムにおけるステートフルコンピューティングについて,どう思われますか?
Crosby: 現実世界はステートフルなのです。ステートレスとデータベースの組み合わせは,クラウドによる素晴らしいスケールアウトを実現しましたが,同時に多くのCPU能力を浪費しています。メモリ速度における有効なエッジ演算サイクル毎に,ステートレスな集中型アーキテクチャでは,数十億サイクルを無駄にしているのです。これだけの無駄があれば,エッジに配置されたRaspberry PIが,パワフルなクラウドインスタンスを凌駕するのに十分です!
すなわち,エッジの将来はステートフルにあるのです。計算はデータ駆動で,リアルタイムで実施されるようになります。エッジでの推論サイクルは,1パケットのデータをエッジからクラウドに取り出すよりも短時間で済むのです!
InfoQ: Swimでの開発フローはどのようになるのでしょう?ある環境がすでに稼働しているものとして,アプリケーションを開発してそこにデプロイするために,開発者は何をしなければなりませんか?
Crosby: SwimはJVMの2MBのエクステンションです。開発者に必要なのは,データのスキーマと,それぞれのデータ到着時に呼び出されるメソッドをディジタルツイン上に定義することだけです。モデル内のディジタルツインを解析する計算オブジェクトも定義します。Swimの強力な機能によって,最先端の分析や学習や推論を,開発者の思うがままに使用できます。数行のJavaコードで,深い洞察と予測を提供することが可能になるのです。
Swimにはブラウザ内実装もあるので,数行のJavaScriptでディジタルツインにリンクして,リアルタイムUIを配信することも可能です。
InfoQ: Swimの公開されているユースケースの多くは,リアルタイム分析やIoTに関連したものですが,その他にも,このプラットフォームに適したユースケースがありますか?適切ではないシナリオはどのようなものでしょう?
Crosby: Swimは,"モノのLinkedIn"を開発する手段だと思います。つまり,モノが関連する他のモノにリンクしすることで,そのグラフ内での強力な分析が,リアルタイムで実行可能になるのです。LyftがAWSに年間1億ドルを使っている,という記事を読みましたが,Swimを使えば1,000万ドルまで下げられるはずです。簡単に言えば,Swimは,クラウドネイティブなアプリの抱える多くの問題に対処するものなのです。私たちもそのお手伝いをしたいと思っています。