Автоматическое масштабирование сервисов ECS и балансировка нагрузки
Подключите ALB к сервисам ECS для маршрутизации на основе путей и настройте автоматическое масштабирование сервисов в ответ на показатели CPU или пользовательские метрики CloudWatch.
«Автоматическое масштабирование сервисов ECS и балансировка нагрузки» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Необходимость автоматического масштабирования сервиса ECS
Фиксированное желаемое количество задач в сервисе ECS не может реагировать на колебания трафика: либо Вы выделяете слишком много ресурсов и тратите деньги впустую, либо слишком мало и снижаете производительность. Автоматическое масштабирование сервиса ECS автоматически изменяет желаемое количество задач в зависимости от метрик CloudWatch. В основе используется сервис Application Auto Scaling — тот же механизм, который применяется для DynamoDB, Aurora и ElastiCache. Автоматическое масштабирование сервиса ECS поддерживает политики отслеживания цели, пошагового и планового масштабирования.
Регистрация ECS как масштабируемой цели
Прежде чем добавлять политики масштабирования, зарегистрируйте сервис ECS как масштабируемую цель в Application Auto Scaling. Укажите минимальное и максимальное количество задач, имя кластера и имя сервиса в качестве идентификатора ресурса. Это задаёт границы, в пределах которых будет работать автоматическое масштабирование. Минимальное количество гарантирует наличие базовой ёмкости, а максимальное не позволяет неконтролируемому масштабированию исчерпать ёмкость Fargate или ресурсы экземпляров EC2.
aws application-autoscaling register-scalable-target \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id 'service/MyAppCluster/MyAppService' \
--min-capacity 2 \
--max-capacity 20Отслеживание цели для сервисов ECS
Target Tracking — рекомендуемая политика автоматического масштабирования для большинства сервисов ECS. Наиболее распространённая целевая метрика — ECSServiceAverageCPUUtilization: задайте цель на уровне 50–70 %, и ECS будет добавлять или удалять задачи, поддерживая этот уровень загрузки CPU. Ещё одна эффективная метрика — количество запросов ALB на цель: отслеживайте число запросов ALB на задачу и масштабируйте сервис, поддерживая целевую частоту запросов на экземпляр. AWS автоматически выполняет масштабирование и уменьшение масштаба с подходящими периодами ожидания.
aws application-autoscaling put-scaling-policy \
--service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount \
--resource-id 'service/MyAppCluster/MyAppService' \
--policy-name 'ECSTargetTracking' \
--policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration '{
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ECSServiceAverageCPUUtilization"
},
"TargetValue": 60.0,
"ScaleOutCooldown": 60,
"ScaleInCooldown": 300
}'Маршрутизация ALB к сервисам ECS
Подключение Application Load Balancer (ALB) к сервису ECS распределяет трафик HTTP/HTTPS между всеми работающими задачами. Целевая группа ALB регистрирует IP-адрес каждой задачи (для Fargate/awsvpc) или порт контейнера (для режима bridge). ECS автоматически регистрирует новые задачи в целевой группе при их запуске и удаляет их регистрацию при остановке. ALB выполняет проверки работоспособности каждой задачи; неисправные задачи переводятся в режим завершения обслуживания (соединения корректно закрываются), прежде чем сервис их остановит.
Маршрутизация по путям для нескольких сервисов
Один из эффективных подходов — направлять разные пути URL к разным сервисам ECS с помощью маршрутизации ALB по путям. Один ALB с одним прослушивателем HTTPS может направлять: /api/orders/* в сервис ECS Orders, /api/users/* в сервис ECS Users, /api/products/* в сервис ECS Products — каждый из них работает в собственном сервисе ECS с независимым масштабированием. Это устраняет необходимость в отдельных балансировщиках нагрузки для каждого микросервиса, снижает затраты и упрощает управление DNS.
# ALB listener rule for ECS microservice routing
aws elbv2 create-rule \
--listener-arn 'arn:aws:elasticloadbalancing:...' \
--priority 10 \
--conditions '[{"Field": "path-pattern", "Values": ["/api/orders/*"]}]' \
--actions '[{"Type": "forward", "TargetGroupArn": "arn:...OrdersTargetGroup"}]'Завершение соединений и задержка удаления регистрации
Когда задача ECS завершается (при уменьшении масштаба или развёртывании), ALB помечает её как завершающую обслуживание и прекращает направлять к ней новые запросы, позволяя текущим запросам завершиться. Задержка удаления регистрации (по умолчанию 300 секунд, настраивается в диапазоне 0–3600 секунд) — это время, в течение которого ALB ожидает перед принудительным закрытием соединений. Для ECS с короткими запросами задайте меньшую задержку удаления регистрации (30–60 секунд), чтобы ускорить развёртывания и операции уменьшения масштаба. Для долгих соединений (WebSocket, загрузка файлов) оставьте более высокую задержку.
# Set deregistration delay on target group to 60 seconds
aws elbv2 modify-target-group-attributes \
--target-group-arn 'arn:aws:elasticloadbalancing:...' \
--attributes 'Key=deregistration_delay.timeout_seconds,Value=60'Пользовательские метрики для масштабирования ECS
Помимо CPU и памяти, публикуйте из приложения пользовательские метрики CloudWatch (глубина очереди, активные сеансы, ключевые бизнес-показатели) и используйте их для управления масштабированием. Например, если каждая задача ECS может одновременно обрабатывать 50 сообщений очереди, публикуйте глубину очереди SQS как пользовательскую метрику и создайте политику отслеживания цели со значением 50 сообщений на задачу. Так масштабирование напрямую определяется бизнес-логикой, а не инфраструктурными метриками, которые могут не отражать нагрузку приложения.
aws application-autoscaling put-scaling-policy \
--policy-name 'QueueDepthScaling' \
--policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration '{
"CustomizedMetricSpecification": {
"MetricName": "QueueDepth",
"Namespace": "MyApp",
"Statistic": "Average"
},
"TargetValue": 50.0
}' \
--resource-id 'service/MyCluster/WorkerService' \
--scalable-dimension ecs:service:DesiredCount \
--service-namespace ecsЗащита задач от уменьшения масштаба
Как и автоматическое масштабирование EC2, ECS поддерживает защиту задачи от уменьшения масштаба. Работающая задача может через API ECS установить для себя флаг защиты от уменьшения масштаба, чтобы не завершиться во время уменьшения масштаба при обработке критически важной работы. Это полезно для задач ECS, выполняющих роль обработчиков SQS: обработчик, только что извлёкший длинную задачу из очереди, может защитить себя, завершить работу, а затем снять защиту. Без этого уменьшение масштаба может завершить задачу в процессе обработки, что приведёт к дублированию работы или потере данных.
# From inside the ECS task container
curl -X PUT 'http://169.254.170.2/v3/tasks/scale-in-protection' \
-H 'Content-Type: application/json' \
-d '{"ProtectionEnabled": true, "ExpiresInMinutes": 60}'Метрики масштабирования: CPU, память или ALB
Тщательно выбирайте метрику масштабирования. Загрузка CPU используется по умолчанию и подходит для задач, ограниченных вычислительными ресурсами. Загрузка памяти (ECSServiceAverageMemoryUtilization) полезна для приложений, ограниченных объёмом памяти, но увеличение доступной памяти требует добавления задач. Если задача ограничена объёмом памяти на задачу, а не количеством одновременно обрабатываемых запросов, лучше изменить распределение памяти в определении задачи. Количество запросов ALB на цель напрямую связано с пользовательским опытом и является наиболее практичной метрикой для веб-API: масштабируйте сервис на основе фактической частоты запросов на задачу.
Автоматический выключатель развёртывания ECS
Автоматический выключатель развёртывания ECS автоматически обнаруживает неудачные развёртывания и выполняет откат к последней стабильной версии. Без него неудачное развёртывание (контейнер, не проходящий проверки работоспособности) заставило бы ECS бесконечно пытаться запускать новые задачи. Если выключатель включён и определённая доля недавно запущенных задач не проходит проверки работоспособности в течение окна обнаружения, ECS помечает развёртывание как FAILED и автоматически выполняет откат к предыдущей версии определения задачи. Это предотвращает длительное ухудшение работы сервиса из-за неудачных развёртываний.
aws ecs create-service \
--cluster 'MyAppCluster' \
--service-name 'MyAppService' \
--task-definition 'myapp-task:5' \
--desired-count 3 \
--deployment-configuration '{
"deploymentCircuitBreaker": {
"enable": true,
"rollback": true
},
"minimumHealthyPercent": 100,
"maximumPercent": 200
}'Архитектура от начала до конца: ECS + ALB + автоматическое масштабирование
Готовая для промышленной эксплуатации архитектура контейнеризированного веб-API: Route 53 разрешает домен в DNS-имя ALB; ALB завершает HTTPS (сертификат ACM), применяет правила WAF и направляет запросы в целевую группу сервиса ECS; задачи Fargate в частных подсетях трёх AZ обрабатывают запросы; автоматическое масштабирование сервиса ECS с отслеживанием цели по количеству запросов ALB на цель изменяет количество задач от 2 до 50; задачи подключаются к RDS Aurora и ElastiCache в частных подсетях. Все журналы передаются в журналы CloudWatch; метрики используются для панелей мониторинга и оповещений CloudWatch.
Быстрая проверка
Проверьте, насколько хорошо Вы поняли концепции AWS Solutions Architect (SAA-C03) из этого урока.
Итоги урока
В этом уроке Вы узнали, что автоматическое масштабирование сервиса ECS использует Application Auto Scaling с отслеживанием цели (по CPU, запросам ALB или пользовательским метрикам), чтобы изменять количество задач в заданных минимальных и максимальных границах; маршрутизация ALB по путям позволяет одному балансировщику обслуживать несколько микросервисов ECS, направляя пути URL в разные целевые группы; а автоматический выключатель развёртывания автоматически откатывает неудачные развёртывания до того, как они вызовут длительное ухудшение работы сервиса. На этом завершается модуль по ECS и контейнерам. Далее мы рассмотрим Amazon EKS для Kubernetes в AWS.
Часто задаваемые вопросы
Урок «Автоматическое масштабирование сервисов ECS и балансировка нагрузки» бесплатный?
Да — полный текст урока «Автоматическое масштабирование сервисов ECS и балансировка нагрузки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Чему я научусь в уроке «Автоматическое масштабирование сервисов ECS и балансировка нагрузки»?
Подключите ALB к сервисам ECS для маршрутизации на основе путей и настройте автоматическое масштабирование сервисов в ответ на показатели CPU или пользовательские метрики CloudWatch. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?
Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Автоматическое масштабирование сервисов ECS и балансировка нагрузки»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?
Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Кластеры ECS, определения задач и сервисы
- Тип запуска EC2 и Fargate
- ECR: хранение и извлечение образов контейнеров
- Автоматическое масштабирование сервисов ECS и балансировка нагрузки