Изображение профиля AWS Community Builders

Ван Хоанг Кха


Масштабируемость и высокая доступность

  • Масштабируемость означает, что система может справляться с большими нагрузками за счет адаптации
  • Мы можем выделить два типа стратегий масштабируемости:
    • Вертикальная масштабируемость (увеличение/уменьшение)

      • Увеличить размер текущего экземпляра (например, с экземпляра t2.micro перейти на экземпляр t2.large)
      • Вертикальная масштабируемость характерна для нераспределенных систем, таких как базы данных.
      • RDS, ElastiCache — сервисы, которые можно масштабировать по вертикали.
    • Горизонтальная масштабируемость (масштабирование вверх/вниз)

      • Увеличьте количество экземпляров, на которых запускается приложение
      • Горизонтальное масштабирование подразумевает наличие распределенной системы
      • Легко масштабировать по горизонтали благодаря таким предложениям, как EC2.
  • Высокая доступность означает запуск нашего приложения как минимум в 2 центрах обработки данных (AZ).
    • Цель высокой доступности — пережить потерю центра обработки данных.
  • Высокая доступность может быть:
  • Балансировщики нагрузки могут масштабироваться, но не мгновенно — свяжитесь с AWS для «разминки»
  • Исправление проблем:
    • Ошибки 4xx — это ошибки, вызванные клиентом.
    • Ошибки 5xx — это ошибки, вызванные приложением (ошибки на стороне сервера).
    • Ошибка 503 означает, что балансировщик нагрузки загружен или не может быть найдено ни одного зарегистрированного таргета.
    • Если балансировщик нагрузки не может подключиться к приложению, это, скорее всего, означает, что группа безопасности блокирует подключение.
  • Мониторинг:
    • Журналы доступа ELB будут регистрировать все запросы на доступ к LB.
    • CloudWatch Metrics предоставит сводную статистику (например, количество подключений).


Основы балансировки нагрузки

  • Балансировщики нагрузки — это серверы, которые перенаправляют интернет-трафик на несколько других серверов (скорее всего, экземпляры EC2).
  • Зачем использовать балансировку нагрузки?
    • Точечная загрузка нескольких нижестоящих экземпляров
    • Предоставьте приложению единую точку доступа (DNS)
    • Беспрепятственно обрабатывать сбои нижестоящих экземпляров (путем проверки работоспособности)
    • Выполняйте регулярные проверки работоспособности зарегистрированных экземпляров
    • Обеспечьте терминацию SSL (HTTPS) для веб-сайта, размещенного на нижестоящих экземплярах.
    • Обеспечьте прилипание файлов cookie
    • Высокая доступность в зонах доступности (балансировщик нагрузки может быть распределен по нескольким зонам доступности, а не по регионам!!!)
    • Четко отделяйте общедоступный трафик от частного трафика
  • ELB (эластичный балансировщик нагрузки) — это управляемый балансировщик нагрузки что значит:
    • AWS гарантирует, что он будет работать
    • AWS позаботится об обновлениях, обслуживании и высокой доступности
    • ELB также предоставляет нам несколько вариантов конфигурации.
    • Настройка нашего собственного балансировщика нагрузки обходится дешевле, но его обслуживание в долгосрочной перспективе потребует гораздо больше усилий.
    • ELB интегрирован со многими предложениями/сервисами AWS, он будет более гибким, чем пользовательский LB.


Проверки здоровья

  • Они позволяют LB узнать, доступен ли экземпляр, для которого перенаправляется трафик, для ответа на запросы.
  • Проверка работоспособности выполняется с использованием порта и маршрута (обычно /health).
  • Если ответ не 200, экземпляр считается неработоспособным.


Типы балансировщиков нагрузки на AWS

  • AWS предоставляет 4 типа балансировщиков нагрузки:
    • Classic Load Balancer (v1 — старое поколение): поддерживает HTTP, HTTPS и TCP.
    • Application Load Balancer (v2 — новое поколение): поддерживает HTTP, HTTPS и WebSockets
    • Network Load Balancer (v2 — новое поколение): поддерживает TCP, TLS (защищенный TCP) и UDP.
    • Балансировщик нагрузки шлюза (новое поколение — см. раздел примечаний к VPC)
  • Рекомендуется использовать новые версии
  • Мы можем настроить внутренний (частное) и внешний (общедоступные) балансировщики нагрузки на AWS


Классические балансировщики нагрузки (CLB)

  • Они поддерживают 2 типа соединений: TCP (уровень 4) и HTTP(S) (уровень 7).
  • Проверки работоспособности основаны либо на TCP, либо на HTTP.
  • CLB предоставляют фиксированное имя хоста: XXX.region.elb.amazonaws.com.


Балансировщики нагрузки приложений (ALB)

  • Это балансировщики нагрузки уровня 7 (только HTTP или HTTPS).
  • Они позволяют распределять нагрузку между несколькими HTTP-приложениями на нескольких компьютерах (целевых группах). Также они позволяют распределять нагрузку между несколькими приложениями в одном экземпляре EC2 (полезно в случае контейнеров).
  • У них есть поддержка HTTP2 и WebSockets.
  • Они поддерживают перенаправления, например, с HTTP на HTTPS.
  • Они предоставляют таблицы маршрутизации различным целевым группам:
    • Маршрутизация на основе пути в URL
    • Маршрутизация на основе имени хоста
    • Маршрутизация на основе строк запроса и заголовков
  • ALB отлично подходят для микросервисов и приложений на основе контейнеров.
  • ALB имеют функции сопоставления портов для перенаправления на динамические порты в случае, если ECS
  • Целевые группы могут содержать:
    • Экземпляры EC2 (могут управляться Auto Scaling Group)
    • Задачи ECS (управляется самой ECS)
    • Лямбда-функции — HTTP-запрос преобразуется в событие JSON.
    • IP-адреса — должны быть частными IP-адресами.
  • ALB также предоставляют фиксированное имя хоста (такое же, как CLB): XXX.region.elb.amazonaws.com.
  • Серверы приложений за LB не могут видеть IP-адрес клиента, который обращается к ним напрямую, но они могут получить для X-переадресовано-для заголовок. Порт можно получить из X-переадресованный порт и протокол от X-Forwarded-Proto


Балансировщики сетевой нагрузки (NLB)

  • Балансировщики сетевой нагрузки (уровень 4) позволяют:
    • Перенаправлять трафик TCP и UDP на зарегистрированные экземпляры
    • Обработка миллионов запросов в секунду
    • Меньшая задержка ~100 мс (против 400 мс для ALB)
  • NLB имеют один статический IP на AZ и поддерживает эластичные IP-адреса (можно использовать, когда необходим белый список)
  • Пример использования NLB: NLB используются для обеспечения максимальной производительности в случае трафика TCP или UDP (пример: видеоигры).
  • Экземпляры за NLB не видят трафик, исходящий от балансировщика нагрузки, они видят трафик, как если бы он исходил из внешнего мира => к LB не привязана группа безопасности => группу безопасности, прикрепленную к целевому экземпляру EC2, следует изменить, чтобы разрешить трафик извне (пример: 0.0.0.0/0, порт 80)


Липкость

  • Можно реализовать липкость в случае балансировщиков нагрузки CLB и ALB.
  • Прилипание означает, что трафик от одного и того же клиента будет перенаправлен на один и тот же целевой экземпляр.
  • Прилипчивость работает путем добавления файла cookie к запросу, у которого есть дата истечения срока действия для управления периодом прилипания.
  • Возможный вариант использования липкости: мы должны убедиться, что пользователь не потеряет данные своего сеанса.
  • Включение закрепления может привести к дисбалансу нагрузки на последующие целевые экземпляры.


Балансировка нагрузки между зонами

  • При включенной балансировке нагрузки между зонами каждый экземпляр LB равномерно распределяет трафик по нескольким зонам доступности.
  • В противном случае каждый узел LB равномерно распределяет запросы только в той АЗ, где он зарегистрирован.
  • Классический балансировщик нагрузки:
    • Балансировка нагрузки между зонами отключена по умолчанию.
    • Никаких дополнительных сборов за межзональную балансировку нагрузки, если эта функция включена.
  • Балансировщик нагрузки приложений:
    • Балансировка нагрузки между зонами всегда включена, ее нельзя отключить.
    • Плата за балансировку нагрузки между зонами не взимается.
  • Балансировщик сетевой нагрузки:
    • Балансировка нагрузки между зонами отключена по умолчанию.
    • Дополнительная плата взимается, если эта функция включена.


SSL/TLS-сертификаты

  • Сертификат SSL позволяет шифровать трафик между клиентами и балансировщиками нагрузки. Это называется шифрованием при передаче или шифрованием в полете.
  • SSL — безопасный уровень сокетов
  • TLS (более новая версия SSL) — безопасность транспортного уровня
  • В настоящее время в основном используется TLS, но мы по-прежнему называем его SSL.
  • Общедоступные SSL-сертификаты выдаются центром сертификации.
  • SSL-сертификаты имеют срок действия, и их необходимо обновлять.
  • Прекращение SSL: клиент может общаться с LB, используя HTTPS, но внутренний трафик может быть направлен к цели, используя HTTP
  • Балансировщик нагрузки может загружать сертификат X.509 (который является сертификатом сервера SSL/TLS).
  • Мы можем управлять сертификатами в AWS с помощью ACM (менеджер сертификатов AWS).
  • Прослушиватель HTTPS:
    • Мы должны указать сертификат по умолчанию
    • Мы можем добавить необязательный список сертификатов для поддержки нескольких доменов.
    • Клиенты могут использовать SNI (индикатор имени сервера), чтобы указать, к какому имени хоста они хотят подключиться.
    • Возможность указать политику безопасности для поддержки более старых версий SSL/TLS (для устаревших клиентов, таких как Internet Explorer 5, лол :))


SNI — указание имени сервера

  • SNI решает проблему загрузки нескольких SSL-сертификатов на один веб-сервер.
  • Существует более новый протокол, который требует, чтобы клиент указал имя хоста целевого сервера в начальном рукопожатии SSL.
    • В случае AWS это работает только для ALB, NLB и CloudFront (без CLB!)


ELB — слив соединения

  • Именование функций:
    • В случае CLB называется Слив соединений.
    • Если у нас есть целевая группа: (ALB, NLB), она называется Deregistration Delay.
  • Исчезновение соединения — это время, необходимое для выполнения текущих запросов, пока экземпляр отменяет регистрацию или находится в неработоспособном состоянии. По сути, это позволяет экземпляру завершить все, что он делал.
  • LB перестанет отправлять новые запросы целевому экземпляру, который находится в процессе отмены регистрации.
  • Период времени слива соединения может быть установлен от 1 секунды до 3600 секунд.
  • Его также можно отключить (установите период на 0 секунд)

🔠 Найдите свой любимый шрифт

Вы можете изменить шрифт по умолчанию в настройках.