Durable Objectsを深掘り

Durable Objects
Cloudflareが提供する分散型のオブジェクトストレージ
👆面白い
Durable Objects がどこで作成されたかトラッキングできる
👇Durable Objectsの発表ブログ
Durable Objectsのオブジェクトは、オブジェクト指向プログラミングの意味でのオブジェクトです。Durable Object は、クラスのインスタンスです
Durable Objectsには主要な能力が2つあります
- ストレージ
各オブジェクトには耐久性のあるストレージが付属します- 調整
各リクエストは Worker インスタンスにランダムに負荷分散されます。Durable Objectsでは、同じトピックに関連するリクエストを同じオブジェクトに転送し、ストレージに触れることなく、オブジェクト間で調整できるようになります
2の調整の多くのユースケースがWebsocketを扱うものになる。
Confrict-free Replicated Data Types (CRDT) 、またはそれと同類の操作変換 (OT) は、データを同期したり、損失したりすることなく、世界中の複数の場所から同時にデータを編集できるテクノロジーです。
競合解決のために自動化されたアルゴリズムは時々間違う可能性があるのと、CRDTは複雑すぎる。それより細かい単位で調整ポイントがある方が良いという考え

Walkthrough
メモリ内状態
メモリ内状態とは、各永続オブジェクトが特定の時点でアクティブなインスタンスを1つ持つことを意味します。
組み込みキャッシュ
Durable Object のストレージには、独自のメモリ内キャッシュが組み込まれています。最近読み書きされた値を取得するために
get()
を使用すると、結果はキャッシュから即座に返されます。上記のような初期化コードを記述する代わりに、必要に応じてget("value")
を使用し、組み込みキャッシュを利用することで高速化できます。このアプローチの詳細については、 「カウンターを作成する」の例を参照してください。ただし、より複雑な状態を扱うアプリケーションでは、アクセスのたびにStorage APIを呼び出すよりも、オブジェクトに明示的に状態を保存する方が簡単な場合があります。プロジェクトの構成に応じて、最も簡単な方法でコードを記述してください。
WebSocket Hibernation API
Web標準WebSocket APIを拡張したAPI
-
ws.accept
の代わりにstate.acceptWebSocket(ws)
を使うことでWS接続はそのままで、Durable Objects がメモリから消えるらしい。メッセージが来たらすぐにメモリ上にDurable Objects が展開されるらしい。
価格
コンピューティングとストレージの 2 種類の課金が発生する
-
コンピューティング課金
- Durable Objects がアクティブの間課金
- WebsocketのPingは無料
無料プラン 有料プラン リクエスト 1日あたり10万件 100万 + 0.15ドル/100万 所要時間 13,000 GB-秒 / 日 400,000 GB-秒 + 12.50ドル/100万GB-秒 -
ストレージ課金
インターリーブとは?
「インターリーブ」は、データ処理や通信において、データを連続的に扱うのではなく、意図的に不連続に配置することで、性能向上や誤り訂正などを目指す手法を指します。様々な分野で活用されており、例えば、コンピューターのメモリアクセスを高速化したり、通信の速度を向上させたり、印刷物の保護などを目的として用いられます

参考URL