stringtranslate.com

Балансировка нагрузки (вычисления)

Диаграмма, иллюстрирующая распределение пользовательских запросов к кластеру Elasticsearch балансировщиком нагрузки. (Пример для Википедии .)

В вычислительной технике балансировка нагрузки — это процесс распределения набора задач по набору ресурсов (вычислительных единиц) с целью повышения эффективности их общей обработки. Балансировка нагрузки может оптимизировать время отклика и избежать неравномерной перегрузки некоторых вычислительных узлов, в то время как другие вычислительные узлы остаются бездействующими.

Балансировка нагрузки является предметом исследований в области параллельных компьютеров . Существуют два основных подхода: статические алгоритмы, которые не учитывают состояние различных машин, и динамические алгоритмы, которые обычно более общие и более эффективные, но требуют обмена информацией между различными вычислительными блоками, что сопряжено с риском потери эффективности.

Обзор проблемы

Алгоритм балансировки нагрузки всегда пытается решить конкретную проблему. Среди прочего, необходимо учитывать характер задач, сложность алгоритма , аппаратную архитектуру, на которой будут работать алгоритмы, а также требуемую устойчивость к ошибкам . Поэтому необходимо найти компромисс, чтобы наилучшим образом удовлетворить требования, предъявляемые к приложению.

Характер задач

Эффективность алгоритмов балансировки нагрузки критически зависит от характера задач. Поэтому чем больше информации о задачах доступно на момент принятия решения, тем больше потенциал для оптимизации.

Размер задач

Идеальное знание времени выполнения каждой из задач позволяет достичь оптимального распределения нагрузки (см. алгоритм префиксной суммы ). [1] К сожалению, это на самом деле идеализированный случай. Знание точного времени выполнения каждой задачи — крайне редкая ситуация.

По этой причине существует несколько методов, позволяющих получить представление о различном времени выполнения. Прежде всего, в удачном сценарии, когда задачи имеют относительно однородный размер, можно считать, что каждая из них потребует приблизительно среднего времени выполнения. Если же, с другой стороны, время выполнения очень нерегулярно, необходимо использовать более сложные методы. Один из методов заключается в добавлении некоторых метаданных к каждой задаче. В зависимости от предыдущего времени выполнения для аналогичных метаданных можно сделать выводы для будущей задачи на основе статистики. [2]

Зависимости

В некоторых случаях задачи зависят друг от друга. Эти взаимозависимости можно проиллюстрировать направленным ациклическим графом . Интуитивно понятно, что некоторые задачи не могут начаться, пока другие не будут завершены.

Предполагая, что требуемое время для каждой из задач известно заранее, оптимальный порядок выполнения должен приводить к минимизации общего времени выполнения. Хотя это NP-трудная задача и, следовательно, ее может быть трудно решить точно. Существуют алгоритмы, такие как job scheduler , которые вычисляют оптимальное распределение задач с использованием метаэвристических методов.

Разделение задач

Еще одной особенностью задач, критически важной для разработки алгоритма балансировки нагрузки, является их способность разбиваться на подзадачи во время выполнения. Алгоритм "Tree-Shaped Computation", представленный ниже, в значительной степени использует эту специфику.

Статические и динамические алгоритмы

Статичный

Алгоритм балансировки нагрузки является «статичным», когда он не учитывает состояние системы для распределения задач. Таким образом, состояние системы включает такие меры, как уровень нагрузки (а иногда даже перегрузки) определенных процессоров. Вместо этого заранее делаются предположения о всей системе, такие как время прибытия и требования к ресурсам входящих задач. Кроме того, известны количество процессоров, их соответствующая мощность и скорости связи. Поэтому статическая балансировка нагрузки направлена ​​на то, чтобы связать известный набор задач с доступными процессорами, чтобы минимизировать определенную функцию производительности. Хитрость заключается в концепции этой функции производительности.

Статические методы балансировки нагрузки обычно централизуются вокруг маршрутизатора или Мастера , который распределяет нагрузки и оптимизирует функцию производительности. Эта минимизация может учитывать информацию, связанную с распределяемыми задачами, и выводить ожидаемое время выполнения.

Преимущество статических алгоритмов в том, что они просты в настройке и чрезвычайно эффективны в случае достаточно регулярных задач (например, обработка HTTP- запросов с веб-сайта). Однако все еще существует некоторая статистическая дисперсия в назначении задач, которая может привести к перегрузке некоторых вычислительных блоков.

Динамичный

В отличие от статических алгоритмов распределения нагрузки, динамические алгоритмы учитывают текущую нагрузку каждого из вычислительных блоков (также называемых узлами) в системе. При таком подходе задачи могут динамически перемещаться с перегруженного узла на недогруженный узел для получения более быстрой обработки. Хотя эти алгоритмы гораздо сложнее в проектировании, они могут давать отличные результаты, в частности, когда время выполнения сильно различается от одной задачи к другой.

Архитектура динамической балансировки нагрузки может быть более модульной, поскольку не обязательно иметь определенный узел, выделенный для распределения работы. Когда задачи уникально назначаются процессору в соответствии с их состоянием в определенный момент, это уникальное назначение. Если, с другой стороны, задачи могут быть постоянно перераспределены в соответствии с состоянием системы и ее развитием, это называется динамическим назначением. [3] Очевидно, что алгоритм балансировки нагрузки, требующий слишком большого количества коммуникаций для достижения своих решений, рискует замедлить решение общей проблемы.

Архитектура оборудования

Гетерогенные машины

Параллельные вычислительные инфраструктуры часто состоят из блоков различной вычислительной мощности , что следует учитывать при распределении нагрузки.

Например, устройства с меньшей мощностью могут получать запросы, требующие меньшего объема вычислений, или, в случае однородных или неизвестных размеров запросов, получать меньше запросов, чем устройства с большей мощностью.

Общая и распределенная память

Параллельные компьютеры часто делятся на две большие категории: те, в которых все процессоры используют одну общую память, в которой они читают и пишут параллельно ( модель PRAM ), и те, в которых каждое вычислительное устройство имеет свою собственную память ( модель распределенной памяти ) и где обмен информацией осуществляется посредством сообщений.

Для компьютеров с общей памятью управление конфликтами записи значительно замедляет скорость индивидуального выполнения каждого вычислительного блока. Однако они могут прекрасно работать параллельно. И наоборот, в случае обмена сообщениями каждый из процессоров может работать на полной скорости. С другой стороны, когда дело доходит до коллективного обмена сообщениями, все процессоры вынуждены ждать, пока самые медленные процессоры начнут фазу коммуникации.

В действительности, лишь немногие системы попадают в одну из категорий. Как правило, каждый процессор имеет внутреннюю память для хранения данных, необходимых для следующих вычислений, и организован в последовательные кластеры . Часто эти элементы обработки затем координируются через распределенную память и передачу сообщений . Поэтому алгоритм балансировки нагрузки должен быть уникально адаптирован к параллельной архитектуре. В противном случае существует риск того, что эффективность параллельного решения задач будет значительно снижена.

Иерархия

Адаптируясь к рассмотренным выше аппаратным структурам, можно выделить две основные категории алгоритмов балансировки нагрузки. С одной стороны, та, в которой задачи назначаются «мастером» и выполняются «работниками», которые информируют мастера о ходе своей работы, а затем мастер может взять на себя ответственность за назначение или переназначение рабочей нагрузки в случае динамического алгоритма. В литературе это называется архитектурой «мастер-работник» . С другой стороны, управление может быть распределено между различными узлами. Затем алгоритм балансировки нагрузки выполняется на каждом из них, и ответственность за назначение задач (а также переназначение и разделение по мере необходимости) распределяется. Последняя категория предполагает динамический алгоритм балансировки нагрузки.

Поскольку конструкция каждого алгоритма балансировки нагрузки уникальна, предыдущее различие должно быть уточнено. Таким образом, также возможно иметь промежуточную стратегию, например, с «главными» узлами для каждого подкластера, которые сами подчиняются глобальному «главному». Существуют также многоуровневые организации с чередованием стратегий «главный-подчиненный» и распределенного управления. Последние стратегии быстро становятся сложными и встречаются редко. Разработчики предпочитают алгоритмы, которые легче контролировать.

Адаптация к более крупным архитектурам (масштабируемость)

В контексте алгоритмов, которые работают в течение очень длительного периода (серверы, облако...), архитектура компьютера со временем развивается. Однако предпочтительнее не разрабатывать каждый раз новый алгоритм.

Поэтому чрезвычайно важным параметром алгоритма балансировки нагрузки является его способность адаптироваться к масштабируемой аппаратной архитектуре. Это называется масштабируемостью алгоритма . Алгоритм называется масштабируемым для входного параметра, когда его производительность остается относительно независимой от размера этого параметра.

Когда алгоритм способен адаптироваться к разному количеству вычислительных блоков, но количество вычислительных блоков должно быть зафиксировано перед выполнением, он называется формовочным. Если же, с другой стороны, алгоритм способен работать с изменяющимся количеством процессоров во время выполнения, говорят, что алгоритм является пластичным. Большинство алгоритмов балансировки нагрузки по крайней мере являются формовочными. [4]

Отказоустойчивость

Особенно в крупномасштабных вычислительных кластерах недопустимо выполнение параллельного алгоритма, который не может выдержать отказ одного компонента. Поэтому разрабатываются отказоустойчивые алгоритмы, которые могут обнаруживать сбои процессоров и восстанавливать вычисления. [5]

Подходы

Статическое распределение с полным знанием задач:префиксная сумма

Если задачи независимы друг от друга и если время их выполнения и сами задачи можно разделить, то существует простой и оптимальный алгоритм.

Алгоритм балансировки нагрузки в зависимости от делимости задач

Разделив задачи таким образом, чтобы дать каждому процессору одинаковое количество вычислений, все, что остается сделать, это сгруппировать результаты вместе. Используя алгоритм префиксной суммы , это деление можно вычислить за логарифмическое время относительно количества процессоров. [ необходима цитата ]

Однако если задачи не могут быть разделены (т. е. они атомарны ), то, хотя оптимизация назначения задач является сложной проблемой, все равно можно приблизиться к относительно справедливому распределению задач, при условии, что размер каждой из них намного меньше общего объема вычислений, выполняемых каждым из узлов. [1]

В большинстве случаев время выполнения задачи неизвестно, и доступны только грубые приближения. Этот алгоритм, хотя и особенно эффективен, не подходит для таких сценариев.

Распределение статической нагрузки без предварительных знаний

Даже если время выполнения заранее неизвестно, статическое распределение нагрузки всегда возможно.

Круговое планирование

В алгоритме round-robin первый запрос отправляется на первый сервер, затем следующий — на второй и так далее до последнего. Затем он запускается снова, назначая следующий запрос первому серверу и так далее.

Этот алгоритм можно взвесить таким образом, чтобы самые мощные блоки получали наибольшее количество запросов и получали их первыми.

Рандомизированный статический

Рандомизированная статическая балансировка нагрузки — это просто случайный процесс назначения задач разным серверам. Этот метод работает довольно хорошо. Если же, с другой стороны, количество задач известно заранее, еще эффективнее заранее рассчитать случайную перестановку. Это позволяет избежать затрат на связь для каждого назначения. Больше нет необходимости в мастере распределения, поскольку каждый процессор знает, какая задача ему назначена. Даже если количество задач неизвестно, все равно можно избежать связи с помощью псевдослучайной генерации назначений, известной всем процессорам.

Производительность этой стратегии (измеряемая общим временем выполнения заданного фиксированного набора задач) уменьшается с увеличением максимального размера задач.

Другие

Конечно, существуют и другие методы назначения:

Схема «мастер-работник»

Схемы Master-Worker являются одними из самых простых алгоритмов динамической балансировки нагрузки. Мастер распределяет нагрузку между всеми работниками (иногда их также называют «ведомыми»). Изначально все работники простаивают и сообщают об этом мастеру. Мастер отвечает на запросы работников и распределяет между ними задачи. Когда у него больше нет задач, он сообщает об этом работникам, чтобы они перестали запрашивать задачи.

Преимущество этой системы в том, что она распределяет нагрузку очень справедливо. Фактически, если не принимать во внимание время, необходимое для выполнения задания, время выполнения будет сопоставимо с префиксной суммой, показанной выше.

Проблема этого алгоритма в том, что он с трудом адаптируется к большому количеству процессоров из-за большого количества необходимых коммуникаций. Этот недостаток масштабируемости быстро делает его неработоспособным на очень больших серверах или очень больших параллельных компьютерах. Мастер выступает в качестве узкого места .

Мастер-работник и узкое место

Однако качество алгоритма можно значительно улучшить, заменив мастер списком задач, который может использоваться разными процессорами. Хотя этот алгоритм немного сложнее реализовать, он обещает гораздо лучшую масштабируемость, хотя все еще недостаточную для очень больших вычислительных центров.

Неиерархическая архитектура, без знания системы:кража работы

Еще одним методом преодоления проблем масштабируемости, когда неизвестно время, необходимое для выполнения задачи, является кража работы .

Подход заключается в назначении каждому процессору определенного количества задач случайным или предопределенным образом, а затем в разрешении неактивным процессорам «воровать» работу у активных или перегруженных процессоров. Существует несколько реализаций этой концепции, определяемых моделью разделения задач и правилами, определяющими обмен между процессорами. Хотя этот метод может быть особенно эффективным, его трудно реализовать, поскольку необходимо гарантировать, что коммуникация не станет основным занятием процессоров вместо решения проблемы.

В случае атомарных задач можно выделить две основные стратегии: те, где процессоры с низкой нагрузкой предлагают свою вычислительную мощность процессорам с самой высокой нагрузкой, и те, где наиболее загруженные блоки желают облегчить возложенную на них нагрузку. Было показано [8] , что когда сеть сильно загружена, то менее загруженным блокам эффективнее предлагать свою доступность, а когда сеть слабо загружена, то именно перегруженным процессорам требуется поддержка от самых неактивных. Это практическое правило ограничивает количество обмениваемых сообщений.

В случае, когда мы начинаем с одной большой задачи, которая не может быть разделена за пределы атомарного уровня, существует очень эффективный алгоритм «древовидного вычисления» [9] , где родительская задача распределяется по рабочему дереву.

Принцип

Изначально у многих процессоров есть пустая задача, за исключением одного, который последовательно над ней работает. Неактивные процессоры отправляют запросы случайным образом другим процессорам (не обязательно активным). Если последний способен подразделить задачу, над которой он работает, он делает это, отправляя часть своей работы узлу, делающему запрос. В противном случае он возвращает пустую задачу. Это вызывает древовидную структуру . Затем необходимо отправить сигнал завершения родительскому процессору, когда подзадача будет завершена, чтобы он, в свою очередь, отправил сообщение своему родителю, пока не достигнет корня дерева. Когда первый процессор, т. е. корень, завершит работу, может быть передано глобальное сообщение о завершении. В конце необходимо собрать результаты, поднявшись обратно вверх по дереву.

Эффективность

Эффективность такого алгоритма близка к префиксной сумме, когда время нарезки и коммуникации не слишком велико по сравнению с работой, которую нужно выполнить. Чтобы избежать слишком высоких затрат на коммуникации, можно представить список работ в общей памяти . Поэтому запрос — это просто чтение из определенной позиции в этой общей памяти по запросу главного процессора.

Варианты использования

Помимо эффективного решения задач посредством параллельных вычислений, алгоритмы балансировки нагрузки широко используются в управлении HTTP- запросами, где сайт с большой аудиторией должен иметь возможность обрабатывать большое количество запросов в секунду.

Интернет-услуги

Одним из наиболее часто используемых приложений балансировки нагрузки является предоставление единой интернет-услуги с нескольких серверов , иногда называемых фермой серверов . Обычно системы с балансировкой нагрузки включают популярные веб-сайты , крупные сети Internet Relay Chat , сайты с высокой пропускной способностью File Transfer Protocol (FTP), серверы Network News Transfer Protocol (NNTP), серверы Domain Name System (DNS) и базы данных.

Круговой DNS

Круговой DNS — это альтернативный метод балансировки нагрузки, не требующий выделенного программного или аппаратного узла. В этом методе несколько IP-адресов связываются с одним доменным именем ; клиентам назначается IP-адрес по кругу. IP-адрес назначается клиентам с коротким сроком действия, поэтому клиент с большей вероятностью будет использовать другой IP-адрес при следующем доступе к запрашиваемой интернет-услуге.

DNS-делегирование

Другой более эффективный метод балансировки нагрузки с использованием DNS — делегировать www.example.org как поддомен, зона которого обслуживается каждым из тех же серверов, которые обслуживают веб-сайт. Этот метод работает особенно хорошо, когда отдельные серверы географически разбросаны по Интернету. Например:

one.example.org А 192.0.2.1two.example.org А 203.0.113.2www.example.org NS one.example.orgwww.example.org NS два.example.org

Однако файл зоны для www.example.org на каждом сервере отличается, поэтому каждый сервер разрешает свой собственный IP-адрес как A-запись. [10] На первом сервере файл зоны для www.example.org сообщает:

@ в 192.0.2.1

На сервере два тот же файл зоны содержит:

@ в 203.0.113.2

Таким образом, когда сервер выходит из строя, его DNS не будет отвечать, и веб-служба не получит никакого трафика. Если линия к одному серверу перегружена, ненадежность DNS гарантирует, что меньше HTTP-трафика достигнет этого сервера. Кроме того, самый быстрый ответ DNS на резольвер почти всегда исходит от ближайшего сервера сети, что обеспечивает геозависимую балансировку нагрузки [ требуется цитата ] . Короткий TTL в A-записи помогает обеспечить быстрое перенаправление трафика, когда сервер выходит из строя. Необходимо учитывать возможность того, что этот метод может привести к тому, что отдельные клиенты будут переключаться между отдельными серверами в середине сеанса.

Случайная балансировка нагрузки на стороне клиента

Другой подход к балансировке нагрузки заключается в предоставлении клиенту списка IP-адресов сервера, а затем в том, чтобы клиент случайным образом выбирал IP-адрес из списка при каждом подключении. [11] [12] По сути, это основано на том, что все клиенты генерируют схожие нагрузки, и на законе больших чисел [12] для достижения достаточно ровного распределения нагрузки по серверам. Утверждается, что случайная балансировка нагрузки на стороне клиента имеет тенденцию обеспечивать лучшее распределение нагрузки, чем циклический DNS; это объясняется проблемами кэширования с циклическим DNS, которые в случае больших серверов кэширования DNS имеют тенденцию искажать распределение для циклического DNS, в то время как случайный выбор на стороне клиента остается неизменным независимо от кэширования DNS. [12]

При таком подходе способ доставки списка IP-адресов клиенту может варьироваться и может быть реализован как список DNS (доставляемый всем клиентам без какого-либо циклического перебора) или путем жесткого кодирования его в списке. Если используется «умный клиент», который обнаруживает, что случайно выбранный сервер не работает, и подключается снова случайным образом, он также обеспечивает отказоустойчивость .

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

Для интернет-сервисов серверный балансировщик нагрузки обычно представляет собой программное обеспечение, которое прослушивает порт , к которому подключаются внешние клиенты для доступа к сервисам. Балансировщик нагрузки пересылает запросы на один из «бэкэнд»-серверов, который обычно отвечает балансировщику нагрузки. Это позволяет балансировщику нагрузки отвечать клиенту, не давая клиенту знать о внутреннем разделении функций. Это также не позволяет клиентам напрямую связываться с бэкэнд-серверами, что может иметь преимущества в плане безопасности, скрывая структуру внутренней сети и предотвращая атаки на сетевой стек ядра или несвязанные сервисы, работающие на других портах.

Некоторые балансировщики нагрузки предоставляют механизм для выполнения чего-то особенного в случае, если все внутренние серверы недоступны. Это может включать переадресацию на резервный балансировщик нагрузки или отображение сообщения об отключении.

Также важно, чтобы сам балансировщик нагрузки не стал единой точкой отказа . Обычно балансировщики нагрузки реализуются в парах высокой доступности , которые также могут реплицировать данные сохранения сеанса, если это требуется конкретным приложением. [13] Некоторые приложения программируются с иммунитетом к этой проблеме, смещая точку балансировки нагрузки по дифференциальным платформам совместного использования за пределы определенной сети. Последовательные алгоритмы, сопряженные с этими функциями, определяются гибкими параметрами, уникальными для конкретной базы данных. [14]

Алгоритмы планирования

Многочисленные алгоритмы планирования , также называемые методами балансировки нагрузки, используются балансировщиками нагрузки для определения того, на какой внутренний сервер направить запрос. Простые алгоритмы включают случайный выбор, циклический перебор или наименьшее количество подключений. [15] Более сложные балансировщики нагрузки могут учитывать дополнительные факторы, такие как сообщаемая нагрузка сервера, наименьшее время отклика, статус «включен/выключен» (определяется каким-либо опросом мониторинга), количество активных подключений, географическое положение, возможности или объем трафика, который был недавно назначен.

Упорство

Важным вопросом при работе службы с балансировкой нагрузки является то, как обрабатывать информацию, которая должна храниться между несколькими запросами в сеансе пользователя. Если эта информация хранится локально на одном внутреннем сервере, то последующие запросы, идущие на другие внутренние серверы, не смогут ее найти. Это может быть кэшированная информация, которая может быть пересчитана, и в этом случае балансировка нагрузки запроса на другой внутренний сервер просто приводит к проблеме производительности. [15]

В идеале кластер серверов за балансировщиком нагрузки не должен быть осведомлен о сеансах, так что если клиент подключается к любому внутреннему серверу в любое время, пользовательский опыт не изменяется. Обычно это достигается с помощью общей базы данных или базы данных сеансов в памяти, такой как Memcached .

Одним из основных решений проблемы данных сеанса является последовательная отправка всех запросов в сеансе пользователя на один и тот же внутренний сервер. Это известно как «персистентность» или «липкость». Существенным недостатком этой методики является отсутствие автоматического переключения на другой ресурс: если внутренний сервер выходит из строя, его информация о сеансе становится недоступной, и все сеансы, зависящие от него, теряются. Та же проблема обычно актуальна для серверов центральной базы данных; даже если веб-серверы «не имеют состояния» и не «липкие», центральная база данных является таковой (см. ниже).

Назначение на определенный сервер может быть основано на имени пользователя, IP-адресе клиента или случайно. Из-за изменений в воспринимаемом адресе клиента в результате DHCP , трансляции сетевых адресов и веб-прокси этот метод может быть ненадежным. Случайные назначения должны запоминаться балансировщиком нагрузки, что создает нагрузку на хранилище. Если балансировщик нагрузки заменен или выходит из строя, эта информация может быть утеряна, и назначения, возможно, придется удалить после периода ожидания или в периоды высокой нагрузки, чтобы избежать превышения пространства, доступного для таблицы назначений. Метод случайного назначения также требует, чтобы клиенты поддерживали некоторое состояние, что может быть проблемой, например, когда веб-браузер отключил хранение файлов cookie. Сложные балансировщики нагрузки используют несколько методов сохранения, чтобы избежать некоторых недостатков любого одного метода.

Другое решение — хранить данные сеанса в базе данных . Это, как правило, плохо для производительности, поскольку увеличивает нагрузку на базу данных: базу данных лучше всего использовать для хранения информации, менее временной, чем данные сеанса. Чтобы предотвратить превращение базы данных в единую точку отказа и улучшить масштабируемость , база данных часто реплицируется на нескольких машинах, а балансировка нагрузки используется для распределения нагрузки запросов между этими репликами. Технология Microsoft ASP.net State Server является примером базы данных сеансов. Все серверы в веб-ферме хранят данные своих сеансов на State Server, и любой сервер в ферме может извлекать данные.

В очень распространенном случае, когда клиентом является веб-браузер, простой, но эффективный подход заключается в хранении данных для каждого сеанса в самом браузере. Один из способов добиться этого — использовать cookie-файл браузера , соответствующим образом промаркированный по времени и зашифрованный. Другой способ — перезапись URL-адресов . Хранение данных сеанса на клиенте, как правило, является предпочтительным решением: тогда балансировщик нагрузки может свободно выбрать любой внутренний сервер для обработки запроса. Однако этот метод обработки данных о состоянии плохо подходит для некоторых сложных сценариев бизнес-логики, где полезная нагрузка состояния сеанса велика и пересчет ее при каждом запросе на сервере невозможен. Перезапись URL-адресов имеет серьезные проблемы безопасности, поскольку конечный пользователь может легко изменить отправленный URL-адрес и, таким образом, изменить потоки сеанса.

Еще одно решение для хранения постоянных данных — связать имя с каждым блоком данных и использовать распределенную хеш-таблицу для псевдослучайного назначения этого имени одному из доступных серверов, а затем сохранить этот блок данных на назначенном сервере.

Функции балансировщика нагрузки

Аппаратные и программные балансировщики нагрузки могут иметь ряд специальных функций. Основная функция балансировщика нагрузки — возможность распределять входящие запросы по нескольким внутренним серверам в кластере в соответствии с алгоритмом планирования. Большинство из следующих функций зависят от поставщика:

Асимметричная нагрузка
Можно вручную назначить соотношение, чтобы некоторые внутренние серверы получили большую долю рабочей нагрузки, чем другие. Иногда это используется как грубый способ учета того, что некоторые серверы имеют большую емкость, чем другие, и не всегда может работать так, как хотелось бы.
Приоритетная активация
Когда количество доступных серверов падает ниже определенного значения или нагрузка становится слишком высокой, можно подключить резервные серверы.
Разгрузка и ускорение TLS
Ускорение TLS (или его предшественника SSL) — это метод разгрузки вычислений криптографического протокола на специализированное оборудование. В зависимости от рабочей нагрузки обработка требований шифрования и аутентификации запроса TLS может стать основной частью нагрузки на ЦП веб-сервера; по мере увеличения нагрузки пользователи будут видеть более медленное время отклика, поскольку накладные расходы TLS распределяются между веб-серверами. Чтобы устранить эту нагрузку на веб-серверы, балансировщик может завершить соединения TLS, передавая запросы HTTPS как запросы HTTP на веб-серверы. Если сам балансировщик не перегружен, это не приведет к заметному снижению производительности, воспринимаемой конечными пользователями. Недостатком этого подхода является то, что вся обработка TLS сосредоточена на одном устройстве (балансировщике), что может стать новым узким местом. Некоторые устройства балансировки нагрузки включают специализированное оборудование для обработки TLS. Вместо того, чтобы обновлять балансировщик нагрузки, который является довольно дорогим выделенным оборудованием, может быть дешевле отказаться от разгрузки TLS и добавить несколько веб-серверов. Кроме того, некоторые поставщики серверов, такие как Oracle/Sun, теперь включают аппаратное обеспечение криптографического ускорения в свои ЦП, такие как T2000. F5 Networks включает специальную аппаратную карту ускорения TLS в свой локальный диспетчер трафика (LTM), которая используется для шифрования и дешифрования трафика TLS. Одним из явных преимуществ разгрузки TLS в балансировщике является то, что она позволяет выполнять балансировку или переключение контента на основе данных в запросе HTTPS.
Защита от распределенных атак типа «отказ в обслуживании» (DDoS)
Балансировщики нагрузки могут предоставлять такие функции, как файлы cookie SYN и отложенное связывание (внутренние серверы не видят клиента, пока он не завершит свое TCP-рукопожатие), чтобы смягчить атаки SYN-флуда и в целом перенести работу с серверов на более эффективную платформу.
HTTP-сжатие
Сжатие HTTP уменьшает объем данных, передаваемых для объектов HTTP, с помощью сжатия gzip, доступного во всех современных веб-браузерах. Чем больше ответ и чем дальше находится клиент, тем больше эта функция может улучшить время отклика. Компромисс заключается в том, что эта функция создает дополнительную нагрузку на ЦП балансировщика нагрузки и может быть выполнена веб-серверами.
TCP-разгрузка
Разные поставщики используют разные термины для этого, но идея заключается в том, что обычно каждый HTTP-запрос от каждого клиента представляет собой отдельное TCP-соединение. Эта функция использует HTTP/1.1 для консолидации нескольких HTTP-запросов от нескольких клиентов в один TCP-сокет для внутренних серверов.
TCP-буферизация
Балансировщик нагрузки может буферизировать ответы сервера и передавать данные медленным клиентам, позволяя веб-серверу освободить поток для других задач быстрее, чем если бы ему пришлось отправлять весь запрос клиенту напрямую.
Прямой возврат сервера
Вариант асимметричного распределения нагрузки, при котором запрос и ответ имеют разные сетевые пути.
Проверка здоровья
Балансировщик опрашивает серверы на предмет работоспособности прикладного уровня и удаляет неисправные серверы из пула.
HTTP-кэширование
Балансировщик хранит статический контент, чтобы некоторые запросы можно было обрабатывать без обращения к серверам.
Фильтрация контента
Некоторые балансировщики могут произвольно изменять трафик на своем пути.
HTTP-безопасность
Некоторые балансировщики могут скрывать страницы ошибок HTTP, удалять заголовки идентификации сервера из HTTP-ответов и шифровать файлы cookie, чтобы конечные пользователи не могли ими манипулировать.
Приоритетная очередь
Также известно как формирование скорости , возможность назначать разные приоритеты разным типам трафика.
Переключение с учетом содержимого
Большинство балансировщиков нагрузки могут отправлять запросы на разные серверы в зависимости от запрашиваемого URL-адреса, предполагая, что запрос не зашифрован (HTTP) или, если он зашифрован (через HTTPS), то HTTPS-запрос завершается (расшифровывается) на балансировщике нагрузки.
Аутентификация клиента
Аутентифицируйте пользователей с помощью различных источников аутентификации, прежде чем предоставить им доступ к веб-сайту.
Программное манипулирование трафиком
По крайней мере один балансировщик позволяет использовать язык сценариев для реализации пользовательских методов балансировки, произвольных манипуляций трафиком и многого другого.
Брандмауэр
Брандмауэры могут блокировать прямые подключения к внутренним серверам из соображений безопасности сети.
Система предотвращения вторжений
Системы предотвращения вторжений обеспечивают безопасность на уровне приложений в дополнение к безопасности на сетевом/транспортном уровне, обеспечиваемой брандмауэром.

Телекоммуникации

Балансировка нагрузки может быть полезна в приложениях с избыточными коммуникационными каналами. Например, у компании может быть несколько подключений к Интернету, гарантирующих сетевой доступ в случае отказа одного из соединений. Схема отказоустойчивости будет означать, что один канал предназначен для обычного использования, а второй канал используется только в случае отказа основного канала.

Используя балансировку нагрузки, оба канала могут использоваться все время. Устройство или программа отслеживает доступность всех каналов и выбирает путь для отправки пакетов. Использование нескольких каналов одновременно увеличивает доступную пропускную способность.

Кратчайший путь моста

TRILL (прозрачное соединение множества ссылок) облегчает Ethernet для получения произвольной топологии и позволяет разделять нагрузку попарно по каждому потоку с помощью алгоритма Дейкстры без настройки и вмешательства пользователя. Катализатором TRILL стало событие в медицинском центре Beth Israel Deaconess , которое началось 13 ноября 2002 года. [16] [17] Концепция Rbridges [18] [sic] была впервые предложена Институту инженеров по электротехнике и электронике в 2004 году, [19] который в 2005 году [20] отклонил то, что стало известно как TRILL, и в период с 2006 по 2012 год [21] разработал несовместимую вариацию, известную как Shortest Path Bridging .

IEEE одобрил стандарт IEEE 802.1aq в мае 2012 года [22] , также известный как Shortest Path Bridging (SPB). SPB позволяет всем соединениям быть активными через несколько равноценных путей, обеспечивает более быстрое время сходимости для сокращения простоев и упрощает использование балансировки нагрузки в топологиях ячеистых сетей (частично подключенных и/или полностью подключенных), позволяя трафику распределять нагрузку по всем путям сети. [23] [24] SPB разработан для того, чтобы фактически исключить человеческие ошибки во время настройки и сохранить природу plug-and-play, которая установила Ethernet как фактический протокол на уровне 2. [25]

Маршрутизация 1

Многие телекоммуникационные компании имеют несколько маршрутов через свои сети или к внешним сетям. Они используют сложную балансировку нагрузки для переключения трафика с одного пути на другой, чтобы избежать перегрузки сети на каком-либо конкретном канале, а иногда и для минимизации стоимости транзита через внешние сети или повышения надежности сети .

Другой способ использования балансировки нагрузки — мониторинг сети . Балансировщики нагрузки могут использоваться для разделения огромных потоков данных на несколько подпотоков и использования нескольких сетевых анализаторов, каждый из которых считывает часть исходных данных. Это очень полезно для мониторинга быстрых сетей, таких как 10GbE или STM64, где сложная обработка данных может быть невозможна на скорости передачи данных . [26]

Сети центров обработки данных

Балансировка нагрузки широко используется в сетях центров обработки данных для распределения трафика по многим существующим путям между любыми двумя серверами. [27] Она позволяет более эффективно использовать пропускную способность сети и снижает затраты на предоставление. В целом, балансировку нагрузки в сетях центров обработки данных можно классифицировать как статическую или динамическую.

Статическая балансировка нагрузки распределяет трафик, вычисляя хэш исходных и конечных адресов и номеров портов потоков трафика и используя его для определения того, как потоки назначаются одному из существующих путей. Динамическая балансировка нагрузки назначает потоки трафика путям, отслеживая использование полосы пропускания на разных путях. Динамические назначения также могут быть проактивными или реактивными. В первом случае назначение фиксируется после выполнения, тогда как во втором случае сетевая логика продолжает отслеживать доступные пути и переключает потоки по ним по мере изменения использования сети (с поступлением новых потоков или завершением существующих). Был предоставлен всесторонний обзор балансировки нагрузки в сетях центров обработки данных. [27]

Отказоустойчивость

Балансировка нагрузки часто используется для реализации отказоустойчивости — продолжения обслуживания после отказа одного или нескольких его компонентов. Компоненты постоянно контролируются (например, веб-серверы могут контролироваться путем извлечения известных страниц), и когда один из них перестает отвечать, балансировщик нагрузки информируется об этом и больше не отправляет ему трафик. Когда компонент снова подключается к сети, балансировщик нагрузки начинает перенаправлять трафик на него. Чтобы это работало, должен быть по крайней мере один компонент, превышающий емкость сервиса ( избыточность N+1 ). Это может быть намного менее затратным и более гибким, чем подходы к отказоустойчивости, когда каждый активный компонент сопряжен с одним резервным компонентом, который берет на себя управление в случае отказа ( двойная модульная избыточность ). Некоторые системы RAID также могут использовать горячее резервирование для аналогичного эффекта. [28]

Смотрите также

Ссылки

  1. ^ ab Сандерс, Питер; Мельхорн, Курт; Дицфельбингер, Мартин; Дементьев, Роман (11 сентября 2019 г.). Последовательные и параллельные алгоритмы и структуры данных: базовый набор инструментов . Springer. ISBN 978-3-030-25208-3.
  2. ^ Лю, Ци; Цай, Вэйдун; Цзинь, Дандан; Шэнь, Цзянь; Фу, Чжанцзе; Лю, Сяодун; Линге, Найджел (30 августа 2016 г.). «Точность оценки времени выполнения задач времени выполнения в неоднородной распределенной среде». Датчики . 16 (9): 1386. Bibcode : 2016Senso..16.1386L. doi : 10.3390/s16091386 . PMC 5038664. PMID  27589753. S2CID  391429. 
  3. ^ Alakeel, Ali (ноябрь 2009 г.). «Руководство по динамической балансировке нагрузки в распределенных компьютерных системах». Международный журнал компьютерной науки и сетевой безопасности (IJCSNS) . 10 .
  4. ^ Асгар, Саджад; Обанель, Эрик; Бремнер, Дэвид (октябрь 2013 г.). «Параллельный решатель SAT на основе динамического формовочного планирования заданий». 42-я международная конференция по параллельной обработке , 2013 г., стр. 110–119. doi :10.1109/ICPP.2013.20. ISBN 978-0-7695-5117-3. S2CID  15124201.
  5. ^ Пунета Сармила, Г.; Гнанамбигай, Н.; Динадайалан, П. (2015). «Обзор отказоустойчивости — алгоритмы балансировки нагрузки в облачных вычислениях». 2015 2-я Международная конференция по электронике и системам связи (ICECS) . стр. 1715–1720. doi :10.1109/ECS.2015.7124879. ISBN 978-1-4799-7225-8. S2CID  30175022.
  6. ^ "NGINX и алгоритм балансировки нагрузки "Power of Two Choices"". nginx.com . 2018-11-12. Архивировано из оригинала 2019-12-12.
  7. ^ "Тест-драйв "Сила двух случайных выборов" Балансировка нагрузки". haproxy.com . 2019-02-15. Архивировано из оригинала 2019-02-15.
  8. ^ Eager, Derek L; Lazowska, Edward D; Zahorjan, John (1 марта 1986 г.). "Сравнение адаптивного распределения нагрузки, инициируемого получателем и отправителем". Оценка производительности . 6 (1): 53–68. doi :10.1016/0166-5316(86)90008-8. ISSN  0166-5316.
  9. ^ Сандерс, Питер (1998). «Деревовидные вычисления как модель для параллельных приложений». Семинар по балансировке нагрузки на основе приложений (Alv '98), Мюнхен, 25–26 марта 1998 г. – Veranst. Vom Sonderforschungsbereich 342 «Werkzeuge und Methoden für die Nutzung Paralleler Rechnerarchitekturen». Ред.: А. Боде : 123. doi : 10.5445/ir/1000074497.
  10. ^ Запись адреса IPv4 (A)
  11. ^ Шаблон: Балансировка нагрузки на стороне клиента
  12. ^ abc Архитектура серверной части MMOG. Фронтенд-серверы и клиентская балансировка случайной нагрузки
  13. ^ "Высокая доступность". linuxvirtualserver.org . Получено 2013-11-20 .
  14. ^ Ранджан, Р. (2010). «Пир-ту-пир облачное обеспечение: обнаружение сервисов и балансировка нагрузки». Облачные вычисления .
  15. ^ ab "Балансировка нагрузки 101: азы". F5 Networks . 2017-12-05. Архивировано из оригинала 2017-12-05 . Получено 2018-03-23 .
  16. ^ "All Systems Down" (PDF) . cio.com . IDG Communications, Inc. Архивировано из оригинала (PDF) 23 сентября 2020 г. . Получено 9 января 2022 г. .
  17. ^ "All Systems Down". cio.com . IDG Communications, Inc. Архивировано из оригинала 9 января 2022 года . Получено 9 января 2022 года .
  18. ^ "Rbridges: Transparent Routing" (PDF) . courses.cs.washington.edu . Radia Perlman, Sun Microsystems Laboratories. Архивировано из оригинала (PDF) 9 января 2022 г. . Получено 9 января 2022 г. .
  19. ^ "Rbridges: Прозрачная маршрутизация". researchgate.net . Радия Перлман, Sun Microsystems; Дональд Истлейк 3-й, Motorola.
  20. ^ "TRILL Tutorial" (PDF) . postel.org . Дональд Э. Истлейк 3-й, Huawei.
  21. ^ "IEEE 802.1: 802.1aq — Shortest Path Bridging". ieee802.org . Институт инженеров по электротехнике и электронике.
  22. ^ Шуан Юй (8 мая 2012 г.). "IEEE ОДОБРЕЛА НОВЫЙ СТАНДАРТ IEEE 802.1aq™ SHORTEST PATH BRIDGING". IEEE. Архивировано из оригинала 14 мая 2013 г. Получено 2 июня 2012 г.
  23. ^ Питер Эшвуд-Смит (24 февраля 2011 г.). "Обзор мостов IEEE 802.1aq с кратчайшим путем" (PDF) . Huawei. Архивировано из оригинала (PDF) 15 мая 2013 г. Получено 11 мая 2012 г.
  24. ^ Джим Даффи (11 мая 2012 г.). «Крупнейшая система здравоохранения Иллинойса вытесняет Cisco, чтобы построить частное облако стоимостью 40 млн долларов». PC Advisor . Получено 11 мая 2012 г. Shortest Path Bridging заменит Spanning Tree в структуре Ethernet.
  25. ^ "IEEE Approves New IEEE 802.1aq Shortest Path Bridging Standard". Tech Power Up. 7 мая 2012 г. Получено 11 мая 2012 г.
  26. ^ Мохаммад Нурмохаммадпур, Каулиджи С. Рагхавендра Минимизация времени завершения потока с помощью адаптивной маршрутизации в межцентровых глобальных сетях. Постерные доклады IEEE INFOCOM 2018, DOI:10.13140/RG.2.2.36009.90720 6 января 2019 г.
  27. ^ ab M. Noormohammadpour, CS Raghavendra, «Управление трафиком в центре обработки данных: понимание методов и компромиссов», IEEE Communications Surveys & Tutorials , т. PP, № 99, стр. 1-1.
  28. ^ Отказоустойчивость и балансировка нагрузки IBM 6 января 2019 г.

Внешние ссылки