概要
去年の5月に発表された Cloudflare D1。去年11月の段階でオープンアルファ版として使用できるようになっています。
今回は、そんな D1 についてどんなものなのかをまとめていきます。
Cloudflare D1 とは
- D1 とは、CDN のエッジロケーション上で動く Cloudflare のエッジデータベースサービスです。
- Cloudflare には AWS でいうところのリージョンの概念がなく、285以上のエッジがマスターとなります。
- このマスターたちでマルチクラスター構成をとり、リレーショナルデータベースを作ることができるサービスなのです。
- ちなみに、Cloudflare が提供している Cloudflare Workers や Cloudflare R2 などのサービスも同じように分散されたエッジロケーション上で実行されています。
- 利用方法としては、Cloudflare Workers や pages からクエリを実行することができます。
- ちなみに、実体としてはエッジロケーション上で分散して動く、SQLite によるデータベースサービスです。
Cloudflare D1 の面白いところ
- どうやら Cloudflare によると、D1の目的は Cloudflare Workers とシームレスに統合することにありそうだ。
- Workers に SQL をサーバレスの形で組み合わせることができることに旨みを感じている。
- どのように動くのか。それは、世界中のエッジロケーションを利用し、ユーザの近くにデータベースの読み取り専用クローン(Read Replicas)を作成し、変更が発生した時に全てのクローンに同期するような動きとなるようです。
- ただ、現時点では Cloudflare はこのレプリケーションの仕組みがどのように機能するかについて、まだ詳細を発表していません。
なので一番美味しいところとしては、世界中のエッジロケーションにより、どこからアクセスしたとしても低レイテンシーで高速なデータベースアクセスを可能にすることを目指しているところなのかもしれません。
ちなみに、このレプリケーションについて、Cloudflare のエンジニア greg-m が Hacker News で書き込んでおり、リードレプリカのない D1 は強い一貫性を持っているが、リードレプリカを追加すると、レプリケーションの遅延が発生する可能性があり、強い一貫性が失われてしまうとのことです。
Just clarifying - D1 without read replicas is strongly consistent. If you add read replicas, those can have replication lag and will not be strongly consistent.
Disclaimer: I work at Cloudflare :)
D1 の主な特徴
リードレプリケーション
- 先ほども触れたように、世界中のエッジロケーションを利用し、ユーザの近くにデータベースの読み取り専用クローン(Read Replicas)を作成し、変更が発生した時に全てのクローンに同期するようなレプリケーションを行います。
バッチ処理
- D1 の API にはバッチ処理機能があります。単一の SQL を配列で送ることができます。
- これにより、1回のHTTP ラウンドトリップで複数の処理を実行することができます。下記が js での一例になります。
async function recordPurchase(userId, productId, amount) {
const result = await env.DB.exec([
[
`UPDATE users SET balance = balance - $amount WHERE user_id = $user_id`,
{ $amount: amount, $user_id: userId },
],
[
'UPDATE product SET total_sales = total_sales + $amount WHERE product_id = $product_id',
{ $amount: amount, $product_id: productId },
],
])
return result
}
バックアップと冗長性
- D1 では、Cloudflare のクラウドストレージサービスである R2 にデータベースのスナップショットを定期的に自動保存して、1クリックで復元できるようにしています。
データのインポートとエクスポート
- 他のソースやデータベースから気温のデータセットをインポートしたい場合、D1 ではデータのインポート/エクスポート機能ができるように取り組んでいます。
- これにより、例えば、アプリケーションの検証環境があれば、そのデータのスナップショットをローカルマシンに複製し、それに基づいて開発を行うことができます。
オープンアルファという位置付け
- 現時点(2023/6/13)では、オープンアルファ版で提供されています。
- そのため、商用環境での利用が推奨されていない上に、API 仕様も変更になる恐れがあります。
- ちなみに、オープンアルファという概念は、Cloudflare にとって初めての概念だそうです。
- オープンβという表現ではなく、オープンアルファという表現にしたのは、まだ開発とテスト中の重要な部分があるため、実際のアプリの構築を開始できる完成した D1 をパブリックベータ版としてリリースしたいからだそうです。
まとめ
- CDNのエッジロケーション上で動き、マスターとリードレプリカのレプリケーションのレイテンシーが下がればかなりやばいサービスなのは間違いない。
- そんな D1 のオープンベータ版公開を心待ちにしております。
参考文献