跳至主要内容

Deno Deploy 上的 KV

Deno KV 目前处于测试阶段

Deno KV 和相关的云原生 API(如队列和 cron)目前处于实验阶段,并且可能会发生变化。虽然我们尽力确保数据持久性,但数据丢失是可能的,尤其是在 Deno 更新期间。

使用 KV 的 Deno 程序在启动程序时需要 --unstable 标志,如下所示

deno run -A --unstable my_kv_code.ts

Deno Deploy 现在提供了一个内置的无服务器键值数据库,称为 Deno KV。

此外,Deno KV 在 Deno 本身中可用,使用 SQLite 作为其后端。此功能自 Deno v1.32 起使用 --unstable 标志即可使用。了解更多关于 Deno KV 的信息。

一致性

默认情况下,Deno KV 是一个强一致性数据库。它提供最严格的强一致性形式,称为外部一致性,这意味着

  • 可串行化:这是事务的最高隔离级别。它确保多个事务的并发执行产生的系统状态与这些事务按顺序一个接一个执行时相同。换句话说,可串行化事务的最终结果等效于这些事务的某个顺序。
  • 线性化:这种一致性模型保证操作(如读写)看起来是瞬时的,并在实时发生。一旦写入操作完成,所有后续的读取操作将立即返回更新的值。线性化确保操作的强实时排序,使系统更可预测,更容易推理。

同时,您可以通过在单个读取操作上设置consistency: "eventual"选项来选择放松一致性约束。此选项允许系统从全局副本和缓存中提供读取,以实现最小的延迟。

以下是我们在顶级区域观察到的延迟数据

区域延迟(最终一致性)延迟(强一致性)
北弗吉尼亚州 (us-east4)7ms7ms
法兰克福 (europe-west3)7ms94ms
荷兰 (europe-west4)13ms95ms
加利福尼亚州 (us-west2)72ms72ms
香港 (asia-east2)42ms194ms

分布式队列

无服务器分布式队列在 Deno Deploy 上可用。有关更多详细信息,请参阅Deno Deploy 上的队列

从 Deno Deploy 之外连接到托管数据库

您可以从 Deno Deploy 之外的 Deno 应用程序连接到您的 Deno Deploy KV 数据库。要打开托管数据库,请将DENO_KV_ACCESS_TOKEN环境变量设置为 Deno Deploy 个人访问令牌,并将数据库的 URL 提供给Deno.openKv

const kv = await Deno.openKv(
"https://api.deno.com/databases/<database-id>/connect",
);

请查看文档,了解连接到远程 KV 数据库的协议规范

数据分布

Deno KV 数据库至少复制到 6 个数据中心,跨越 3 个区域(美国、欧洲和亚洲)。写入操作提交后,其变更会持久存储在主区域内的至少两个数据中心。异步复制通常在 10 秒内将这些变更传输到另外两个区域。

该系统旨在承受大多数数据中心级别的故障,而不会出现停机或数据丢失。恢复点目标 (RPO) 和恢复时间目标 (RTO) 有助于量化系统在各种故障模式下的弹性。RPO 代表以时间衡量的最大可接受数据丢失量,而 RTO 代表故障后将系统恢复到正常运行状态所需的最大可接受时间。

  • 主区域内丢失一个数据中心:RPO=0(无数据丢失),RTO<5s(系统在 5 秒内恢复)
  • 副本区域内丢失任意数量的数据中心:RPO=0,RTO<5s
  • 主区域内丢失两个或更多数据中心:RPO<60s(数据丢失时间少于 60 秒)