Что вы знаете о балансировке нагрузки виды
Перейти к содержимому

Что вы знаете о балансировке нагрузки виды

  • автор:

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

Рассказываем, как устроены алгоритмы и методы балансировки, какие существуют точки отказа в инфраструктуре, в чем преимущества облачных балансировщиков.

Изображение записи

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

Из статьи вы узнаете, как устроены алгоритмы и методы балансировки, какие существуют точки отказа, в чем разница между Load balancer и прокси.

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

Балансировка нагрузки — метод распределения сетевого трафика и задач между сетевыми устройствами.

На старте развития сервиса все компоненты (Frontend, Backend, база данных) могут находиться на одном сервере. Если нагрузка растет, его можно масштабировать вертикально: поменять конфигурацию сервера на более мощную или быстро добавить ресурсов в облачный сервер — добавить число vCPU или объем памяти.

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

выбор конфигурации

В облачных балансировщиках доступны различные комбинации протоколов, которые имеют дело с нагрузкой L4 и нагрузкой L7-уровней.

  • TCP–TCP — классическая L4-балансировка,
  • TCP–PROXY — информация о клиенте не теряется и передается в отдельном заголовке соединения,
  • UDP–UDP — UDP-протокол быстрее, чем TCP, но менее надежен,
  • HTTP–HTTP — L7-балансировка,
  • HTTPS–HTTP — L7-балансировка с шифрованием и терминацией SSL-сертификата на балансировщике.

тип балансировщика

Заключение

На этом мы закончим обзор балансировщиков нагрузки. Мы рассмотрели современные подходы балансировки сетевой нагрузки, изучили функционал Load balancer и алгоритмы балансировки.

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

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

Вопрос о планировании нагрузки следует решать ещё на ранней стадии развития любого веб-проекта. «Падение» сервера (а оно всегда происходит неожиданно, в самый неподходящий момент) чревато весьма серьёзными последствиями — как моральными, так и материальными. Первоначально проблемы недостаточной производительности сервера применительно к&nbsp ;возрастающим нагрузкам можно решать путем наращивания мощности сервера, или же оптимизацией используемых алгоритмов, программных кодов и т.п. Для решения проблемы высоких нагрузок сегодня чаще всего используется кластеризация: несколько серверов объединяются в кластер; нагрузка между ними распределяется при помощи комплекса специальных методов, называемых балансировкой. Помимо решения проблемы высоких нагрузок в кластере мы получаем зачастую еще и резервирование серверов друг на друга. Балансировка нагрузки может осуществляться при помощи как аппаратных, так и программных инструментов. Об основных методах, алгоритмах и инструментах балансировки мы бы хотели рассказать в этой статье.

Изображение записи

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

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

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

Уровни балансировки

Процедура балансировки осуществляется при помощи целого комплекса алгоритмов и методов, соответствующим следующим уровням модели OSI:

  • сетевому;
  • транспортному;
  • прикладному.

Рассмотрим эти уровни более подробно.

Балансировка на сетевом уровне

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

  • DNS-балансировка. На одно доменное имя выделяется несколько IP-адресов. Сервер, на который будет направлен клиентский запрос, обычно определяется с помощью алгоритма Round Robin (о методах и алгоритмах балансировки будет подробно рассказано ниже).
  • Построение NLB-кластера. При использовании этого способа серверы объединяются в кластер, состоящий из входных и вычислительных узлов. Распределение нагрузки осуществляется при помощи специального алгоритма. Используется в решениях от компании Microsoft.
  • Балансировка по IP с использованием дополнительного маршрутизатора.
  • Балансировка по территориальному признаку осуществляется путём размещения одинаковых сервисов с одинаковыми адресами в территориально различных регионах Интернета (так работает технология Anyсast DNS, о которой мы уже писали). Балансировка по территориальному признаку также используется во многих CDN (см. интересный пример реализации ).

Балансировка на транспортном уровне

Этот вид балансировки является самым простым: клиент обращается к балансировщику, тот перенаправляет запрос одному из серверов, который и будет его обрабатывать. Выбор сервера, на котором будет обрабатываться запрос, может осуществляться в соответствии с самыми разными алгоритмами (об этом ещё пойдёт речь ниже): путём простого кругового перебора, путём выбора наименее загруженного сервера из пула и т.п.
Иногда балансировку на транспортном уровне сложно отличить от балансировки на сетевом уровне. Рассмотрим следующее правило для сетевого фильтра pf в BSD-системах: так, например, формально тут идет речь про балансировку трафика на конкретном порту TCP (пример для сетевого фильтра pf в BSD-системах):

web_servers = "< 10.0.0.10, 10.0.0.11, 10.0.0.13 >" match in on $ext_if proto tcp to port 80 rdr-to $web_servers round-robin sticky-address 

Речь в нём идет о балансировке трафика на конкретном порту TCP.

Рассмотрим теперь другой пример:

pass in on $int_if from $lan_net \ route-to < ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) >\ round-robin 

В этом правиле речь о балансировке исходящего трафика на сетевом уровне. В нём не указано ни конкретного порта, ни конкретного протокола.

Различие между уровнями балансировки можно объяснить следующим образом. К сетевому уровню относятся решения, которые не терминируют на себе пользовательские сессии. Они просто перенаправляют трафик и не работают в проксирующем режиме.
На сетевом уровне балансировщик просто решает, на какой сервер передавать пакеты. Сессию с клиентом осуществляет сервер.

На транспортном уровене общение с клиентом замыкается на балансировщике, который работает как прокси. Он взаимодействует с серверами от своего имени, передавая информацию о клиенте в дополнительных данных и заголовках. Таким образом работает, например, популярный программный балансировщик HAProxy.

Балансировка на прикладном уровне

При балансировке на прикладном уровне балансировщик работает в режиме «умного прокси». Он анализирует клиентские запросы и перенаправляет их на разные серверы в зависимости от характера запрашиваемого контента. Так работает, например, веб-сервер Nginx, распределяя запросы между фронтендом и бэкендом. За балансировку в Nginx отвечает модуль Upstream. Более подробно об особенностях балансировки Nginx на основе различных алгоритмов можно прочитать, например, здесь .

В качестве ещё одного примера инструмента балансировки на прикладном уровне можно привести pgpool — промежуточный слой между клиентом и сервером СУБД PostgreSQL. С его помощью можно распределять запросы оп серверам баз данных в зависимости от их содержания,: например, запросы на чтение будут передаваться на один сервер, а запросы на запись — на другой. Подробнее о pgpool и специфике работы с ним можно почитать в этой статье ).

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

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

В числе целей, для достижения которых используется балансировка, нужно выделить следующие:

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

Очень желательно также, чтобы алгоритм балансировки обладал следующими свойствами:

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

Round Robin

Round Robin, или алгоритм кругового обслуживания, представляет собой перебор по круговому циклу: первый запрос передаётся одному серверу, затем следующий запрос передаётся другому и так до достижения последнего сервера, а затем всё начинается сначала.

Самой распространёной имплементацией этого алгоритма является, конечно же, метод балансировки Round Robin DNS. Как известно, любой DNS-сервер хранит пару «имя хоста — IP-адрес» для каждой машины в определённом домене. Этот список может выглядеть, например, так:

example.com xxx.xxx.xxx.2 www.example.com xxx.xxx.xxx.3 

С каждым именем из списка можно ассоциировать несколько IP-адресов:

example.com xxx.xxx.xxx.2 www.example.com xxx.xxx.xxx.3 www.example.com xxx.xxx.xxx.4 www.example.com xxx.xxx.xxx.5 www.example.com xxx.xxx.xxx.6 

DNS-сервер проходит по всем записям таблицы и отдаёт на каждый новый запрос следующий IP-адрес: например, на первый запрос — xxx.xxx.xxx.2, на второй — ххх.ххх.ххх.3, и так далее. В результате все серверы в кластере получают одинаковое количество запросов.

В числе несомненных плюсов этого алгоритма следует назвать, во-первых, независимость от протокола высокого уровня. Для работы по алгоритму Round Robin используется любой протокол, в котором обращение к серверу идёт по имени.
Балансировка на основе алгоритма Round Robin никак не зависит от нагрузки на сервер: кэширующие DNS-серверы помогут справиться с любым наплывом клиентов.

Использование алгоритма Round Robin не требует связи между серверами, поэтому он может использоваться как для локальной, так и для глобальной балансировки,.
Наконец, решения на базе алгоритма Round Robin отличаются низкой стоимостью: чтобы они начали работать, достаточно просто добавить несколько записей в DNS.

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

Также при балансировке по алгоритму Round Robin совершенно не учитывается загруженность того или иного сервера в составе кластера. Представим себе следующую гипотетическую ситуацию: один из узлов загружен на 100%, в то время как другие — всего на 10 — 15%. Алгоритм Round Robin возможности возникновения такой ситуации не учитывает в принципе, поэтому перегруженный узел все равно будет получать запросы. Ни о какой справедливости, эффективности и предсказуемости в таком случае не может быть и речи.

В силу описанных выше обстоятельств сфера применения алгоритма Round Robin весьма ограничена.

Weighted Round Robin

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

Least Connections

В предыдущем разделе мы перечислили основные недостатки алгоритма Round Robin. Назовём ещё один: в нём совершенно не учитывается количество активных на данный момент подключений.

Рассмотрим практический пример. Имеется два сервера — обозначим их условно как А и Б. К серверу А подключено меньше пользователей, чем к серверу Б. При этом сервер А оказывается более перегруженным. Как это возможно? Ответ достаточно прост: подключения к серверу А поддерживаются в течение более долгого времени по сравнению с подключениями к серверу Б.

Описанную проблему можно решить с помощью алгоритма, известного под названием least connections (сокращённо — leastconn). Он учитывает количество подключений, поддерживаемых серверами в текущий момент времени. Каждый следующий вопрос передаётся серверу с наименьшим количеством активных подключений.

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

В числе других усовершенствованных вариантов алгоритма Least Connections следует прежде всего выделить Locality-Based Least Connection Scheduling и Locality-Based Least Connection Scheduling with Replication Scheduling.

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

В алгоритме Locality-Based Least Connection Scheduling with Replication Scheduling каждый IP-адрес или группа IP-адресов закрепляется не за отдельным сервером, а за целой группой серверов. Запрос передаётся наименее загруженному серверу из группы. Если же все серверы из «родной» группы перегружены, то будет зарезервирован новый сервер. Этот новый сервер будет добавлен к группе, обслуживающей IP, с которого был отправлен запрос. В свою очередь наиболее загруженный сервер из этой группы будет удалён — это позволяет избежать избыточной репликации.

Destination Hash Scheduling и Source Hash Scheduling

Алгоритм Destination Hash Scheduling был создан для работы с кластером кэширующих прокси-серверов, но он часто используется и в других случаях. В этом алгоритме сервер, обрабатывающий запрос, выбирается из статической таблицы по IP-адресу получателя.

Алгоритм Source Hash Scheduling основывается на тех же самых принципах, что и предыдущий, только сервер, который будет обрабатывать запрос, выбирается из таблицы по IP-адресу отправителя.

Sticky Sessions

Sticky Sessions — алгоритм распределения входящих запросов, при котором соединения передаются на один и тот же сервер группы. Он используется, например, в веб-сервере Nginx. Сессии пользователя могут быть закреплены за конкретным сервером с помощью метода IP hash (подробную информацию о нём см. в официальной документации ). С помощью этого метода запросы распределяются по серверам на основе IP-aдреса клиента. Как указано в документации (см. ссылку выше), «метод гарантирует, что запросы одного и того же клиента будет передаваться на один и тот же сервер». Если закреплённый за конкретным адресом сервер недоступен, запрос будет перенаправлен на другой сервер. Пример фрагмента конфигурационного файла:

upstream backend

Начиная с версии 1.2.2 в Nginx для каждого сервера можно указывать вес.

Применение этого метода сопряжено с некоторыми проблемами. Проблемы с привязкой сессий могут возникнуть, если клиент использует динамический IP. В ситуации, когда большое количество запросов проходит через один прокси-сервер, балансировку вряд ли можно назвать эффективной и справедливой. Описанные проблемы, однако, можно решить, используя cookies. В коммерческой версии Nginx имеется специальный модуль sticky, который как раз использует cookies для балансировки. Есть у него и бесплатные аналоги — например, nginx-sticky-module .
Можно использовать метод sticky-sessions и в HAProxy — подробнее об этом можно прочитать, например, здесь.

Заключение

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

Что такое балансировка нагрузки в сети?

img

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

В этой статье вы узнаете, что такое балансировка нагрузки, как она работает и какие существуют различные типы балансировки нагрузки.

Что такое балансировка нагрузки?

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

Балансировка нагрузки применяется к уровням 4-7 в семиуровневой модели OSI.

  • L4. Направление трафика на основе сетевых данных и протоколов транспортного уровня, например IP-адреса и TCP-порта.
  • L7. Добавляет переключение содержимого в балансировку нагрузки, позволяя принимать решения о маршрутизации в зависимости от таких характеристик, как HTTP-заголовок, унифицированный идентификатор ресурса, идентификатор сеанса SSL и данные HTML-формы.
  • GSLB. Global Server Load Balancing расширяет возможности L4 и L7 на серверы на разных сайтах.

Почему важна балансировка нагрузки?

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

Есть несколько преимуществ балансировки нагрузки:

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

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

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

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

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

Как работает балансировка нагрузки?

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

Load Balancing

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

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

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

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

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

Аппаратное обеспечение (Hardware-Based)

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

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

Программное обеспечение (Software-Based)

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

Программные балансировщики нагрузки работают на обычных гипервизорах, контейнерах или как процессы Linux с незначительными накладными расходами на bare metal сервере.

Виртуальный (Virtual)

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

Облачный (Cloud-Based)

Облачная балансировка нагрузки использует облачную инфраструктуру. Вот некоторые примеры облачной балансировки нагрузки:

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

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

Различные алгоритмы балансировки нагрузки предлагают разные преимущества и сложность в зависимости от варианта использования. Наиболее распространенные алгоритмы балансировки нагрузки:

Round Robin (По-круговой)

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

Round Robin

Least Connections (Наименьшее количество подключений)

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

Least Connections

Least Response Time (Наименьшее время отклика)

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

Least Response Time

Hash (Хеш)

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

Hash

Custom Load (Пользовательская нагрузка)

Алгоритм Custom Load направляет запросы к отдельным серверам через SNMP (Simple Network Management Protocol). Администратор определяет нагрузку на сервер, которую балансировщик нагрузки должен учитывать при маршрутизации запроса (например, использование ЦП и памяти, а также время ответа).

Custom Load

Заключение

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

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

Что такое балансировка нагрузки?

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

В чем преимущества балансировки нагрузки?

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

Доступность приложения

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

  • Обслуживание или модернизация сервера приложений без простоя приложений
  • Автоматическое аварийное восстановление резервных площадок
  • Проверки работоспособности и предотвращение проблем, которые могут привести к простою

Масштабирование приложения

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

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

безопасность приложений;

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

  • Отслеживание трафика и блокировка вредоносного контента
  • Автоматическое перенаправление трафика атак на несколько внутренних серверов для минимизации воздействия
  • Маршрутизация трафика через группу сетевых брандмауэров для дополнительной безопасности

Производительность приложения

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

  • Равномерное распределение нагрузки между серверами для повышения производительности приложений
  • Перенаправление клиентских запросов на географически более близкий сервер, чтобы уменьшить задержку
  • Обеспечение надежности и производительности физических и виртуальных вычислительных ресурсов

Что такое алгоритмы балансировки нагрузки?

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

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

Алгоритмы статической балансировки нагрузки следуют фиксированным правилам и не зависят от текущего состояния сервера. Ниже приведены примеры статической балансировки нагрузки.

Метод круговой системы

Серверы имеют IP-адреса, указывающие клиенту, куда отправлять запросы. IP-адрес – это длинное число, которое трудно запомнить. Чтобы упростить задачу, система доменных имен сопоставляет имена веб-сайтов с серверами. Когда вы вводите aws.amazon.com в своем браузере, запрос сначала отправляется на наш сервер имен, который возвращает ваш IP-адрес вашему браузеру.

В циклическом методе балансировку нагрузки выполняет авторитетный сервер имен вместо специализированного аппаратного или программного обеспечения. Сервер имен возвращает IP-адреса разных серверов в ферме поочередно или по круговой системе.

Взвешенный циклический метод

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

Метод хеширования IP

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

Динамическая балансировка нагрузки

Алгоритмы динамической балансировки нагрузки проверяют текущее состояние серверов перед распределением трафика. Ниже приведены примеры алгоритмов динамической балансировки нагрузки.

Метод наименьшего подключения

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

Метод наименьшего количества подключений

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

Метод наименьшего времени отклика

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

Метод на основе ресурсов

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

Как работает балансировка нагрузки?

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

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

Какие существуют типы балансировки нагрузки?

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

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

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

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

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

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

Глобальная балансировка нагрузки на сервер

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

Балансировка нагрузки DNS

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

Какие существуют технологии балансировки нагрузки?

Балансировщики нагрузки бывают двух типов: аппаратные и программные.

Аппаратные балансировщики нагрузки

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

Программные балансировщики нагрузки

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

Сравнение аппаратных балансировщиков с программными балансировщиками нагрузки

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

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

Как AWS может помочь с балансировкой нагрузки?

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

  • Балансировщик нагрузки приложений направляет трафик для запросов на основе HTTP.
  • Балансировщик сетевой нагрузки маршрутизирует трафик на основе IP-адресов. Они идеально подходят для балансировки запросов на основе протокола TCP и User Datagram Protocol (UDP).
  • Балансировщик нагрузки шлюза направляет трафик на сторонние виртуальные устройства. Они идеально подходят для включения стороннего устройства, такого как сетевой брандмауэр, в сетевой трафик масштабируемым и простым в управлении способом.
  • Классический балансировщик нагрузки направляет трафик приложениям в сети Amazon EC2-Classic – единой плоской сети, которой вы делитесь с другими клиентами.

Балансировщик нагрузки можно выбрать в соответствии со своими требованиями. Например, Terminix, глобальный бренд по борьбе с вредителями, использует балансировщик нагрузки шлюза для обработки на 300 % большей пропускной способности. Second Spectrum, компания, предоставляющая технологию отслеживания спортивных трансляций на основе искусственного интеллекта, использует AWS Load Balancer Controller для снижения затрат на хостинг на 90 %. Code.org, некоммерческая организация, занимающаяся расширением доступа к информатике в школах, использует балансировщик нагрузки приложений для эффективной обработки всплеска трафика в 400 % во время онлайн-мероприятий по кодированию.

Начните балансировку нагрузки, создав аккаунт AWS уже сегодня!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *