В Amazon Web Services (AWS) для управления приложениями и их масштабирования используются два ключевых сервиса: Elastic Load Balancer (ELB) и Auto Scaling Group (ASG). Хотя обе службы играют решающую роль в обеспечении высокой доступности и масштабируемости, они служат разным целям. В этой статье мы подробно рассмотрим каждую службу, изучим их различия и приведем примеры кода, иллюстрирующие их функциональность.
Эластичный балансировщик нагрузки (ELB)
Elastic Load Balancer — это служба, которая автоматически распределяет входящий трафик приложений по нескольким экземплярам в одной или нескольких зонах доступности. Это помогает достичь высокой доступности и отказоустойчивости за счет эффективной балансировки нагрузки трафика между несколькими экземплярами.
В AWS существует три типа эластичных балансировщиков нагрузки:
- Классический балансировщик нагрузки (CLB). Это устаревший балансировщик нагрузки, работающий на транспортном уровне (уровень 4) модели OSI. Он обеспечивает базовые возможности балансировки нагрузки.
- Балансировщик нагрузки приложений (ALB): ALB работает на уровне приложений (уровень 7) модели OSI. Он предоставляет расширенные функции, такие как маршрутизация на основе контента, маршрутизация на основе пути и поддержка нескольких приложений в одном балансировщике нагрузки.
- Балансировщик сетевой нагрузки (NLB): NLB работает на сетевом уровне (уровень 4) модели OSI. Он предназначен для обработки чрезвычайно высоких нагрузок сетевого трафика и обеспечивает сверхнизкую задержку.
Пример кода для создания балансировщика нагрузки приложения:
import boto3
elbv2_client = boto3.client('elbv2')
response = elbv2_client.create_load_balancer(
Name='my-application-lb',
Subnets=['subnet-12345', 'subnet-67890'],
SecurityGroups=['sg-123456'],
Type='application',
Scheme='internet-facing',
IpAddressType='ipv4'
)
print(response['LoadBalancers'][0]['LoadBalancerArn'])
Группа автоматического масштабирования (ASG)
Группа автоматического масштабирования – это служба, которая автоматически регулирует количество экземпляров в группе на основе заранее определенных условий. Это помогает поддерживать доступность и масштабируемость приложений за счет автоматического добавления или удаления экземпляров в зависимости от спроса.
Пример кода для создания группы автоматического масштабирования:
import boto3
autoscaling_client = boto3.client('autoscaling')
response = autoscaling_client.create_auto_scaling_group(
AutoScalingGroupName='my-asg',
LaunchConfigurationName='my-launch-config',
MinSize=1,
MaxSize=5,
DesiredCapacity=2,
VPCZoneIdentifier='subnet-12345',
HealthCheckType='EC2',
HealthCheckGracePeriod=300
)
print(response['AutoScalingGroupARN'])
Ключевые различия между ELB и ASG
- Цель: ELB отвечает за распределение входящего трафика между несколькими экземплярами, а ASG фокусируется на автоматическом масштабировании количества экземпляров в зависимости от спроса.
- Уровень эксплуатации: ELB работает на транспортном или прикладном уровне, в зависимости от типа, а ASG работает на уровне инфраструктуры.
- Поведение масштабирования: ELB не масштабирует экземпляры; он только распределяет трафик. ASG обеспечивает масштабирование экземпляров на основе предварительно настроенных политик.
- Связанные ресурсы: ELB связан с экземплярами, а ASG — с конфигурациями запуска или шаблонами запуска.
- Мониторинг работоспособности: ELB активно отслеживает работоспособность экземпляров и соответствующим образом маршрутизирует трафик, а ASG отслеживает работоспособность экземпляров, чтобы определить необходимость действий по масштабированию.