У нас есть кластер ECS, выполняющий одну задачу в Fargate. Мы хотим настроить развертывание так, чтобы у нас не было простоев, гарантируя при этом, что трафик направляется только к одной задаче за раз.
Установив desiredCount
на 1, minimumHealthyPercent
на 100% и maximumPercent
на 200%, ECS запустит одну новую задачу без предварительной остановки существующей задачи. Это дает нам нулевое время простоя.
Однако как обрабатывается трафик во время этого процесса? Когда ECS запускает новую задачу, прекратит ли она отправлять трафик существующей задаче перед тем, как направить трафик на новую (что является нашим желаемым поведением)? Или ECS будет маршрутизировать трафик к обеим задачам до тех пор, пока старая задача не будет остановлена (чего мы хотим избежать)?
ECS не обрабатывает маршрутизацию трафика в этом сценарии, маршрутизацией трафика занимается ваш балансировщик нагрузки. По умолчанию балансировщик нагрузки выполняет циклическую маршрутизацию трафика. Как только в целевой группе станут доступны два экземпляра задачи, балансировщик нагрузки будет отправлять каждый второй запрос в другой экземпляр вашей задачи. Это означает, что в течение короткого времени во время развертывания оба экземпляра задачи ECS будут обрабатывать трафик.
Алгоритмы маршрутизации, доступные для настройки в вашей целевой группе, описаны здесь. Как видите, все они представляют собой некую форму распределения запросов по всем доступным целям. Таким образом, изменение алгоритма маршрутизации не поможет вам достичь желаемой цели.
Вы можете попробовать включить прикрепленные сеансы для целевой группы. Это предотвратит распространение запросов одного сеанса пользователя по обоим экземплярам задачи, но при этом все существующие сеансы будут привязаны к старому экземпляру задачи ECS до тех пор, пока этот экземпляр не будет отменен (когда ECS начнет процесс завершения работы для этой задачи).
Если вы установите для параметра Задержка отмены регистрации целевой группы значение 0
, она должна (теоретически) отменить регистрацию старого экземпляра задачи и прекратить отправлять на него трафик, как только новый экземпляр пройдет проверку работоспособности Порог работоспособности Посчитайте. Я думаю, что это самое близкое к достижению заявленной вами цели: «прекратить отправку трафика на существующую задачу, прежде чем направлять трафик на новую».