すべての Durable Object でゼロレイテンシの SQLite ストレージ
(simonwillison.net)-
Zero-latency SQLite storage in every Durable Object
- Kenton Varda は、Cloudflare の Durable Object プラットフォームの次世代版を紹介している。このプラットフォームは最近、キー/バリューストアから SQLite ベースの完全なリレーショナルシステムへとアップグレードされた
- Durable Objects の最初のバージョンについての有用な背景情報として、Paul Butler による Cloudflare の durable multiplayer moat を参照できる。これは WebSocket ベースのリアルタイム協調アプリケーションの構築で人気がある
- 新しい SQLite ベースの Durable Objects は、大規模アプリケーションを設計するための興味深い方法を提案する、分散システム設計の魅力的な要素である
-
Durable Objects の中核アイデア
- Durable Object は、データとアプリケーションロジックを同じ物理ホスト上に配置することで、非常に高速な読み書き性能を提供する
- 単一のオブジェクトは単一マシンの単一スレッドで実行されるため、スループットには制限がある。より多くのトラフィックを処理するには、より多くのオブジェクトを作成する。各状態単位のトラフィックが単一オブジェクトで処理できるほど低い場合に最も容易である
-
航空便予約システムの例
- 各フライトは、独自の SQLite データベースを持つ専用 Durable Object にマッピングできる。航空会社ごとに毎日数千個の新しいデータベースが作成される
- 各 DO は一意の名前を持ち、Cloudflare のネットワークは、そのオブジェクトが世界のどこにあってもリクエストをルーティングする
-
技術的詳細
- Litestream に着想を得て、各 DO は WAL エントリのシーケンスをオブジェクトストアへ継続的にストリーミングする。これは 16MB ごと、または 10 秒ごとにバッチ処理される
- 10 秒のウィンドウ内で耐久性を保証するため、書き込みはコミットされるとすぐに近隣データセンターの 5 つのレプリカへ送られ、3 つが確認するとその書き込みが承認される
-
JavaScript API デザイン
- 非同期ではなくブロッキング方式で設計されている。これは高速な単一スレッドの永続化処理を提供するためである
- SQLite がうまく処理できる N+1 クエリパターンを意図的に示した例を含んでいる
-
Storage Relay Service
- Durable Objects の基盤システムであり、Cloudflare の既存の D1 SQLite システムを 1 年以上にわたって支えてきた
-
Durable Objects の生成場所
- Durable Objects は作成後に場所を変更しない。デフォルトでは、最初の get() リクエストが行われたデータセンターでインスタンス化される
- 別の場所で Durable Objects を手動で作成するには、get() にオプションの
locationHintパラメータを指定する
-
where.durableobjects.live サイト
- Cloudflare ネットワーク上で DO が生成される場所を追跡するサイトである
GN⁺の要約
- Cloudflare の Durable Objects は SQLite を基盤としており、大規模アプリケーション設計に新たな可能性を提示する。データとアプリケーションロジックを同じ物理ホストに配置することで高速な性能を提供する
- このシステムは特にリアルタイム協調アプリケーションに有用で、さまざまな状態単位を処理できる柔軟性を提供する
- Durable Objects はデータの耐久性を保証するために複数のデータセンターにレプリカを作成し、安定性と信頼性を高めている
- この技術は大規模分散システム設計に関心のある開発者にとって興味深い可能性がある。類似機能を提供するシステムとしては Amazon の DynamoDB や Google の Firestore がある
1件のコメント
Hacker Newsの意見
書き込みAPIは同期式だが、隠れた非同期待機の仕組みがある。書き込みが失敗した場合、ランタイムが応答をHTTPエラーに置き換えるため、自動的に書き込みをバッチ処理し、成功を前提にできる
各DOはWALエントリのシーケンスをオブジェクトストレージにストリーミングし、これは16MBごと、または10秒ごとにバッチ処理される
Durable Objectの設計は気に入っている。内部の動作を理解しやすい
Durable Objectsの物理的な配置場所を理解しにくい
新しいクラウド技術を理解するのは難しい
スキーママイグレーションをどう処理するのか気になる
DOの設計は興味深いが、高負荷システムかおもちゃのプロジェクトにしか向かないと思う
DOの設計に感銘を受けた。複雑な作業を小さなスケールで処理する方法が、実際のプロダクト構造に似ていると思う
CFが開発者にDOの使用を勧めている点に注目している
DOがMVCアーキテクチャの「モデル」に相当するのか気になる