Faunaトランザクションデータベースを提供するFauna社は、最近、イベントストリーミングの一般提供を発表した。これは、サブスクライブされたクライアントにドキュメントレベルとコレクションレベルの両方で変更を送信するプッシュベースのストリームである。
FaunaのシニアプロダクトマーケティングマネージャのShashank Golla氏は、次のように説明している。
Faunaのイベントストリーミングは、オープンなプッシュベースのストリーミング方法を採用しています。データベースに変更があった場合に、リアルタイムのデータ更新をクライアントに自動的にストリーミングします。ポーリングとは異なり、イベントストリーミングでは、クライアント側からのサブスクリプションが1回発生し、サブスクライブされたドキュメントまたはコレクションが更新されるたびに、変更がクライアントに自動的にブロードキャストされます。
出典: https://fauna.com/blog/event-streaming#ensure-clients-have-least-privilege-access-with-abac
Faunaは2種類のイベントストリーミングをサポートする。1つはドキュメントストリーミングであり、クライアントがドキュメントリファレンスをサブスクライブする。もう1つはセットストリーミングであり、クライアントがセットリファレンスをサブスクライブし、1つ以上のドキュメントがセットに出入りするときにイベント通知がトリガーされる。
分散データベースであるFaunaはオブジェクトリレーショナルであり、グローバルに複製が作られるサービスである。インデックス付きドキュメントデータモデルと分散ACIDトランザクションをサポートする。サブスクリプションは、Faunaドライバーを介してクライアントによってオープンされたクラウドサービスへの接続である。そして、セットストリーミングとドキュメントストリーミングの機能はC#、Go、JavaScript、JVM(Java、Scala)、Pythonドライバーを使ってを利用できる。FaunaのディベロッパーアドボケートのShadid Haque氏は、サンプルのreactアプリケーションを使ってイベントストリーミングを統合する方法を説明しているが、彼は次のように提案している。
クエリを実行してドキュメントをフェッチしてからストリームを確立することは避けてください。ストリームの起動前に複数のイベントによってドキュメントが変更される可能性があります。これにより、アプリケーションでのドキュメントデータの表現が不正確になる可能性があります。
イベントストリーミングデータベースはここ数年で人気が出てきている。主要なクラウドプロバイダーは、DynamoDB StreamsとAWS Kinesis Datastream、Datastream on Google Cloud、Azure Event Hubsなど、データをストリーミングするためのさまざまなマネージドオプションを提供している。CockroachDBとAstra DBは、Change Data Capture(CDC)を使ってイベント駆動型アーキテクチャをサポートしている。Serverless IncのサーバーレスクラウドのGMであるJeremy Daly氏は、最新のニュースレターで次のようにコメントしている。
あなたがデータベースプロバイダーであり、イベント駆動型アーキテクチャの世界に流れて来ていないのであれば、何か他にやることを探し始めたほうがよいでしょう。
クライアントが最小限の特権アクセスを持つようにするために、GoliaはABACを使用することを提案している。従来の役割ベースのアクセス制御のFauna拡張である。
ABACを使うと、ストリーミングを使って最小特権アクセスを実装し、更新を受信する必要があるユーザのみにリアルタイムに変更を提供できます。
Faunaイベントストリーミングには、次の制限が適用される。GraphQLサブスクリプションは現在サポートされていない。ブラウザは、最大100のストリームを開くことができ、ドキュメントストリームは、ドキュメントのデータフィールド内のフィールドと値に対するイベントのみをレポートする。
イベントストリーミングは使用量に応じて課金され、Faunaのすべての料金プランで利用できる。ストリーミングされた各イベントは2つの読み取り操作としてカウントされ、ストレージからの4kバイトの読み取りを含む。それに加えて、サブスクライバーごとに追加の4kバイトごとに1つの読み取り操作となる。サブスクライバーごとに1つの計算操作が、ストリームがオープンになっている1秒ごとにカウントされる。