INTEGRITY Документация

Постепенные развёртывания

Постепенные развёртывания позволяют поэтапно внедрять новые версии вашего Worker, распределяя трафик между версиями. Вместо того чтобы сразу переключать весь трафик на новую версию, вы можете направить часть запросов на новую версию, а остальные продолжат обрабатываться предыдущей версией.

Gradual Deployments

С помощью постепенных развёртываний вы можете:

Используйте постепенные развёртывания

Следующий раздел на примере показывает, как использовать gradual deployments.

Через Wrangler

1. Создайте и разверните новый Worker

Создайте новый "Hello World" Worker с помощью create-cloudflare CLI (C3) и разверните его.

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

Ответьте yes или no с использованием TypeScript. Ответьте yes к развёртыванию вашего приложения. Это первая версия вашего Worker.

2. Создание новой версии Worker

Измените код Worker, изменив Response содержимое и загрузить Worker с помощью wrangler versions upload команда.

npx wrangler versions upload

Это создаст новую версию Worker, которая не будет развернута автоматически.

3. Создание нового развёртывания

Используйте wrangler versions deploy команду, чтобы создать новое развёртывание, которое распределяет трафик между двумя версиями. Следуйте интерактивным подсказкам и укажите нужный процент для каждой версии.

npx wrangler versions deploy

4. Протестируйте раздельное развёртывание

Выполните команду cURL для вашего Worker, чтобы протестировать разделённое развёртывание.

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

Вы должны увидеть 10 ответов. Ответы будут отличаться в зависимости от процентных значений, заданных в шаг №3.

Также можно указать конкретную версию с помощью переопределения версии.

5. Настройте развёртывание новой версии на 100%

Запустите wrangler versions deploy снова и следуйте интерактивным подсказкам. Выберите новую версию и установите для нее 100%.

npx wrangler versions deploy

Через панель управления Cloudflare

  1. На панели управления Cloudflare перейдите к разделу Workers & Pages страницу.

    Перейдите в Workers & Pages ↗
  2. Выберите Создать приложение > Hello World шаблон > разверните Worker.

  3. После развертывания Worker перейдите в онлайн-редактор кода через Изменить код. Измените код Worker (поменяйте Response содержимого).

  4. Чтобы сохранить изменения без развёртывания, выберите стрелка вниз рядом с Развернуть > Save. Это создаст новую версию вашего Worker.

  5. Перейдите в Развёртывания и выберите Продвижение развёртывания чтобы разделить трафик между двумя версиями.

Рассогласование версий

Так как при постепенном развёртывании несколько версий Worker одновременно обслуживают трафик, клиенты и сервисы могут взаимодействовать более чем с одной версией, что приводит к ошибкам или непоследовательному поведению. Это называется рассогласование версий.

Рассогласование версий в пределах одного Worker

По умолчанию каждый запрос маршрутизируется независимо к определённой версии на основе заданных процентных долей. Это означает, что последовательные запросы от одного пользователя, включая перезагрузку страницы и загрузку ресурсов, могут обрабатываться разными версиями.

Если вы хотите закрепить пользователя за одной версией на время постепенного развёртывания, вы можете использовать привязка к версии.

Рассогласование версий между Workers

Когда один Worker вызывает другой посредством привязка к сервису, эти два Worker могут находиться на разных этапах собственного постепенного развёртывания. Worker A (на своей новой версии) может вызвать Worker B, но запрос попадёт на старую версию Worker B, где контракт API отличается.

Вы можете использовать переопределения версии чтобы закрепить нижестоящий Worker на определенной версии при выполнении подзапроса.

Durable Objects

Постепенные развёртывания работают иначе для Durable Objects потому что одновременно может выполняться только одна версия каждого Durable Object. См. Gradual Deployments с Durable Objects подробнее о назначении версий, гарантиях и миграциях.

Observability

При использовании поэтапных развёртываний вы можете привязывать вызовы Workers к конкретной версии, чтобы отслеживать влияние развёртывания новых версий на систему.

Logpush

Новый ScriptVersion объект доступен в Workers Logpush. 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>"
	}
}

Runtime-привязка

Используйте Привязка метаданных версии для доступа к ID версии или тегу версии в вашем Worker.

Лимиты

Лимит развертываний

Постепенный деплой можно создать только из последних 100 загруженных версий Worker.