← Cloudflare Workers / workers / versions-and-deployments
Постепенные развёртывания
Постепенные развёртывания позволяют поэтапно внедрять новые версии вашего Worker, распределяя трафик между версиями. Вместо того чтобы сразу переключать весь трафик на новую версию, вы можете направить часть запросов на новую версию, а остальные продолжат обрабатываться предыдущей версией.
С помощью постепенных развёртываний вы можете:
- Постепенно переключайте трафик на более новую версию своего Worker
- Отслеживайте частоту ошибок и исключений в разных версиях с помощью наблюдаемость инструментарий
- Откат к предыдущей стабильной версии, если вы заметите проблемы
Используйте постепенные развёртывания
Следующий раздел на примере показывает, как использовать 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 deploy4. Протестируйте раздельное развёртывание
Выполните команду 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
-
На панели управления Cloudflare перейдите к разделу Workers & Pages страницу.
Перейдите в Workers & Pages ↗ -
Выберите Создать приложение > Hello World шаблон > разверните Worker.
-
После развертывания Worker перейдите в онлайн-редактор кода через Изменить код. Измените код Worker (поменяйте
Responseсодержимого). -
Чтобы сохранить изменения без развёртывания, выберите стрелка вниз рядом с Развернуть > Save. Это создаст новую версию вашего Worker.
-
Перейдите в Развёртывания и выберите Продвижение развёртывания чтобы разделить трафик между двумя версиями.
Рассогласование версий
Так как при постепенном развёртывании несколько версий 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.