Как стать автором
Обновить
1085.66
OTUS
Цифровые навыки от ведущих экспертов

Балансировка нагрузки с помощью AWS ELB

Время на прочтение6 мин
Количество просмотров13K
Всем привет! Уже сегодня стартует курс «AWS для разработчиков», в связи с чем мы провели соответствующий тематический вебинар, посвященный обзору ELB. Мы рассмотрели виды балансировщиков и создали несколько инстансов EC2 с балансировщиком. А также изучили другие примеры использования.




Прослушав вебинар, вы будете:

  • понимать, что такое AWS Load Balancing;
  • знать типы Elastic Load Balancer и его компоненты;
  • использовать AWS ELB в вашей практике.

Зачем вообще это уметь:

  • полезно, если планируете сдавать экзамены сертификации AWS;
  • это простой способ распределения нагрузки между серверами;
  • это простой способ добавления Lambda в ваш сервис (ALB).

Открытый урок провёл Ришат Терегулов, системный инженер в маркетинговой компании по разработке и поддержке сайтов.

Введение


Что такое Elastic Load Balancer, можно увидеть на диаграмме ниже, где представлен простейший пример:



Load Balancer принимает реквесты и распределяет их по инстансам. У нас есть один отдельный инстанс, есть Lambda-функции и есть AutoScaling-группа (группа серверов).

Типы AWS ELB


1. Рассмотрим основные типы:

Classic Load Balancer. Самый первый балансировщик от AWS, работает как на 4-м, так и на 7-м уровне OSI, поддерживаются HTTP, HTTPS, TCP и SSL. Он обеспечивает базовую балансировку нагрузки между несколькими инстансами Amazon EC2 и работает как на уровне запросов, так и на уровне соединения. Давайте его откроем (выделен серым):



Этот балансер считается устаревшим, поэтому рекомендуется к использованию лишь в отдельных случаях. Например, для приложений, которые были построены в сети EC2‑Classic. В принципе, нам никто не мешает его создать:



2. Network Load Balancer. Подходит для высокой нагрузки, работает на 4-м уровне OSI (можно использовать в EKS и ECS), поддерживаются TCP, UDP и TLS.

Network Load Balancer направляет трафик на целевые объекты в Amazon VPC и способен обрабатывать миллионы запросов в секунду при сверхнизких задержках. Кроме того, он оптимизирован для обработки моделей трафика с внезапной и изменяющейся нагрузкой.

3. Application Load Balancer. Работает на 7-м уровне, имеет поддержку Lambda, поддерживает правила на уровне заголовков и путей, поддерживаются HTTP и HTTPS.
Обеспечивает расширенную маршрутизацию запросов, ориентированную на доставку приложений, построенных на базе современных архитектур, в том числе микросервисы и контейнеры. Направляет трафик на целевые объекты в Amazon VPC, опираясь на содержимое запроса.

Для многих пользователей, Application Load Balancer первым делом заменил Classic Load Balancer, ведь TCP не так распространен в отличие от HTTP.

Создадим его тоже, в результате чего у нас уже будут два балансировщика нагрузки:



Компоненты Load Balance


Общие компоненты Load Balance (присущи всем балансировщикам):

  • Access Logging Policy
— ваши журналы доступа к ELB. Чтобы выполнить настройки, можно перейти в Description и выбрать кнопку «Edit attributes»:



Потом указываем S3Bucket — объектное хранилище Amazon:



  • Scheme
— внутренний или внешний балансировщик. Смысл в том, должен ли ваш LoadBalancer получить внешние адреса, чтобы быть доступным снаружи, или это может быть ваш внутренний балансировщик;

  • Security Groups
— контроль доступа к балансировщику. По сути это высокоуровневый файрвол.





  • Subnets
— подсети внутри вашей VPC (соответственно, и зоны доступности). Subnets указывается при создании. Если VPC ограничены регионом, то Subnets ограничен по зонам доступности. Когда создаете Load Balancer, лучше создавать его по крайней мере в двух подсетях (помогает, если с одной зоной доступности возникнут проблемы);

  • Listeners
— ваши протоколы балансировщика. Как уже было сказано ранее, для Classic Load Balancer это может быть HTTP, HTTPS, TCP и SSL, для Network Load Balancer — TCP, UDP и TLS, для Application Load Balancer — HTTP и HTTPS.

Пример для Classic Load Balancer:



А вот в Application Load Balancer мы видим и немного другой интерфейс, и в целом другую логику:



Компоненты Load Balancer v2 (ALB и NLB)


Теперь подробнее рассмотрим балансировщики 2-й версии Application Load Balancer и Network Load Balancer. У этих балансировщиков есть свои компонентные особенности. Например, появилось такое понятие, как Target Groups — инстансы (и функции). Благодаря этому компоненту, у нас появилась возможность указывать, на какой из Target Groups мы хотим направлять трафик.





Говоря простым языком, в Target Groups мы указываем инстансы, куда будет приходить трафик. Если в том же Classic Load Balancer вы просто сразу подключаете интенсы к балансировщику, то в Application Load Balancer вы сначала:

  • создаете Load Balancer;
  • создаете Target-группу;
  • направляете по нужным портам или правилам Load Balancer на нужные Target Groups;
  • в Target-группах назначаете инстансы.

Такая логика работы может показаться сложнее, но на самом деле она удобнее.

Следующий компонент — Listener rules (правила для маршрутизации). Это уже касается только Application Load Balancer. Если в Network Load Balancer вы просто создаете Listener, и он шлет трафик на конкретную Target-группу, то в Application Load Balancer всё веселее и удобнее.



Теперь скажем пару слов про следующий компонент — Elastic IP (статические адреса для NLB). Если правила для маршрутизации Listener rules касались только Application Load Balancer, то Elastic IP касается только Network Load Balancer.

Создадим Network Load Balancer:





И как раз в процессе создания мы увидим, что нам дается возможность выбрать Elastic IP:



Elastic IP предоставляет единственный IP-адрес, который можно связать с разными экземплярами EC2 во времени. Если экземпляр EC2 имеет Elastic IP-адрес и этот экземпляр завершен или остановлен, можно немедленно связать новый экземпляр EC2 с адресом Elastic IP. При этом ваше текущее приложение не прекратит работу, так как приложения видят всё тот же IP-адрес, даже если реальный EC2 изменился.

Вот еще один юз-кейс на тему того, зачем нужен Elastic IP. Смотрите, мы видим 3 IP-адреса, но они не навсегда здесь останутся:



Amazon меняет их с течением времени, может делать это каждые 60 секунд (но на практике, конечно, реже). Значит, IP-адреса могут поменяться. А в случае с Network Load Balancer вы как раз можете привязать айпишник и указывать его в ваших правилах, политиках и т. п.



Делаем выводы


ELB обеспечивает автоматическое распределение входящего трафика по нескольким целевым объектам (контейнеры, инстансы Amazon EC2, IP‑адреса и функции Lambda). ELB способен распределять трафик с меняющейся нагрузкой как в одной зоне доступности, так и между несколькими зонами доступности. Пользователь может выбрать из трёх типов балансировщиков, обеспечивающих и высокую доступность, и автомасштабирование, и неплохую защиту. Всё это важно для обеспечения отказоустойчивости ваших приложений.

Основные плюсы:

  • высокая доступность. В соглашении об обслуживании подразумевается 99,99 % доступности для балансировщика нагрузки. Например, несколько зон доступности гарантирует, что трафик будет обработан только исправными объектами. Собственно говоря, можно балансировать нагрузку и по всему региону, осуществляя перенаправление трафика на исправные целевые объекты в различных зонах доступности;
  • безопасность. ELB работает с Amazon VPC, предоставляя разные возможности по обеспечению безопасности — это и интегрированное управление сертификатами, и аутентификация пользователей, и расшифровка SSL/TLS. Всё вместе обеспечивает централизованное и гибкое управление настройками TLS;
  • эластичность. ELB может выполнять обработку внезапных изменений сетевого трафика. А глубокая интеграция с Auto Scaling дает приложению достаточно ресурсов, если меняется нагрузка, причем ручное вмешательство не потребуется;
  • гибкость. Можно применять IP‑адреса для маршрутизации запросов к целевым объектам ваших приложений. Это гарантирует гибкость при виртуализации целевых приложений, давая таким образом возможность размещать сразу несколько приложений на одном инстансе. Так как приложения могут использовать один сетевой порт и имеют отдельные группы безопасности, упрощается взаимодействие между приложениями, когда у нас архитектура, допустим, на основе микросервисов;
  • мониторинг и аудит. Можно осуществлять мониторинг приложений в реал-тайме, используя функции Amazon CloudWatch. Речь идёт о метриках, журналах, отслеживании запросов. Говоря простым языком, вы сможете выявлять проблемы и довольно точно определять узкие места производительности;
  • гибридная балансировка нагрузки. Возможность балансировки нагрузки между локальными ресурсами и AWS с применением одного и того же балансировщика упрощает миграцию либо расширение локальных приложений в облако. Упрощается и обработка отказов с применением облака.

Если интересуют подробности, вот еще пару полезных ссылок с официального сайта Amazon:

  1. Elastic Load Balancing.
  2. Возможности Elastic Load Balancing.
Теги:
Хабы:
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS