Алгоритм развертывания
Алгоритм развертывания переводит группу виртуальных машин из одного состояния в другое короткими итеративными изменениями. В каждой итерации учитываются ограничения, заданные пользователем.
Одна из особенностей алгоритма развертывания — перед удалением и обновлением через вызов update виртуальная машина всегда сначала останавливается отдельным вызовом stop. Удаление или обновление выполняется следующей итерацией.
Обновление атрибутов, не требующих остановки виртуальной машины (например, поля description
), производится одновременно для всех запущенных машин, так как это не нарушает никаких ограничений.
Примечание
Если во время остановки виртуальной машины пользователь откатит настройки группы к предыдущим значениям, алгоритм может перезапустить виртуальную машину.
Пример работы алгоритма
Предположим, что есть группа из двух машин. Нужно расширить ее до трех, обновив при этом две старые машины на новую спецификацию. Ограничение max_expansion = 1
позволяет создавать дополнительную машину во время развертывания.
Поведение алгоритма:
-
Создаются и запускаются две новые виртуальные машины.
В этот момент в группе будут находиться две старые работающие машины и две новые.
-
Останавливается одна из старых машин вызовом
stop
в Compute Cloud. Одна старая машина и две новых запущены, одна старая остановлена.Целевой размер группы — 3, значит одновременно должны работать не менее трех машин. Поэтому вторую старую машину в этот момент останавливать нельзя.
-
Старая машина обновляется вызовом
update
в Compute Cloud, если это допустимо, или удаляется и создается заново.Будем считать, что отработал более простой сценарий — вызов
update
. Когда обновление завершится, в группе будет одна старая работающая машина, одна новая остановленная и две новых работающих. -
Запускается обновленная остановленная машина. Теперь в группе одна старая работающая машина и три новых работающих машины.
-
Удаляется оставшаяся старая машина.
Алгоритм отработал в соответствии с ограничениями: в группе всегда было три работающих виртуальные машины.