Cloudflare Workers, KV, D1触ったメモ
ちょっとした手元のアプリで永続化したいデータがあったのでそれぞれ使用感など
Workers
まず触るのはここから
特徴的なのはその動作モデルで色々制約はあるもののCold StartなしのLambdaに近い 一つのランタイム上で数百から千個のような多数の分離されたサンドボックスが走るようなイメージ
コンテナベースではなくプロセス内での軽量スレッド分離(ErlangのActorモデルに近いか)のため一つのランタイム上で大量にユーザコードを並行して走らせることが出来る
実際内部がどのようになっているかは知らないがBEAMの軽量スレッド分離に動作モデルが近く感じる
Pros
無料枠が広い
Cold Startがない. 今までCold Startの制約でHot状態になるようWork Aroundしていたようなことが必要ない
Cons
Free planではCPU Runtimeが10ms
DBのReadや外部APIへのリクエストはCPU runtimeに含まれないので超えること自体はあまり無い
スクリプトサイズ制限
Freeで1MB, Paidで5MB
動作モデル上の制限だと思うので将来的にここが拡張されるのかは不明
既存のエコシステムは大抵でかいライブラリを抱えているので既存をそのまま移行ということはしづらい
例えばLambdaで動かしていた10MBのパッケージをそのまま移行みたいな
新規に作るのであれば軽量フレームワークやライブラリでコンパクトに作ることは出来るがビジネス要件の肥大に伴いずっと維持し続けられるかは不明.
そういう意味でビジネスで使う上での懸念はある(それ故条件を限定した特定の目的に絞ったケースや小規模開発に刺さるものでもある)
制約と誓約
KV
Pros
Key-ValueストアなのでSession用途などのストレージとして使える
Cons
明確に制限としてあったのは特定のキーをputしてgetで期待した値が帰ってくるまでの整合性が同期するレイテンシが数十秒から長くて1分近くある結果整合性であり、強い整合性が必要なアプリケーションでの使用は厳しい
D1
SQLiteベースの分散DB(2023-02-19現在Alpha)
Pros
強い整合性あり
Cloudflare DO(Durable Object)が強い整合性があるのでそれをベースにSQLiteファイルを分散するよう作られている?
書き込みと読み込みそれぞれ数十ミリ秒程度なので現実的な時間内には実行出来る
Cons
SQLiteではあるのでfull-fledgedなDBMSを求めてはいけない(Auroraのような)
きめ細かいリカバリや特定のビジネス要件に事細かに対応みたいなことは考えない方がいい
制限
現状データベースサイズは100MBまで(技術的な制約である場合将来的に拡張されるのか?)
現状一アカウントデータベースは10個まで
共有アカウントのような場合すぐ達しそう
バックアップ→1時間に1回バックアップされその間は1,2秒リクエストがキューに入る
Backups: Backups run every hour automatically. Backups will block access to the DB while they are running. In most cases this should only be a second or two, and any requests that arrive during the backup will be queued.
所感
どれもFreeプランがあり(D1はまだ具体的なpricingは無いが)それなりにリクエストしないとFree枠を超過しないのでCost-Effectiveではある
個人レベルの小規模開発やPoC程度の案件であれば環境を用意するリードタイムなど考えると良い候補になりそう
特定の用途に刺さりそう
Pros
wrangler コマンドで色々完結するのが良い
若干名前長いから wg みたいな alias 設定しておくとよいかも alias wg=wrangler
ローカル環境が最初からちゃんと動くのがよい
wrangler dev コマンドで本番環境Compatibleな仮想環境がすぐ立ち上がる
少なくともworker, KV, D1はローカルで動作しそれぞれ本番環境動作時と同様のエラーを出力した
D1向けに書いたSQLのSyntax Erorr時にエラーになる等
差異が少ない分wranglerで叩く時どちらで実行しているか少し分かりづらい
デプロイが早いのがよい
wrangler publish で1秒か2秒で即反映されるのは体験がとてもよい
プロセス内分離でcold startしないことが反映の速さにも繋がってる?
とにかくすぐ動くのでアイデアをすぐ実現したいというような場合の初速が出る
スケールする
特に設定することなくフルマネージドでスケールする
Cons
動作モデルを特定ユースケースに絞って性能を出しているので表面上見えづらい制限もいろいろある
ビジネス上で使うにはサポートや制約等から必ずしも最適なユースケースでない場合もあるので慎重に