订阅以接收新文章的通知:

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

2024-04-01

6 分钟阅读时间
这篇博文也有 EnglishFrançaisDeutsch日本語한국어Español繁體中文版本。

让全栈开发更简单

虽然今天是愚人节,而且我们也和其他人一样喜欢玩乐,但我们希望在今天发布一些严肃的公告。事实上,截至今天,已有超过 200 万开发者在 Cloudflare 平台上进行开发——这绝对不是开玩笑!

作为本届 Developer Week 的序幕,我们宣布三个产品进入“生产就绪”状态: D1 ——我们的无服务器 SQL 数据库Hyperdrive——使您的_现有_数据库运行犹如分布式(而且更快!);以及 Workers Analytics Engine——我们的时间序列数据库。

一段时间以来,我们一直致力于让开发人员将他们的整个技术栈迁移到 Cloudflare 上,但在 Cloudflare 上构建的应用程序会是什么样子呢?

这个图表本身看起来应该与您已经熟悉的工具没有太大差异:您需要一个数据库用于存储核心用户数据。对象存储用于存储资产和用户内容。也许一个队列用于处理后台任务,例如电子邮件或上传处理。一个快速键值存储用于运行时配置。也许甚至一个时间序列数据库聚合用户事件和/或性能数据。我们甚至还没有涉及到 AI(人工智能)——它正日益成为许多应用程序在搜索、推荐和/或图像分析任务(最低限度!)中的一个核心部分。

而且,无需多想,这种架构需要运行在全球范围内,意味着它是可扩展、可靠和快速的,全部开箱即用。

D1 正式版:生产就绪

核心数据库是基础设施中最关键的组成部分之一。它需要高度可靠,不能丢失数据,需要能够扩展。因此,在过去的一年里,我们一直全力以赴使 D1 达到生产就绪状态。现在,我们隆重宣布 D1 —— 我们的全球、无服务器  SQL 数据库 —— 现在已经正式发布。

D1 的正式发布带来了一些备受期待的功能,包括:

  • 支持 10 GB 数据库——以及每个账户 5 万个数据库;

  • 全新数据导出功能;以及

  • 增强查询调试功能(我们称之为“D1 Insights”)——以便您了解哪些查询消耗了最多的时间、成本,或者哪些查询效率低下……

……旨在赋能开发人员以利用 D1 构建满足其所有关系型 SQL 需求的生产就绪应用程序。而且重要的是,在“免费计划”或“爱好型计划”显然面临风险的情况下,我们无意取消 D1 的免费级,也不打算降低 5 美元/月 Workers Paid 计划包含的 _250 亿行读取_配额:

计划

Plan

Rows Read

Rows Written

Storage

Workers Paid

First 25 billion / month included

+ $0.001 / million rows

First 50 million / month included

+ $1.00 / million rows

First 5 GB included


+ $0.75 / GB-mo

Workers Free

5 million / day

100,000 / day

5 GB (total)

读取行数

写入行数

存储

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;
  }
}

Workers Paid

包含 250 亿行/月

+ 0.001 美元/百万行

包含 5000 万行/月

+ 1.00 美元/百万行

包含 5 GB

// 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);

+0.75 美元/GB/月

Workers Free

500 万/日

Plan

Price per query

Connection Pooling

Workers Paid

$0 

$0

100,000 /日

5 GB(总计)

如果您从一开始就关注 D1:这与我们在 公开测试版时宣布的价格一致

但正式发布并不意味着我们的工作停顿下来:我们计划为 D1 推出一些重大全新功能,包括全球读复制,甚至更大的数据库,更多 Time Travel 功能,以便您对数据库进行分支;以及用于动态查询和/或从 Worker 中动态创建新数据库的全新 API。

// 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"

D1 的读复制会根据需要自动部署读副本,使数据更靠近您的用户:而且无需您启动或管理扩展,也不会遇到一致性(复制滞后)问题。让我们提前一窥 D1 即将推出的 Replication 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})
} 

如需进一步了解 D1 读复制的底层工作原理,欢迎阅读我们的深入探讨文章。如果您希望立即开始使用 D1 进行构建,请浏览我们的开发人员文档以创建您的第一个数据库。

Hyperdrive: 正式发布

我们在去年 9 月的生日周期间推出 Hyperdrive 的公测版,现已正式发布,换句话说,这个产品经过实战测试并已生产就绪。

如果您还不了解 Hyperdrive 是什么,它旨在使您已有的中心化数据库给人分布式的感觉。我们使用我们的全球网络来获得到您的数据库的更快路径,保持连接池处于最佳状态,并在尽可能接近用户的地方缓存您最频繁执行的查询。

重要的是,Hyperdrive 开箱就支持最流行的驱动程序和 ORM(对象关系映射)库,因而您无需重新学习或重写您的查询:

但是有关 Hyperdrive 的工作不会因为正式发布而停下来。接下来的几个月内,我们将为_另一个_部署最广泛的数据库引擎提供支持:MySQL。我们还将支持通过 Cloudflare TunnelMagic WAN 连接到专用网络(包括云 VPC 网络)内的数据库。除此之外,我们计划推出围绕失效和缓存策略的配置选项,以便您能就性能与数据新鲜度做出更细致的决策。

当我们考虑如何为 Hyperdrive 定价时,我们意识到对其收费似乎并不合适。毕竟,Hyperdrive 不仅带来显著的的性能提升,而且对于连接传统数据库引擎至关重要。如果没有 Hyperdrive,每个连接和查询数据库的请求都需要支付 6 次以上往返的延迟开销,这样做显然是不合理的。

因此,我们很高兴地宣布:对于任何订阅  Workers Paid 计划的开发人员,Hyperdrive 均免费使用。 这包括查询缓存和连接池,以及创建多个 Hyperdrive 的能力——以区分不同的应用程序、生产环境与测试环境,或提供不同的配置(例如,缓存与不缓存)。

Plan

Data points written

Read queries

Workers Paid

10 million included per month


+$0.25 per additional million

1 million included per month


+$1.00 per additional million

Workers Free

100,000 included per day

10,000 included per day

计划

每次查询的价格

连接池

Workers Paid

$0 

$0

要开始使用 Hyperdrive,请查看文档以了解如何连接您的现有数据库并开始从您的 Workers 进行查询。

Queues:从任何地方拉取

对于构建现代全栈应用而言,任务队列是越来越关键的一个部分。这正是我们最初宣布推出 Queues 公测时所考虑的因素。自那以后,我们一直在开发几个重要的 Queues 特性,并在本周推出其中的两个:基于拉取的消费者和新的消息传递控制。

任何支持HTTP的客户端现在都可以从一个队列中拉取消息:调用一个队列的新 /pull 端点以请求一批消息,并在成功处理每条消息(或每批消息)后调用 /ack 端点以进行确认:

基于拉取的消费者可以在任何地方运行,允许您与现有的传统云基础设施一同运行队列消费者。Cloudflare的内部团队很早就采用了这种方式,其中一个用例专注于从我们的 310+数据中心写入设备遥测数据到队列,并在一些在Kubernetes上运行的后台基础设施中进行消费。重要的是,我们全球分布的队列基础设施意味着消息保留在队列中,直到消费者准备好处理它们。

Queues 现在也支持推迟消息, 包括在发送到队列时和在标记消息以便重试时。这个功能适用于为将来对任务进行排队,以及如果上游 API 或基础设施有速率限制,需要您控制处理消息的速度,用于应用退避机制。

在未来几个月中,我们还将大幅提高每个队列的吞吐量,以便将 Queues 到正式发布。对我们来说,Queues 的 _高度_可靠性非常重要:丢失或掉落的消息意味着用户收不到订单确认邮件,密码重置通知,和/或他们的上传未被处理的反馈——每一种情况都会对用户产生影响且难以恢复。

Workers Analytics Engine 正式发布

Workers Analytics Engine 通过内置 API 从 Workers 写入数据点,并通过 SQL API 查询那些数据,提供了大规模的无限基数分析。

Workers Analytics Engine 背后是 Cloudflare 已经依赖多年、基于 ClickHouse 的系统。我们用它来观察自己服务的健康状况,捕获产品使用数据进行计费,以及回答有关特定客户使用模式的问题。几乎每一个对 Cloudflare 网络的请求都会向这个系统写入至少一个数据点。Workers Analytics Engine 让您可以使用同样的基础设施构建自己的自定义分析,同时我们为您管理那些困难的部分。

自从推出测试版以来, 从大型企业到诸如 Counterscale 的开源项目,开发人员都开始依赖 Workers Analytics Engine 来处理这些相同的用例以及其他。Workers Analytics Engine 已经以生产规模运行了数年,处理任务关键性工作负载 —— 但直到今天,我们还没有分享过任何关于定价的信息。

我们使 Workers Analytics Engine 的定价保持简单,基于两个指标:

  1. 写入数据点 —— 每次在一个 Worker 中调用 writeDataPoint(),都会算作写入一个数据点。每个数据点的成本相同 —— 与其他平台不同,我们不会因为增加维度或基数而额外收费,也不需要预测压缩数据点的大小和成本可能是—多少。

  2. 读取查询 —— 每次向 Workers Analytics Engine SQL API 发出 POST 请求,就算作一次读查询。每次查询的成本相同 —— 与其他平台不同,我们不会因为查询复杂性而额外收费,也不需要考虑每次查询将读取的数据行数。

Workers Free 和 Workers Paid 都将包括一定数量的数据点写入和读取查询,额外使用量的定价如下:

计划

写入数据点

读取查询

Workers Paid

包含 1000 万/月

+ 0.25 美元/每增加 100 万

包含 1000 万/月

+1.00 美元/每增加 100 万

Workers Free

包含 10 万/日

包含 1 万/日

根据这一定价,通过计算在 Worker 中调用函数的次数,以及向 HTTP API 端点发出请求的次数,即可回答 “Workers Analytics Engine 会花费我多少钱?” 的问题。计算简单明了,无需使用电子表格。

这一定价将在未来几个月内向所有人开放。在那以前,Workers Analytics Engine 继续免费提供使用。您今天就可以开始从 Worker 中写入数据点 ——只需要短短几分钟,不到 10 行代码,即可开始捕获数据。我们期待听到您的反馈。

本周才刚刚开始

欢迎关注我们将在 Developer Week 第二天为您准备的精彩内容。如有任何问题,或者希望展示您已经构建的炫酷作品,欢迎加入我们的 Discord 服务器。

我们保护整个企业网络,帮助客户高效构建互联网规模的应用程序,加速任何网站或互联网应用程序抵御 DDoS 攻击,防止黑客入侵,并能协助您实现 Zero Trust 的过程

从任何设备访问 1.1.1.1,以开始使用我们的免费应用程序,帮助您更快、更安全地访问互联网。要进一步了解我们帮助构建更美好互联网的使命,请从这里开始。如果您正在寻找新的职业方向,请查看我们的空缺职位
Developer Week开发人员Developer PlatformD1HyperdriveQueuesCloudflare Workers

在 X 上关注

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

相关帖子