Балансировка нагрузки в информационных системах

16 Июля 2021

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

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

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

Цели и варианты распределения нагрузки

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

Если говорить о целях, то наиболее часто это:

  1. Удовлетворение запросов каждого пользователя. Системные ресурсы должны выделяться на обработку каждой заявки. Ситуации, когда обрабатывается один запрос, в то время как все остальные ожидают своей очереди должны быть исключены.
  2. Высокая эффективность работы каждого сервера. Нагрузка между всеми серверами, входящими в кластер, должна распределяться максимально равномерно. Нельзя допускать ситуацию, когда одни аппаратные устройства загружены на полную, а другие – простаивают.
  3. Минимизация времени обработки запроса и отклика. Время от момента получения заявки от пользователя и до выдачи ему результата должно быть оптимизировано.
  4. Предсказуемость. Изначально следует понимать, когда и при работе с какими нагрузками выбранный алгоритм будет максимально эффективным.
  5. Способность к масштабированию. При наращивании системы выбранные рабочие алгоритмы должны справляться с поставленными задачами.

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

На практике широкое применение получили следующие методы распределения:

  1. Статическое.
  2. Псевдодинамическое.
  3. Динамическое.
Аренда выделенного
сервера
Разместим оборудование
в собственном дата-центре
уровня TIER III.
Конфигуратор сервера
Подбор оборудования для решения Ваших задач и экономии бюджета IT

Статическое распределение

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

  1. Количество пользователей. На примере это выглядит так. У вас 2000 пользователей и 2 сервера в наличии. Если оборудование идентичное, то нагрузка между ним распределяется равномерно: по 1000 пользователей на каждый. Причем пользователей, которые будут по списку в диапазоне от 1 до 1000 система автоматически будет направлять на один сервер, а с 1001 до 2000 – на другой. Если же аппаратные мощности разные, то нагрузку можно распределить в соответствии с их производительностью, как пример 60/40.
  2. Географическое пребывание. Выполняется территориальное распределение. Те пользователи, которые находятся в пределах 500 км (как пример) от одного сервера будут направляться на него, а остальные – на другой.

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

Псевдодинамическое распределение

Продолжим рассматривать предыдущие примеры. Что будет, если активность пользователей 1-1000 из списка станет в какой-то момент времени ощутимо больше, чем из группы 1001-2000? Как будет работать система, если общее число пользователей повысится? Что произойдет, если с одной географической области будет направляться гораздо больше запросов, чем с другой? Активность пользователей также может зависеть от сезона, дня недели, времени суток и других параметров.

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

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

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

Псевдодинамическое распределение не позволяет неравномерно разделять нагрузку между прикладными серверами. И это еще один из недостатков такого решения.

Динамическое распределение

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

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

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

virtual-mash-1.pngНаряду с методами балансировки, существует и такое понятие, как уровни балансировки. Этот параметр определяет соответствие выбранных алгоритмов работы уровням OSI-модели, в частности:

  1. Сетевому.
  2. Транспортному.
  3. Прикладному.

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

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

  • Использование DNS-сервера. В этом случае на имя одного домена выделяется несколько адресов. Поступающий пользовательский запрос будет распределяться между ними при помощи алгоритма Round Robin.
  • Применение дополнительного маршрутизатора. Выполняется балансировка на IP-адресу.
  • Создание NLB-кластера. Здесь серверы разделяются на те, которые принимают входящие запросы и те, которые будут заниматься вычислениями. Подобное решение на практике применяет корпорация Майкрософт.
  • Размещение однотипных сервисов с идентичными адресами в разных интернет-регионах. Актуально при выполнении балансировки по территориальному признаку. На практике такой вариант применяют многие CDN. Также на ней работает и Anyсast DNS-технология.

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

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

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

Особенности балансировки систем на прикладном уровне

В данном случае балансировщик также работает как прокси-сервер, но только «умный». Он воспринимает запросы, поступающие от пользователей, анализирует их и перенаправляет на те серверы, которые смогут дать исчерпывающий ответ. То есть здесь уже оценивается характер контента, который нужен клиенту. Яркий пример такого балансировщика – веб-сервер Nginx. В нем предусмотрен модуль Upstream, который и распределяет запросы между фронтендом и бэкендом.

На балансировщике такого типа работает и pgpool. Это своего рода промежуточное звено между клиентом и сервером. Он способен передавать к одной машине запросы на чтение, к другой – на запись.

Потенциальные риски при балансировке нагрузки

bezopasnost-tsod-1.jpgНаряду с высокой адаптивной производительностью, повышенной стабильностью работы (минимальной отказоустойчивостью), высоким уровнем ремонтопригодности, распределенные системы имеют и ряд недостатков. К наиболее весомым из них относят:

  • Хранение сессии.

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

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

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

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

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

Если ищите отличный и долговечный результат в балансировке нагрузки, общайтесь за услугами к специалистам компании «Xelent». Уже сегодня вы можете получить компетентные консультации по телефону или через форму обратной связи.

Популярные услуги
Получить консультацию специалиста
Персональный ассистент
Cloud.Xelent