新規投稿のお知らせを受信されたい方は、サブスクリプションをご登録ください:

D1の一般公開、Hyperdrive、Queues、Workers Analytics Engineの更新情報満載

2024/04/01

8分で読了

フルスタックをより簡単に

エイプリルフールの今日、誰もが楽しく過ごしたい一方、弊社からはまじめな発表をお届けします。冗談は一切抜きに、Cloudflareのプラットフォーム上で構築する開発者の数は、今日時点で200万人を超えています!

今回のDeveloper Weekは、弊社サーバーレスSQLデータベースであるD1既存のデータベースを分散型(しかもより高速)のように感じさせるHyperdrive、そして弊社時系列データベースであるWorkers Analytics Engineの3製品での「プロダクション・レディ(本番環境で利用可能)」への転換をもって皮切りとなります。

開発者がスタック全体をCloudflareに持ち込めるよう長い間取り組んできた一方、Cloudflareで構築するアプリケーションはどのようなものとなるのでしょうか。

概念図自体は、すでに慣れ親しんだツールとそう大きくは変わりません。コアユーザーデータには、データベースが必要になります。アセットとユーザーコンテンツには、オブジェクトストレージが必要となります。メールやアップロード処理などのバックグラウンドでのタスクには、キューが必要となるでしょう。ランタイムのコンフィグには、高速なkey-value storeが必要になります。さらに、ユーザーイベントおよびパフォーマンスデータの集計には、時系列データベースも必要になります。これは、わずかな例を挙げれば検索、推奨、および画像分析タスクなどの多くのアプリケーションの核となりつつあるAI登場前の話です。

しかし、考えるまでもなく、このアーキテクチャは地球全体で実行されており、つまりスケーラビリティ、信頼性、さらにスピードのすべてが整っていることになります。

D1一般公開:本番環境で利用可能

コアデータベースは、インフラストラクチャで最も重要なものの1つで、非常に高い信頼性が必要です。データを紛失することがあってはならず、スケーリングできる必要があります。そのため弊社では、昨年D1が本番環境で利用可能となるよう取り組んできており、この度、弊社のグローバルサーバーレスSQLデータベースであるD1の一般利用が開放されたことをお知らせします。

D1の一般公開では、次に挙げる最も需要の高い機能を実現しました。

  • 10GBデータベース、アカウント当たりデータベース50,000件のサポート
  • 新しいデータエクスポート機能
  • 最も時間またはコストを消費している、もしくは単に非効率的なクエリを把握するための強化されたクエリデバッギング(「D1 Insights」と命名  

これにより、開発者がD1で本番環境で利用可能なアプリケーション構築し、すべてのリレーショナルSQLのニーズを満たすことを支えます。さらに、「無料プラン」または「趣味向けプラン」の概念が廃れつつあると思われる時勢の中、弊社では、D1の無料ティアを廃止したり、$5/月のWorkers有料プランに含まれる読み取り行数250億行を減らしたりすることはありません。

プラン

読み取り行数

書き込み行数

ストレージ

Workers 有料

月当り250億行込み

+ 以降100万行当たり$0.001

月当り500億行込み

+ 以降100万行当たり$1.00

5 GB込み


+ $0.75 / GB(月当たり

Workers 無料

500万 / 日

100,000件 / 日

5GB(合計)

D1を開始当初からご覧になっている皆様へ:これはオープンベータ版で発表した価格と同じです

しかし、一般公開だけに留まるわけではありません。D1には、グローバルなリードレプリケーション、さらに大規模なデータベース、データベースの分岐を可能にするより強力なTime Travel機能、Worker内から動的なクエリおよび新規データベースをオンザフライで作成するための新APIなど、主要新機能を複数用意しています。

D1のリードレプリケーションは、必要に応じてリードレプリカを自動的にデプロイし、ユーザーにより近いデータを取得します。さらに、これはスピンアップ、スケーリングの管理、または一貫性(レプリケーションのラグ)問題に煩わされることなく実現します。以下、D1で予定しているレプリケーションAPIの例を掲載します。

export default {
  async fetch(request: Request, env: Env) {
    const {pathname} = new URL(request.url);
    let resp = null;
    let session = env.DB.withSession(token); // An optional commit token or mode

    // Handle requests within the session.
    if (pathname === "/api/orders/list") {
      // This statement is a read query, so it will work against any
      // replica that has a commit equal or later than `token`.
      const { results } = await session.prepare("SELECT * FROM Orders");
      resp = Response.json(results);
    } else if (pathname === "/api/orders/add") {
      order = await request.json();

      // This statement is a write query, so D1 will send the query to
      // the primary, which always has the latest commit token.
      await session.prepare("INSERT INTO Orders VALUES (?, ?, ?)")
        .bind(order.orderName, order.customer, order.value);
        .run();

      // In order for the application to be correct, this SELECT
      // statement must see the results of the INSERT statement above.
      //
      // D1's new Session API keeps track of commit tokens for queries
      // within the session and will ensure that we won't execute this
      // query until whatever replica we're using has seen the results
      // of the INSERT.
      const { results } = await session.prepare("SELECT COUNT(*) FROM Orders")
        .run();
      resp = Response.json(results);
    }

    // Set the token so we can continue the session in another request.
    resp.headers.set("x-d1-token", session.latestCommitToken);
    return resp;
  }
}

要点として、セッションベースの一貫性を保てる能力を開発者に提供するため、ユーザーは自らの変化が反映されていることを認識でき、一方でレプリケーションがもたらすパフォーマンスと遅延向上のメリットが得られます。

D1のリードレプリケーションが内部でどのように機能するかについては、詳細を解説した投稿でご覧いただけます。また、さっそくD1上で構築を始めたい場合、開発者ドキュメントで最初のデータベースを作成してください。

Hyperdrive: 一般公開

弊社では、昨年9月のバースデーウィーク中にHyperdriveをオープンベータ化し、現在一般提供しています。つまり、攻撃テスト済みかつ本番環境で利用可能となっています。

Hyperdriveについて把握できていない方のために説明すると、すでに運用している集約化されたデータベースがグローバルなものに感じられるよう設計されたものです。弊社のグローバルネットワークを活用し、データベースへのより早いルート取得、コネクションプールの準備を整え、最も頻繁に実行されるクエリを可能な限りユーザーの近くにキャッシュします。

要点として、Hyperdriveは最も人気が高くすぐに使えるドライバーかつORM(オブジェクト・リレーショナル・マッパー)ライブラリであり、クエリを再学習またはリライトする必要はありません。

// Use the popular 'pg' driver? Easy. Hyperdrive just exposes a connection string
// to your Worker.
const client = new Client({ connectionString: env.HYPERDRIVE.connectionString });
await client.connect();

// Prefer using an ORM like Drizzle? Use it with Hyperdrive too.
// https://orm.drizzle.team/docs/get-started-postgresql#node-postgres
const client = new Client({ connectionString: env.HYPERDRIVE.connectionString });
await client.connect();
const db = drizzle(client);

しかし、Hyperdriveでの取り組みは「一般公開」となったことだけでは終わりません。今後数か月にかけ、最も広範にわたりデプロイされた他のデータベースエンジンであるMySQLをサポートする予定です。また、Cloudflare TunnelMagic WANを経由したプライベートネットワーク(クラウドVPCネットワークを含む)内のデータベースへの接続もサポートする予定です。これに加え、インバリデーションとキャッシング戦略に関する設定可能性を高める計画で、パフォーマンス対データのフレッシュネスに関しよりきめ細かな判断ができるようになります。

Hyperdriveの値段設定について検討するに当たり、課金は不適切であると弊社は判断しました。結局、Hyperdriveがもたらすパフォーマンスのメリットは重要であるだけでなく、従来型のデータベースエンジンに接続するにあたり不可欠なものです。Hyperdriveがない場合、データベースに接続またはクエリを実行するたびにリクエスト当たり6回以上の遅延のオーバーヘッドが発生するのは、正しい状況ではありません。

このため、Workers有料プランをご利用中のあらゆる開発者には、Hyperdriveを無料にしています。これには、複数のHyperdriveを作成する機能とともに、クエリキャッシングと接続プーリングの両方が含まれます。これにより、各種アプリケーション、本番対ステージングの分別、または各種コンフィギュレーション(キャッシュ化対未キャッシュ化など)の提供が実現します。

プラン

クエリごとの料金

接続プーリング

Workers 有料

$0 

$0

Hyperdriveを使い始める場合、ドキュメントをお読みになり、Workersからご利用中の既存のデータベースへの接続およびクエリの開始についてご覧ください。

Queues:場所を問わずにプル可能

タスクキューは、現代的なフルスタックのアプリケーション構築においてますます重要な要素となっており、弊社はオープンベータ版のQueues発表した当時、このことを気にかけていました。以来Queuesの複数の主要機能に取り組み、その内のプルベースのコンシューマーと新メッセージ配信制御の2つを今週リリースすることにしました。

すべてのHTTPを活用するクライアントは、これよりキューからメッセージをプルできるようになります。キューの新しい/pullエンドポイントをメッセージのバッチから呼び出したり、/ackエンドポイントを呼び出し処理する中、各メッセージ(またはメッセージのバッチ)を認識できるようになります。

// Pull and acknowledge messages from a Queue using any HTTP client
$  curl "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/queues/${QUEUE_ID}/messages/pull" -X POST --data '{"visibilityTimeout":10000,"batchSize":100}}' \
     -H "Authorization: Bearer ${QUEUES_TOKEN}" \
     -H "Content-Type:application/json"

// Ack the messages you processed successfully; mark others to be retried.
$ curl "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/queues/${QUEUE_ID}/messages/ack" -X POST --data '{"acks":["lease-id-1", "lease-id-2"],"retries":["lease-id-100"]}' \
     -H "Authorization: Bearer ${QUEUES_TOKEN}" \
     -H "Content-Type:application/json"

プルベースのコンシューマーはどこからでも実行でき、既存の従来型クラウドインフラストラクチャと併せてキューコンシューマーを実行できます。Cloudflareの社内チームは、デバイスのテレメトリを310以上のデータセンターからのキューに書き込み、Kubernetesで実行される舞台裏のインフラストラクチャ内で消費される1つのユースケースに着目し、これを早くより採用しました。重要なのは、弊社のグローバルに分散したキューインフラストラクチャは、コンシューマーによる処理準備が整うまでメッセージがキュー内にとどまることを意味している点になります。

Queuesはまた、キューに送信する際、およびリトライ時にメッセージを作成する際の両方において、メッセージを遅らせることに対応することになりました。これは、将来のタスクを順番待ちとする際、および上流APIまたはインフラストラクチャがメッセージ処理のスピードを調整する必要がある際のレート制限を設けている場合の保険メカニズムとして役立ちます。

// Apply a delay to a message when sending it
await env.YOUR_QUEUE.send(msg, { delaySeconds: 3600 })

// Delay a message (or a batch of messages) when marking it for retry
for (const msg of batch.messages) {
	msg.retry({delaySeconds: 300})
} 

弊社ではまた、今後Queuesを一般公開するにあたり大幅に増強されたper-queueを提供する予定でもいます。Queruesが非常に信頼性の高いものであることも弊社にとって重要な点です。メッセージが失われたり見落とされたりすると、ユーザーは注文確定メールやパスワードリセット通知を受け取れなかったり、アップロードが処理されなくなったりします。こうした事態はユーザーに影響を及ぼし、修正が難しくなります。

Workers Analytics Engineが一般公開

Workers Analytics Engineは、Workersからのデータポイントを書き込む内蔵API、およびそのデータをクエリするSQL APIにより、無制限カーディナリティ分析を大規模に提供します。

Workers Analytics Engineは、Cloudflareで長年にわたり頼りにされてきた同じClickHouseベースのシステムによって支えられています。弊社では、自社サービスの健全性を確認するために使用しており、請求のための製品利用状況を把握し、特定の顧客の利用パターンについての質問に答えています。ほとんどすべてのCloudflareのネットワークへのリクエストついて、少なくとも1つのデータポイントがこのシステムに書き込まれます。Workers Analytics Engineにより、弊社側が困難な部分を担当しながら、この同じインフラストラクチャを用い独自のカスタム分析を構築できるようになります。

ベータローンチ以降、大型企業からCounterscaleなどのオープンソースプロジェクトまで、こうした同じユースケースなどで開発者はWorkers Analytics Engineに頼りはじめました。Workers Analytics Engineは、長年にわたりミッションクリティカルなワークロードを本番スケールで稼働させてきました。しかし、弊社は本日まで、価格情報について一切の情報を提供してきませんでした。

弊社では、2つの指標に基づき、Workers Analytics Engineの価格をシンプルに保ちます。

  1. 書き込まれるデータポイントwriteDataPoint()をWorkerで呼び出す際、1つのデータポイントに書き込まれたとカウントします。データポイントごとに、同額となります。他のプラットフォームとは異なり、ディメンションやカーディナリティ追加に対しペナルティはなく、圧縮されたデータポイントのサイズとコストを予想する必要はありません。
  2. クエリの読み取り — Workers Analytics EngineのSQL APIに配信するたびに、1回のクエリ読み取りとしてカウントします。クエリごとに、同額となります。他のプラットフォームとは異なり、クエリの複雑性に対しペナルティはなく、各クエリによって読み取られるデータの行数を勘案する必要はありません。

Workers FreeおよびWorkers Paidプランの両方で、クエリ書き込みおよび読み取りのデータポイント割当を含んでおり、付加的な利用についてのプライシングは次のようになります。

プラン

書き込まれるデータポイント

クエリ読み取り

Workers 有料

1か月あたり、1,000万込み


追加100万ごとに、+$0.25

1か月あたり、100万込み


追加100万ごとに、+$1.00

Workers 無料

1日当たり、100,000込み

1日当たり、10,000込み

このプライシングにより、Workerで機能を呼び出す回数、およびHTTP APIエンドポイントをリクエストする回数を数えることで、Workers Analytics Engineの利用料金が分かります。複雑な計算は不要で、手計算で算出できるほどシンプルなものとなっています。

このプライシングは、今後あらゆるお客様に適用されるようになります。現時点よりそれまでの間、Workers Analytics Engineは無料でご利用いただけます。今日からさっそく、ご利用中のWorkerからデータポイントを書き込み始めていただけます。必要な時間はわずか数分で、10行未満のコードでデータの取得を始められます。ぜひ、ご利用体験をお聞かせください。

週は始まったばかり

Developer Weekの2日目となる明日のお届け内容も、ぜひご確認ください。ご質問がある場合、またはすでに構築されたものについて共有いただける場合、ぜひ開発者向けDiscordでお聞かせください。

Cloudflareは企業ネットワーク全体を保護し、お客様がインターネット規模のアプリケーションを効率的に構築し、あらゆるWebサイトやインターネットアプリケーションを高速化し、DDoS攻撃を退けハッカーの侵入を防ぎゼロトラスト導入を推進できるようお手伝いしています。

ご使用のデバイスから1.1.1.1 にアクセスし、インターネットを高速化し安全性を高めるCloudflareの無料アプリをご利用ください。

より良いインターネットの構築支援という当社の使命について、詳しくはこちらをご覧ください。新たなキャリアの方向性を模索中の方は、当社の求人情報をご覧ください。
Developer Platform (JP)Developers (JP)Developer Week (JP)D1 (JP)Hyperdrive (JP)Queues (JP)Cloudflare Workers (JP)日本語

Xでフォロー

Rita Kozlov|@ritakozlov_
Matt Silverlock|@elithrar
Cloudflare|@cloudflare

関連ブログ投稿

2024年4月01日 13:00

藉助 D1 GA 版以及 Hyperdrive、Queues 和 Workers Analytics Engine 更新簡化現狀

任何完整堆疊應用程式的核心部分都是儲存和持久化資料!我們在萬分期待中迎來了新的活動週,並以宣佈一系列公告拉開序幕,包括讓 D1(Cloudflare 的 SQL 資料庫)和 Hyperdrive(我們的資料庫加速服務)正式上市,可幫助開發人員基於 Cloudflare 構建具狀態應用程式 ...

2024年4月01日 13:00

使用正式发布的 D1 以及 Hyperdrive、Queues 和 Workers Analytics Engine 更新,简化状态管理

全栈应用的核心部分是存储和保留数据!我们希望宣布一系列产品更新来拉开本届 Developer Week 的序幕,这些更新旨在帮助开发人员在 Cloudflare 上构建有状态的应用程序,包括正式发布 D1 和 Hyperdrive,前者是 Cloudflare 的 SQL 数据库,后者是 Cloudflare 的数据加速服务...

2024年4月01日 13:00

D1 GA, Hyperdrive, Queues, Workers, Analytics Engine 업데이트로 상태 간편화하기

모든 전체 스택 앱의 핵심은 데이터를 저장하고 보존하는 것입니다! 금주에는 개발자가 Cloudflare를 기반으로 스테이트풀(stateful) 앱을 구축하는 데 도움이 될 프레젠테이션을 발표하는 것으로 시작하게 되어 기쁩니다. 여기에는 Cloudflare의 SQL 데이터베이스인 D1과 데이터베이스 가속화 서비스인 Hyperdrive를 일반 사용자도 이용 가능하게 하는 것이 포함됩니다...