thatDotで開発されたQuineは、大量のイベント処理を目的としたオープンソースのストリーミンググラフソリューションである。Quineでは、グラフデータとストリーミングテクノロジーを組み合わせて、リアルタイムで複雑なイベント処理ワークフローを大規模に作成できるとthatDotは言っている。
ストリーム処理用のイベント駆動型マイクロサービスの構築は複雑なタスクであり、データベースドメインと分散システムドメインの両方による困難な課題の組み合わせである。これには、コンセンサス、同時実行性、トランザクションロジック、クラスタリング動作、フォールトトレランス、スケーラビリティ、読み取りと書き込みのパフォーマンスのトレードオフのバランスなどが含まれる。7年間の開発の成果であるQuineは、それをシンプルにすることを目的としている。
Quineを他のストリーム処理ソリューションと一線を画すのは、その基盤となる3つの設計上の選択肢であるとthatDotは言っている。それは、グラフ構造化データモデル、非同期アクターベースのグラフ計算モデル、スタンディングクエリである。
Quineのグラフモデルは、一種のグラフデータベースと考えることができる。実は、Quineでは、オリジナルはNeo4jで開発された普及しているグラフクエリ言語のCypherが使用されている。SQLと同様に、Cypherは本質的に宣言型であるため、ユーザは、グラフからどのように抽出するかではなく、何を抽出するかを指定することでクエリを表現できる。グラフでは、ノードはキーと値のペアを保持し、エッジはノードペアを接続し、ノード間の関係を表す。2つのノードを接続するエッジをトラバースすることは、リレーショナルデータベース内のテーブル間の結合を計算することに似ているが、結合のみが事前に計算される。
Quineの2番目の重要なコンポーネントは、その計算モデルである。
取り込んだデータ、クエリ、他の命令がグラフに挿入され、ノードとエッジのネットワークを介して伝播され、適切な回答を計算したり、アクションをトリガーします。
これは、非常に並列的な方法でイベントを処理するAkkaベースのアクターによって実現される。Quineのアクターは、Akkaのデフォルトのディスパッチャー「fork-join」スレッドプールを使ってディスパッチされる。
ただし、Quineを本当に革新的なものにしているのは、その3番目のコンポーネントであるスタンディングクエリである。
グラフデータと計算モデルのピラーに基づいて構築されたQuineのスタンディングクエリでは、分散システムに固有の時間ベースの課題が取り除かれます。
スタンディングクエリはグラフ内に保持され、新しいデータが入力されるたびにアクションをトリガーできる。特に、スタンディングクエリは、ばらばらな順序でのデータ到着に対してのソリューションを提供する。
thatDotによると、Quineアーキテクチャでは、そのアクターモデルと、グラフから情報を抽出してキャッシュに保持する価値のあるデータを知る「セマンティックキャッシング」のおかげで、高い読み取りおよび書き込みパフォーマンスが提供される。
開発者がQuineを試すのを支援するために、thatDotは、リアルタイムのブロックチェーンバックプロパゲーション、CDNキャッシュ効率、Kubernetesイベントの可観測性などの3つのレシピを作成した。
Quineは、MIT with Commons Clauseライセンスの下でGitHubで入手できる。