В терминологии компьютерных сетей балансировка нагрузки или выравнивание нагрузки () — метод распределения заданий между несколькими сетевыми устройствами (например, серверами) с целью оптимизации использования ресурсов, сокращения времени обслуживания запросов, горизонтального масштабирования кластера (динамическое добавление/удаление устройств), а также обеспечения отказоустойчивости (резервирования).
В компьютерах балансировка нагрузки распределяет нагрузку между несколькими вычислительными ресурсами, такими как компьютеры, компьютерные кластеры, сети, центральные процессоры или диски. Цель балансировки нагрузки — оптимизация использования ресурсов, максимизация пропускной способности, уменьшение времени отклика и предотвращение перегрузки какого-либо одного ресурса. Использование нескольких компонентов балансировки нагрузки вместо одного компонента может повысить надежность и доступность за счет резервирования. Балансировка нагрузки предполагает обычно наличие специального программного обеспечения или аппаратных средств, таких как многоуровневый коммутатор или система доменных имен, как серверный процесс.
Балансировка нагрузки отличается от физического соединения тем, что балансировка нагрузки делит трафик между сетевыми интерфейсами на сетевой сокет (модель OSI уровень 4) основе, в то время как соединение канала предполагает разделение трафика между физическими интерфейсами на более низком уровне, либо в пакет (модель OSI уровень 3) или по каналу связи (модель OSI уровень 2).
Примеры устройств, к которым применима балансировка: Серверные кластеры Прокси-серверы Межсетевые экраны Коммутаторы Серверы инспектирования содержимого Серверы DNS Сетевые адаптеры
Балансировка нагрузки может быть использована для расширения возможностей фермы серверов, состоящей более чем из одного сервера. Она также может позволить продолжать работу даже в условиях, когда несколько исполнительных устройств (серверов) вышли из строя. Благодаря этому растёт отказоустойчивость, и появляется возможность динамически регулировать используемые вычислительные ресурсы за счёт добавления/удаления исполнительных устройств в кластере.
Интернет-услуги
Один из наиболее часто используемых приложений балансировки нагрузки является создание единого интернет-сервиса с несколькими серверами, иногда известные как фермы серверов. Обычно с балансировкой нагрузки системы относятся популярные веб-сайты, большие интернет-магазины, сайты использующие протокол передачи файлов (FTP), системы доменных имен (DNS), и базы данных.
Для интернет-сетей балансировщик нагрузки — это, обычно, программа, которая прослушивает порт, где внешние клиенты подключаются к службам. Балансировщик нагрузки перенаправляет запросы на один из «серверов» сервера, который обычно отвечает балансировщику нагрузки. Это позволяет подсистеме балансировки отвечать клиенту, не зная о внутреннем разделении функций. Также это дает возможность для связи с фоновыми серверами напрямую, которые могут иметь преимущества в плане безопасности и скрывать структуру внутренней сети и предотвращения атак на ядро, сетевой стек или несвязанные сервисы, работающие на других портах.
Некоторые балансировщики нагрузки обеспечивают механизм для того, чтобы делать что-то особенное в том случае, если все серверная часть сервера недоступна. Это может включать в себя переадресацию на резервную систему балансировки, или отображения сообщения о неисправности.
Важно также, что подсистема балансировки нагрузки не должна стать единой точкой отказа. Обычно балансировщики нагрузки реализуются в высокой доступности, которые могут также реплицировать сессии сохраняемости данных, если это требуется для конкретного применения.«High Availability» . linuxvirtualserver.org.
Циклический перебор DNS Альтернативный метод балансировки нагрузки, которая не обязательно требует специального программного или аппаратного обеспечения узла, называется раунд Робин с DNS. В этой технике, несколько IP-адресов, связанных с одним доменным именем; клиенты должны выбрать сервер для подключения. В отличие от использования выделенной подсистемы балансировки нагрузки, эта методика предоставляет клиентам существование несколько серверов. Техника имеет свои преимущества и недостатки, в зависимости от степени контроля над DNS-серверами и степени детализации требуемой нагрузки.
Другой, более эффективный метод для балансировки нагрузки с помощью DNS можно делегировать www.example.org в качестве поддомена, для которого зона обслуживается каждый же серверах, обслуживающих веб-сайт. Эта техника работает особенно хорошо, где отдельные серверы разбросаны географически в Интернете. Например: one.example.org A 192.0.2.1 two.example.org A 203.0.113.2 www.example.org NS one.example.org www.example.org NS two.example.org
Тем не менее, файл зоны для www.example.org на каждом сервере отличается таким образом, что каждый сервер решает как использовать IP-адрес в качестве A-записи. На сервере одного файла зоны для отчетов www.example.org: @ in a 192.0.2.1
На сервере два тот же файл зоны содержит: @ in a 203.0.113.2
Таким образом, когда первый сервер не работает, его DNS не отвечает, и веб-служба не получает какой-либо трафик. Если линия на одном сервере перегружена, ненадежная служба DNS обеспечивает меньше http-трафика который достигнет этого сервера. Кроме того, самый быстрый ответ DNS разрешается почти всегда от сети ближайшего сервера, за счёт геочувствительной балансировки нагрузки. Короткий TTL на А-запись позволяет быстро перенаправить трафик, если рухнет сервер. Необходимо учитывать возможность того, что эта методика может привести к возможности индивидуальных клиентов переключаться между отдельными серверами посередине сессии.
Алгоритмы планирования Множество алгоритмов планирования используются балансировщиками нагрузки, чтобы определить, какому серверу послать запрос. Простые алгоритмы включают в себя случайный выбор или по круговой системе. Более сложные подсистемы балансировки нагрузки могут принимать во внимание дополнительные факторы, такие как, какие сервера сообщили нагрузки, меньшее время отклика, вверх/вниз статус (определяется путём мониторинга опрос какой-то), количество активных соединений, географическое положение, возможности, или сколько трафика он недавно был назначен.
Настойчивость Важным вопросом при работе службы балансировки нагрузки как работать с информацией, которая должна быть сохранена через несколько запросов в сессии пользователя. Если эта информация хранится локально на одном сервере серверной, то последующие запросы, идущие от различных внутренних серверов не смогут его найти. Это может быть кешированная информация, которая может быть пересчитана, и в этом случае запрос балансировки нагрузки на другой сервер серверной решает проблему производительности.
В идеале кластер серверов за балансировщиком нагрузки должны быть в курсе сессий, так, что если клиент подключается к любому серверу в любой момент история общения пользователя с конкретным сервером не имеет значения. Обычно это достигается с помощью общей базы данных или в памяти сессии базы данных, например memcached.
Одно основное решение проблемы данных сессии должны отправлять все запросы в сессии пользователя последовательно в тот же сервер. Это называется настойчивость (persistence) или липкость (stickiness). Существенным недостатком этой технологии является отсутствие автоматической отработки отказа: если сервер выходит из строя, его сессионная информация становится недоступной, из всех сеансов теряется. Та же проблема обычно актуальна для центральной базы данных сервера; даже если веб-сервера являются «лицами без гражданства» (stateless) и не «липкий» (sticky), центральной базе данных (см. ниже).
Отнесение к определенному серверу могут основываться на имени пользователя, клиентского IP-адреса, или могут быть случайными. Из-за изменения клиента воспринимаются адрес, вытекающих из протокола DHCP, трансляцию сетевых адресов и веб-прокси, этот метод может быть ненадежным. Случайные задания должны запоминаться балансировщиком нагрузки, который создает нагрузку на хранилище. Если балансировщик нагрузки заменяется или выходит из строя, эта информация может быть потеряна, и задания, возможно, должны быть удалены после заданного промежутка времени или в периоды высокой нагрузки, чтобы избежать превышения пространства, доступного для таблицы присвоений. Метод случайного присвоение также требует, чтобы клиенты поддерживают некоторые настройки, который может быть проблемой, например, когда Web-браузер отключил хранения файлов cookie. Сложные подсистемы балансировки нагрузки используют несколько методов сохранения, позволяющие избежать некоторых недостатков какого-либо одного метода.
Другим решением является хранить сессионные данные в БД. Вообще это плохо для производительности, так как это увеличивает нагрузку на базу данных: базу данных лучше использовать для хранения информации менее изменяющейся, чем сессионные данные. Чтобы база данных не стала единой точкой отказа, и для повышения масштабируемости, базы данных часто реплицируются между несколькими компьютерами, и балансировки нагрузки используется для распространения индекса нагрузки между этими репликами. Технология Microsoft ASP.net State Server является примером сеанса базы данных. Все серверы в веб-ферме хранят данные сессии на Главном State Server сервер и любой сервер в ферме может извлечь данные.
Очень распространены случаи когда клиентом является веб-браузер, простой, то эффективный подход-хранить сессионные данные в самом браузере. Одним из способов достижения этого является использование cookie браузера, временные зашифрованные метки. Другой способ — перезапись URL. Хранение данных сессии на клиенте, как правило, предпочтительное решение: тогда балансировщик нагрузки волен выбирать любой сервера для обработки запроса. Однако, этот метод обработки данных состояния плохо подходит для некоторых сложных сценариев бизнес-логики, где состояние сеанса является большой полезной нагрузкой и перечитывать его с каждым запросом на сервер не представляется возможным. Перезапись URL-адресов имеет серьезные проблемы безопасности, потому что конечный пользователь может легко изменять представленные URL и таким образом изменить потоки сессии.
Еще одно решение для хранения постоянных данных, чтобы связать имя с каждым блоком данных, использовать распределенную хеш-таблицу, чтобы псевдо-случайным образом присвоить имя одному из доступных серверов, а затем хранить, этот блок данных в назначенном сервере.
Возможности балансировщика нагрузки Аппаратные и программные балансировщики нагрузки могут иметь различные специальные характеристики. Основная черта балансировщика нагрузки — иметь возможность распределять входящие запросы через несколько серверов в кластере по алгоритму планирования. Большинство из перечисленных ниже свойств конкретного поставщика: Асимметричная нагрузка: соотношение может быть назначено вручную вызывать некоторые сервера, чтобы получить большую долю нагрузки, чем другие. Это иногда используется в качестве способа когда одна часть серверов имеет больше возможностей, чем другие, и не всегда работают так, как хотелось. Приоритет активации: когда количество доступных серверов падает ниже определенного числа, или нагрузка становится слишком высокой, часть резервных серверов может быть переведено в оперативный режим.