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

С Durable Objects

Чтобы предоставить глобальная уникальность, существует только одна версия каждого Durable Object может выполняться одновременно. Это означает, что для Durable Objects постепенные развёртывания работают несколько иначе.

Когда вы создаёте новое поэтапное развёртывание для Worker с Durable Objects, каждому Durable Object назначается версия Worker в соответствии с процентными долями, заданными в развёртывание. Эта версия не изменится, пока вы не создадите новый деплой.

Gradual Deployments Durable Objects

Пример

В этом примере предполагается, что вы уже создали три экземпляра Durable Object с именами "foo", "bar" и "baz".

Ваш Worker сейчас работает на версии, которую мы назовём версией «A», и вы хотите постепенно развернуть новую версию «B» этого Worker.

Ниже показано, как могут изменяться версии ваших Durable Objects по мере продвижения постепенного развёртывания:

Конфигурация развертывания "foo" "bar" "baz"
Версия A: 100%
A A A
Версия B: 20%
Версия A: 80%
B A A
Версия B: 50%
Версия A: 50%
B B A
Версия B: 100%
B B B

Это всего лишь пример, поэтому версии, присвоенные вашим Durable Objects, могут отличаться. Тем не менее гарантируется следующее:

Изменения жизненного цикла классов Durable Object

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

Изменения жизненного цикла Durable Object можно развернуть с помощью следующей команды:

npx wrangler deploy

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

Чтобы понять, почему изменения жизненного цикла Durable Object являются атомарными операциями, рассмотрим гипотетический пример постепенного развёртывания удаления класса. Если бы удаление применилось к 50% инстансов Durable Object, запросы Workers к этим инстансам завершались бы ошибкой, поскольку инстансы уже были бы удалены.

Чтобы избежать ошибок, необходимо заранее развернуть версию Worker, не зависящую ни от одного из удаляемых Durable Objects. После этого можно развернуть удаление класса, не затрагивая трафик, и делать это постепенно нет смысла.