跳转到内容
搜索文档

渐进式部署

最后更新 查看 MarkdownAgent 设置

渐进式部署允许你通过在版本之间拆分流量,逐步部署 Worker 的新版本。你可以将一定比例的请求路由到新版本,而不是一次性将所有流量切换到新版本,其余请求继续由上一版本处理。

渐进式部署

使用渐进式部署,你可以:

使用渐进式部署

以下部分通过示例引导你使用渐进式部署。

通过 Wrangler

1. 创建并部署新 Worker

使用 create-cloudflare CLI (C3) 创建新的 "Hello World" Worker 并部署。

npm create cloudflare@latest -- <NAME> -- --type=hello-world

回答是否使用 TypeScript 的 yes 或 no。回答 yes 部署应用程序。这是 Worker 的第一个版本。

2. 创建 Worker 的新版本

通过更改 Response 内容编辑 Worker 代码,并使用 wrangler versions upload 命令上传 Worker。

npx wrangler versions upload

这将创建 Worker 的新版本,但不会自动部署。

3. 创建新部署

使用 wrangler versions deploy 命令创建在两个版本之间拆分流量的新部署。按照交互式提示为每个版本选择所需的百分比。

npx wrangler versions deploy

4. 测试拆分部署

在 Worker 上运行 cURL 命令以测试拆分部署。

for j in {1..10}
do
    curl -s https://$WORKER_NAME.$SUBDOMAIN.workers.dev
done

你应该看到 10 个响应。响应将根据步骤 #3 中配置的百分比而有所不同。

你也可以使用版本覆盖(version overrides)定位特定版本。

5. 将新版本设置为 100% 部署

再次运行 wrangler versions deploy 并按照交互式提示操作。选择新版本并将其设置为 100%。

npx wrangler versions deploy

通过 Cloudflare 仪表板

  1. 在 Cloudflare 仪表板中,前往 Workers & Pages 页面。

    Go to Workers & Pages ↗
  2. 选择 Create application(创建应用程序) > Hello World 模板 > 部署 Worker。

  3. Worker 部署后,通过 Edit code(编辑代码) 进入在线代码编辑器。编辑 Worker 代码(更改 Response 内容)。

  4. 要保存更改而不部署,选择 Deploy(部署) 旁边的 down arrow(向下箭头) > Save(保存)。这将创建 Worker 的新版本。

  5. 前往 Deployments(部署) 并选择 Promote deployment(提升部署),在两个版本之间创建拆分。

版本偏差

由于渐进式部署意味着 Worker 的多个版本同时处理流量,客户端和服务可能以产生错误或不一致行为的方式与多个版本交互。这称为版本偏差(version skew)

Worker 内的版本偏差

默认情况下,每个请求根据配置的百分比独立路由到某个版本。这意味着来自同一用户的连续请求——包括页面重新加载和资源获取——可能由不同版本处理。

如果你想在渐进式部署期间将用户固定到一致的版本,可以使用版本亲和性(version affinity)

Worker 之间的版本偏差

当一个 Worker 通过 service binding 调用另一个 Worker 时,两个 Worker 可能处于各自渐进式部署的不同阶段。Worker A(在其新版本上)可能调用 Worker B,但请求落在 Worker B 的旧版本上,其中 API 契约不同。

你可以使用版本覆盖(version overrides)在子请求期间将下游 Worker 固定到特定版本。

Durable Objects

Durable Objects 的渐进式部署工作方式不同,因为每个 Durable Object 同时只能运行一个版本。有关版本分配、保证和迁移的详细信息,请参阅与 Durable Objects 配合使用的渐进式部署

可观测性

使用渐进式部署时,你可能希望将 Workers 调用归因于特定版本,以便了解部署新版本的影响。

Logpush

Workers Logpush 中提供了新的 ScriptVersion 对象。ScriptVersion 目前只能通过 Logpush API 添加。示例 API 调用:

curl -X POST 'https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/logpush/jobs' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"name": "workers-logpush",
"output_options": {
    "field_names": ["Event", "EventTimestampMs", "Outcome", "Logs", "ScriptName", "ScriptVersion"]
},
"destination_conf": "<DESTINATION_URL>",
"dataset": "workers_trace_events",
"enabled": true
}'| jq .

ScriptVersion 是具有以下结构的对象:

{
	"ScriptVersion": {
		"id": "<UUID>",
		"message": "<MESSAGE>",
		"tag": "<TAG>"
	}
}

运行时绑定

使用版本元数据绑定(version metadata binding)在 Worker 中访问版本 ID 或版本标签。

限制

部署限制

你只能使用 Worker 最近上传的 100 个版本创建渐进式部署。

这篇文档对您有帮助吗?