Всем привет! Уже сегодня стартует курс «AWS для разработчиков», в связи с чем мы провели соответствующий тематический вебинар, посвященный обзору ELB. Мы рассмотрели виды балансировщиков и создали несколько инстансов EC2 с балансировщиком. А также изучили другие примеры использования.
![](https://habrastorage.org/r/w780q1/webt/fw/3o/zd/fw3ozdm4ol2iofjhqg00bbjan_i.jpeg)
Прослушав вебинар, вы будете:
Зачем вообще это уметь:
Открытый урок провёл Ришат Терегулов, системный инженер в маркетинговой компании по разработке и поддержке сайтов.
Что такое Elastic Load Balancer, можно увидеть на диаграмме ниже, где представлен простейший пример:
![](https://habrastorage.org/r/w1560/webt/ee/mf/og/eemfoghntwhdpx2qit-hr201zvu.png)
Load Balancer принимает реквесты и распределяет их по инстансам. У нас есть один отдельный инстанс, есть Lambda-функции и есть AutoScaling-группа (группа серверов).
1. Рассмотрим основные типы:
Classic Load Balancer. Самый первый балансировщик от AWS, работает как на 4-м, так и на 7-м уровне OSI, поддерживаются HTTP, HTTPS, TCP и SSL. Он обеспечивает базовую балансировку нагрузки между несколькими инстансами Amazon EC2 и работает как на уровне запросов, так и на уровне соединения. Давайте его откроем (выделен серым):
![](https://habrastorage.org/r/w1560/webt/4z/dp/pf/4zdppffv2an4rahetxvpianlwi0.png)
Этот балансер считается устаревшим, поэтому рекомендуется к использованию лишь в отдельных случаях. Например, для приложений, которые были построены в сети EC2‑Classic. В принципе, нам никто не мешает его создать:
![](https://habrastorage.org/r/w1560/webt/f9/8t/le/f98tleb38xa1s9lsoqr48hqbazy.png)
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.
Создадим его тоже, в результате чего у нас уже будут два балансировщика нагрузки:
![](https://habrastorage.org/r/w1560/webt/vv/rl/g2/vvrlg2tlsfnzsynbw5yk5b8vx1e.png)
Общие компоненты Load Balance (присущи всем балансировщикам):
![](https://habrastorage.org/r/w1560/webt/0-/oe/pp/0-oeppctnqw1b80pv33bftgdjky.png)
Потом указываем S3Bucket — объектное хранилище Amazon:
![](https://habrastorage.org/r/w1560/webt/lu/u_/qu/luu_que2nxptimlvv9whned6mb0.png)
![](https://habrastorage.org/r/w1560/webt/h-/ue/bk/h-uebkvlii2jrqaqdvbv8hwclag.png)
![](https://habrastorage.org/r/w1560/webt/e5/bp/lz/e5bplz0bmcjfntzhbe2xsis2msw.png)
Пример для Classic Load Balancer:
![](https://habrastorage.org/r/w1560/webt/kn/qr/t9/knqrt9xhgcvd-riowcwaob2ge1m.png)
А вот в Application Load Balancer мы видим и немного другой интерфейс, и в целом другую логику:
![](https://habrastorage.org/r/w1560/webt/sl/ow/f3/slowf3mb1sj5qxivv55_ogct1ju.png)
Теперь подробнее рассмотрим балансировщики 2-й версии Application Load Balancer и Network Load Balancer. У этих балансировщиков есть свои компонентные особенности. Например, появилось такое понятие, как Target Groups — инстансы (и функции). Благодаря этому компоненту, у нас появилась возможность указывать, на какой из Target Groups мы хотим направлять трафик.
![](https://habrastorage.org/r/w1560/webt/im/bj/js/imbjjswpkun3vbloofic2yg3nki.png)
![](https://habrastorage.org/r/w1560/webt/ar/_i/8f/ar_i8fbizqv_fhpd5sti4bvruq8.png)
Говоря простым языком, в Target Groups мы указываем инстансы, куда будет приходить трафик. Если в том же Classic Load Balancer вы просто сразу подключаете интенсы к балансировщику, то в Application Load Balancer вы сначала:
Такая логика работы может показаться сложнее, но на самом деле она удобнее.
Следующий компонент — Listener rules (правила для маршрутизации). Это уже касается только Application Load Balancer. Если в Network Load Balancer вы просто создаете Listener, и он шлет трафик на конкретную Target-группу, то в Application Load Balancer всё веселее и удобнее.
![](https://habrastorage.org/r/w1560/webt/tr/zh/oo/trzhoobgtd18pr43xhucnzuxyxs.png)
Теперь скажем пару слов про следующий компонент — Elastic IP (статические адреса для NLB). Если правила для маршрутизации Listener rules касались только Application Load Balancer, то Elastic IP касается только Network Load Balancer.
Создадим Network Load Balancer:
![](https://habrastorage.org/r/w1560/webt/ur/9i/ro/ur9iro6wvrce2jrvipbrft2gnso.png)
![](https://habrastorage.org/r/w1560/webt/sg/th/em/sgthemahi1r3h84zvbgoqvf_jg0.png)
И как раз в процессе создания мы увидим, что нам дается возможность выбрать Elastic IP:
![](https://habrastorage.org/r/w1560/webt/sh/yt/0e/shyt0eyw9df4dy6vkd5pn3h4400.png)
Elastic IP предоставляет единственный IP-адрес, который можно связать с разными экземплярами EC2 во времени. Если экземпляр EC2 имеет Elastic IP-адрес и этот экземпляр завершен или остановлен, можно немедленно связать новый экземпляр EC2 с адресом Elastic IP. При этом ваше текущее приложение не прекратит работу, так как приложения видят всё тот же IP-адрес, даже если реальный EC2 изменился.
Вот еще один юз-кейс на тему того, зачем нужен Elastic IP. Смотрите, мы видим 3 IP-адреса, но они не навсегда здесь останутся:
![](https://habrastorage.org/r/w1560/webt/pe/ke/ib/pekeib1zlyqsjhlsxzsrtsksfw0.png)
Amazon меняет их с течением времени, может делать это каждые 60 секунд (но на практике, конечно, реже). Значит, IP-адреса могут поменяться. А в случае с Network Load Balancer вы как раз можете привязать айпишник и указывать его в ваших правилах, политиках и т. п.
![](https://habrastorage.org/r/w1560/webt/hf/vo/im/hfvoimybt39ljilk1igkngk95t0.png)
ELB обеспечивает автоматическое распределение входящего трафика по нескольким целевым объектам (контейнеры, инстансы Amazon EC2, IP‑адреса и функции Lambda). ELB способен распределять трафик с меняющейся нагрузкой как в одной зоне доступности, так и между несколькими зонами доступности. Пользователь может выбрать из трёх типов балансировщиков, обеспечивающих и высокую доступность, и автомасштабирование, и неплохую защиту. Всё это важно для обеспечения отказоустойчивости ваших приложений.
Основные плюсы:
Если интересуют подробности, вот еще пару полезных ссылок с официального сайта Amazon:
![](https://habrastorage.org/webt/fw/3o/zd/fw3ozdm4ol2iofjhqg00bbjan_i.jpeg)
Прослушав вебинар, вы будете:
- понимать, что такое AWS Load Balancing;
- знать типы Elastic Load Balancer и его компоненты;
- использовать AWS ELB в вашей практике.
Зачем вообще это уметь:
- полезно, если планируете сдавать экзамены сертификации AWS;
- это простой способ распределения нагрузки между серверами;
- это простой способ добавления Lambda в ваш сервис (ALB).
Открытый урок провёл Ришат Терегулов, системный инженер в маркетинговой компании по разработке и поддержке сайтов.
Введение
Что такое Elastic Load Balancer, можно увидеть на диаграмме ниже, где представлен простейший пример:
![](https://habrastorage.org/webt/ee/mf/og/eemfoghntwhdpx2qit-hr201zvu.png)
Load Balancer принимает реквесты и распределяет их по инстансам. У нас есть один отдельный инстанс, есть Lambda-функции и есть AutoScaling-группа (группа серверов).
Типы AWS ELB
1. Рассмотрим основные типы:
Classic Load Balancer. Самый первый балансировщик от AWS, работает как на 4-м, так и на 7-м уровне OSI, поддерживаются HTTP, HTTPS, TCP и SSL. Он обеспечивает базовую балансировку нагрузки между несколькими инстансами Amazon EC2 и работает как на уровне запросов, так и на уровне соединения. Давайте его откроем (выделен серым):
![](https://habrastorage.org/webt/4z/dp/pf/4zdppffv2an4rahetxvpianlwi0.png)
Этот балансер считается устаревшим, поэтому рекомендуется к использованию лишь в отдельных случаях. Например, для приложений, которые были построены в сети EC2‑Classic. В принципе, нам никто не мешает его создать:
![](https://habrastorage.org/webt/f9/8t/le/f98tleb38xa1s9lsoqr48hqbazy.png)
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.
Создадим его тоже, в результате чего у нас уже будут два балансировщика нагрузки:
![](https://habrastorage.org/webt/vv/rl/g2/vvrlg2tlsfnzsynbw5yk5b8vx1e.png)
Компоненты Load Balance
Общие компоненты Load Balance (присущи всем балансировщикам):
- Access Logging Policy
![](https://habrastorage.org/webt/0-/oe/pp/0-oeppctnqw1b80pv33bftgdjky.png)
Потом указываем S3Bucket — объектное хранилище Amazon:
![](https://habrastorage.org/webt/lu/u_/qu/luu_que2nxptimlvv9whned6mb0.png)
- Scheme
- Security Groups
![](https://habrastorage.org/webt/h-/ue/bk/h-uebkvlii2jrqaqdvbv8hwclag.png)
![](https://habrastorage.org/webt/e5/bp/lz/e5bplz0bmcjfntzhbe2xsis2msw.png)
- Subnets
- Listeners
Пример для Classic Load Balancer:
![](https://habrastorage.org/webt/kn/qr/t9/knqrt9xhgcvd-riowcwaob2ge1m.png)
А вот в Application Load Balancer мы видим и немного другой интерфейс, и в целом другую логику:
![](https://habrastorage.org/webt/sl/ow/f3/slowf3mb1sj5qxivv55_ogct1ju.png)
Компоненты Load Balancer v2 (ALB и NLB)
Теперь подробнее рассмотрим балансировщики 2-й версии Application Load Balancer и Network Load Balancer. У этих балансировщиков есть свои компонентные особенности. Например, появилось такое понятие, как Target Groups — инстансы (и функции). Благодаря этому компоненту, у нас появилась возможность указывать, на какой из Target Groups мы хотим направлять трафик.
![](https://habrastorage.org/webt/im/bj/js/imbjjswpkun3vbloofic2yg3nki.png)
![](https://habrastorage.org/webt/ar/_i/8f/ar_i8fbizqv_fhpd5sti4bvruq8.png)
Говоря простым языком, в 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 всё веселее и удобнее.
![](https://habrastorage.org/webt/tr/zh/oo/trzhoobgtd18pr43xhucnzuxyxs.png)
Теперь скажем пару слов про следующий компонент — Elastic IP (статические адреса для NLB). Если правила для маршрутизации Listener rules касались только Application Load Balancer, то Elastic IP касается только Network Load Balancer.
Создадим Network Load Balancer:
![](https://habrastorage.org/webt/ur/9i/ro/ur9iro6wvrce2jrvipbrft2gnso.png)
![](https://habrastorage.org/webt/sg/th/em/sgthemahi1r3h84zvbgoqvf_jg0.png)
И как раз в процессе создания мы увидим, что нам дается возможность выбрать Elastic IP:
![](https://habrastorage.org/webt/sh/yt/0e/shyt0eyw9df4dy6vkd5pn3h4400.png)
Elastic IP предоставляет единственный IP-адрес, который можно связать с разными экземплярами EC2 во времени. Если экземпляр EC2 имеет Elastic IP-адрес и этот экземпляр завершен или остановлен, можно немедленно связать новый экземпляр EC2 с адресом Elastic IP. При этом ваше текущее приложение не прекратит работу, так как приложения видят всё тот же IP-адрес, даже если реальный EC2 изменился.
Вот еще один юз-кейс на тему того, зачем нужен Elastic IP. Смотрите, мы видим 3 IP-адреса, но они не навсегда здесь останутся:
![](https://habrastorage.org/webt/pe/ke/ib/pekeib1zlyqsjhlsxzsrtsksfw0.png)
Amazon меняет их с течением времени, может делать это каждые 60 секунд (но на практике, конечно, реже). Значит, IP-адреса могут поменяться. А в случае с Network Load Balancer вы как раз можете привязать айпишник и указывать его в ваших правилах, политиках и т. п.
![](https://habrastorage.org/webt/hf/vo/im/hfvoimybt39ljilk1igkngk95t0.png)
Делаем выводы
ELB обеспечивает автоматическое распределение входящего трафика по нескольким целевым объектам (контейнеры, инстансы Amazon EC2, IP‑адреса и функции Lambda). ELB способен распределять трафик с меняющейся нагрузкой как в одной зоне доступности, так и между несколькими зонами доступности. Пользователь может выбрать из трёх типов балансировщиков, обеспечивающих и высокую доступность, и автомасштабирование, и неплохую защиту. Всё это важно для обеспечения отказоустойчивости ваших приложений.
Основные плюсы:
- высокая доступность. В соглашении об обслуживании подразумевается 99,99 % доступности для балансировщика нагрузки. Например, несколько зон доступности гарантирует, что трафик будет обработан только исправными объектами. Собственно говоря, можно балансировать нагрузку и по всему региону, осуществляя перенаправление трафика на исправные целевые объекты в различных зонах доступности;
- безопасность. ELB работает с Amazon VPC, предоставляя разные возможности по обеспечению безопасности — это и интегрированное управление сертификатами, и аутентификация пользователей, и расшифровка SSL/TLS. Всё вместе обеспечивает централизованное и гибкое управление настройками TLS;
- эластичность. ELB может выполнять обработку внезапных изменений сетевого трафика. А глубокая интеграция с Auto Scaling дает приложению достаточно ресурсов, если меняется нагрузка, причем ручное вмешательство не потребуется;
- гибкость. Можно применять IP‑адреса для маршрутизации запросов к целевым объектам ваших приложений. Это гарантирует гибкость при виртуализации целевых приложений, давая таким образом возможность размещать сразу несколько приложений на одном инстансе. Так как приложения могут использовать один сетевой порт и имеют отдельные группы безопасности, упрощается взаимодействие между приложениями, когда у нас архитектура, допустим, на основе микросервисов;
- мониторинг и аудит. Можно осуществлять мониторинг приложений в реал-тайме, используя функции Amazon CloudWatch. Речь идёт о метриках, журналах, отслеживании запросов. Говоря простым языком, вы сможете выявлять проблемы и довольно точно определять узкие места производительности;
- гибридная балансировка нагрузки. Возможность балансировки нагрузки между локальными ресурсами и AWS с применением одного и того же балансировщика упрощает миграцию либо расширение локальных приложений в облако. Упрощается и обработка отказов с применением облака.
Если интересуют подробности, вот еще пару полезных ссылок с официального сайта Amazon: