Durable Objects(永続性のあるオブジェクト)::サマリー(2022/03)
ステートフルサーバーレスの新しいパラダイム
-
3つの特徴
- オブジェクト
- 一意性(アトミック性)
- 永続性
-
その他の特徴
- 有料planでのみ使用可能
- ステートフルなサーバーレスを提供
- メンテナンスの負担がない。
- WebSocketエンドポイントとして機能もできる。
オブジェクト
JavaScriptのオブジェクト
- メモリ
- cloudflare workersのJavaScriptオブジェクト
永続性のあるオブジェクトは、オブジェクト指向プログラミングの意味でのオブジェクトです。Durable Objectは、クラスのインスタンスです。文字通り、JavaScript(または選択した言語)で記述されたクラス定義です。このクラスには、パブリックインターフェイスを定義するメソッドがあります。オブジェクトはこのクラスのインスタンスであり、コードといくつかのプライベート状態を組み合わせたものです。
一意性(アトミック性)
- オブジェクトはアトミック性がある。
- グローバルな一意性
- 全てのエッジ間でリアルタイムのアトミック性
- どのエッジからのアクセスも低レイテンシ
各オブジェクトには、グローバルに一意の識別子があります。そのオブジェクトは、一度に全世界の1つの場所にのみ存在します。オブジェクトのIDを知っている世界中のどこでも実行されているワーカーは、オブジェクトにメッセージを送信できます。これらのメッセージはすべて同じ場所に配信されます。
永続性
- ストレージ
- オブジェクトと対で用意されている。
- KVS: IDによって管理される。
- ストレージ単体で使用するAPIあり。
- ストレージを提供するという点では、KVとは正反対の立場
- 頻繁に変化するステートを即座に確認する性格
- KVより高速
- 容量辺りの価格はこちらの方が高い
- 適切なスケーリング
- メッセージを順番にシングルスレッドで処理し、メッセージ間の調整を行います。
- 複数のリクエストイベントは、オブジェクトに到達した方法とは異なる順序で処理される可能性がある。
- 強力なトランザクションの一貫性を提供
JavaScriptの通常のオブジェクトとは異なり、永続性のあるオブジェクトは永続的な状態をディスクに保存できます。各オブジェクトの永続的な状態はプライベートです。つまり、ストレージへのアクセスが高速であるだけでなく、オブジェクトはメモリ内の状態の一貫したコピーを安全に維持し、ゼロレイテンシで操作することもできます。インメモリオブジェクトは、アイドル状態になるとシャットダウンされ、後でオンデマンドで再作成されます。
解説図
- Durable Objectsは世界中の異なるエッジから複数の読み書きをしても値の一貫性を保証します。
- 各オブジェクトが存在するCloudflareデータセンターを自動的に決定し、必要に応じて場所間でオブジェクトを透過的に移行できます。
アクセス方法
Durable Objects
- オブジェクト+ストレージ
- wokersのjavascriptから使用
Durable Objects storage API
- ストレージのみ
- API経由で使用
- wokersを使用しない場合こちらを使用する。
料金
- wokrersの有料 plan のみ(無料では使えない)
- workers経由で使用する場合、workersの料金が別途かかかる。
- 料金はどの操作をしてもDynamoDBより概ね25%割安になる。
- 容量の計算は有効なオブジェクトの容量
- 不要なオブジェクトはリクエストの受信を停止する。
Durable Objects
- Requests
- 1 million, + $0.15/million
- Duration
- 400,000 GB-s, + $12.50/million GB-s1,2
Durable Objects storage API
- Read request units
- 1 million + $0.20/million
- Write request units
- 1 million, + $1.00/million
- Delete requests
- 1 million, + $1.00/million
- Stored data
- 1 GB, + $0.20/ GB-month
資料
サンプル
Durable Objects関連サービス
Durable Objectsがベースのサービス
- R2 storage
- Cloudflare Waiting Room
Durable Objectsと競合するサービス
- R2 storage
- cloudflare workers KV