Балансировка нагрузки
Пережить одновременный визит множества пользователей поможет развёртывание копий сайта на нескольких ВМ. В таком случае нагрузка равномерно распределится между ними. Если машин пять — то каждой достанется 20% запросов. Такой подход называется сетевой балансировкой.
Работает это так. Перед ВМ с сайтом ставят балансировщик — приложение, которое принимает запросы от пользователей и распределяет их по ВМ, а затем получает от ВМ ответы и передаёт (проксирует) их пользователям. При этом сервису, передающему трафик, не нужно знать адреса и названия ВМ: процедура разрешения имён делегируется балансировщику.
Балансировка не только помогает распределить нагрузку между серверами, но и защищает веб-приложение от выхода ВМ из строя. Предположим, на одном из серверов возникли неполадки и он не может обрабатывать запросы. В этом случае балансировщик перераспределит нагрузку между другими серверами, и с этого момента недоступность сервиса для конечных пользователей прекратится.
Кроме того, балансировщик позволяет незаметно для пользователей обновлять код сайта или веб-приложения на серверах: вы просто поочередно убираете ВМ из-под балансировки, обновляете софт, после чего возвращаете их под балансировку.
Настройка балансировщика
Пошаговая инструкция: Практическая работа. Создание балансировщика — Яндекс Практикум (yandex.ru)
Как правильно использовать балансировщики
Чтобы построить эффективную инфраструктуру с высокой отказоустойчивостью:
- Создавайте ресурсы в разных зонах доступности Размещайте копии виртуальных машин (ВМ) в нескольких зонах доступности. Так приложения останутся доступны, даже если одна из зон выйдет из строя. В каждой зоне доступности разместите одинаковое количество облачных ресурсов. Если в
ru-central1-a
находится три ВМ — поместите по три ВМ и вru-central1-b
, и вru-central1-d
. - Создавайте облачные ресурсы с запасом Если одна ВМ в зоне доступности выйдет из строя, трафик продолжит поступать в зону в том же объёме, а нагрузка на оставшиеся машины увеличится. Чтобы все ВМ не вышли из строя — помимо ресурсов, необходимых для обслуживания расчётной нагрузки, добавьте в каждой зоне дополнительные вычислительные ресурсы (vCPU, RAM).
- Используйте разные балансировщики для разных приложений Если вы разворачиваете в Yandex Compute Cloud несколько приложений — настройте для их обслуживания отдельные балансировщики. Это поможет эффективнее управлять нагрузкой.
- Организуйте два уровня балансировщиков Балансировщики Yandex Cloud работают с протоколами TCP и UDP — так называемыми транспортными протоколами или протоколами четвёртого уровня сетевой модели OSI. Они называются так потому, что предназначены для обеспечения надёжной передачи данных от отправителя к получателю. Кроме того, бывают балансировщики протоколов седьмого уровня — на этом уровне работает, например, протокол HTTP.
Поскольку балансировщики седьмого уровня, например веб-сервер NGINX, выполняют более сложную работу с IP-пакетами (сборка, анализ, журналирование), они выиграют от предварительного распределения нагрузки на четвертом уровне, особенно при DDoS-атаках.
Организуйте двухуровневую архитектуру с балансировщиками на четвертом (транспортном) уровне OSI и седьмом уровне приложения (например HTTP). Балансировщик четвертого уровня будет принимать трафик и передавать его целевой группе балансировщиков седьмого уровня, а те распределят трафик по ВМ с приложениями. В качестве балансировщиков седьмого уровня вы можете использовать ВМ, на которые установили ПО для балансировки (например NGINX).
📂 YandexCloud | Последнее изменение: 15.08.2024 11:41