Содержание
Чтобы создать инфраструктуру, способную работать надёжно и безотказно, следует распределить нагрузку на серверы примерно поровну. Для такой работы применяется балансировщик нагрузки – он выполняет внутри кластера дистрибуцию запланированных задач. При использовании данного сервиса даже при отказе какого-либо из серверов система продолжит работу.
Балансировка нагрузки на сеть
Метод, с использованием которого производится распределение поступающего трафика между объединенными в сеть устройствами, называется балансировкой нагрузки.
В период, когда сервис только начинает развитие, на одном сервере могут содержаться все его составляющие – база данных, Frontend и т.д. При возрастании нагрузки стоит провести вертикальное масштабирование: для этого конфигурацию сервера меняют на усиленную или увеличивают возможности облачного сервера (например, расширяют память). Этих действий, как правило, хватает на небольшой период времени, но очень скоро вновь будет ощущаться нехватка мощности. В результате потребуется распределять задачи по серверам. Frontend пойдет на один сервер, Backend направится на другой, на третьем будет размещена база данных. Все эти сервера могут быть также вертикально проапгрейдены.
Следующим этапом развития инфраструктуры является горизонтальное масштабирование. В этом случае увеличивается число серверов, предназначенных для выполнения одной-единственной задачи. При таком варианте удается справляться с нагрузками более эффективно, организация инфраструктуры становится исключительно гибкой. Но в нее необходимо вводить ещё один элемент – балансировщик, предназначенный для распределения трафика.
Можно применить балансировку для оборудования таких видов:
- Прокси-сервер.
- DPI.
- Коммутатор.
- Сервер DNS.
- Брандмауэр.
- Кластер.
- Адаптер сетевой.
Эффективная балансировка нагрузки невозможна без грамотного администрирования сети. Наши специалисты предлагают полный комплекс услуг по администрированию сетей заказчика, что обеспечивает стабильность и надежность вашей IT-инфраструктуры.
Зачем применяют балансировщик
При увеличении количества пользователей и многократном возрастании трафика на сервис усиливается нагрузка. Применение балансировщика в таких случаях помогает избежать перегрузки трафиком, обеспечит эффективное перемещение данных в заданную точку.
Основная цель его применения – обеспечение отказоустойчивости в условиях высокой нагрузки. При увеличении уровня сложности софта растет и число точек отказа, причем их расположение в инфраструктуре может быть на разных уровнях. Применение балансировщика защитит от появления точки отказа – при выходе из строя данной части системы ее работа останавливается полностью. В случае отказа одного из серверов использование специального сервиса помогает поровну направить трафик на прочие элементы.
Благодаря балансировщику обслуживание запросов ускоряется, а расход ресурсов происходит довольно экономно. Его работа также поможет масштабировать инфраструктуру максимально плавно. Так, при введении в кластер нового сервера загрузка нового звена производится максимально аккуратно и без проволочек.
Ещё одна не менее важная задача, выполняемая балансировщиком, – обеспечение защиты от DDoS-атак. Она осуществляется за счёт задержки ответа, в этом случае клиент остаётся незаметным для фоновых серверов, пока сигнал не будет подтвержден. При помощи балансировщика исходящий трафик пропускается через определенные алгоритмы, способные отсекать TCP ACK/FIN/RST-атаки.
Точки отказа – какие бывают
Слабым местом может оказаться подключение доступа к сети, оборудование для его улучшения (IP, а также оборудование, при помощи которого трафик идёт на сервера).
Другой вариант – серверы виртуального типа или физическое оборудование, с помощью которых идёт работа сервиса. Чтобы не допускать падения системы, они резервируются.
Проблемы может создать оборудование, настроенное для балансирования. В случаях, когда отказоустойчивость чрезвычайно важна, выполняется резервирование балансировщиков.
Информация об уровнях распределения нагрузки на OSI
OSI (Open System Interconnection) – это модель стека работы сетевых протоколов. Согласно ей, устройства распределяются по уровням, различающимся по функциям. На тех, что обозначены как L4 и L7, осуществляется распределение данных.
- L1. Начальный, так называемый физический уровень. Служит для проведения обмена от одного физического устройства к другому сигналами, представленными в битах.
- L2. Канальный, обеспечивающий адресацию в физическом варианте. На нем биты превращаются в кадры, которым присваиваются адреса – для отправления и получения.
- L3. Сетевой. Здесь выстраивается маршрут, между видами оборудования обеспечивается логическая адресация. Для кадров происходит объединение в пакеты. С помощью маршрутизатора проверяются вероятные сбои в работе сети.
- L4. Коммуникация между конечными видами устройств обеспечивается за счёт транспортного уровня. Его основные функции – уменьшить вероятность задержек при передаче информации и обеспечить, чтобы ее целостность не нарушалась. Пакеты, в которые объединены данные, на основании протокола делятся по следующим принципам:
- Протокол TCP подразумевает деление потока информации на части в случаях, когда пропускные возможности сети оказываются превышенными.
- UPD (распределение на датаграммы) – образуется отдельно выделенный фрагмент пакета, дополненный адресами и заголовками. Путешествие датаграмм происходит без проблем для адресата.
Уровень L4 выступает в качестве связующего звена по отношению к таким группам:
- L1-L3 – уровни среды (Media layers). На них осуществляется передача данных от одного сетевого устройства к другому.
- L4-L7 – уровни хоста. Работа Host layers происходит как на мобильных гаджетах, так и на стационарном оборудовании.
Балансировщик получаемой нагрузки функционирует на транспортном уровне. Его задачи включают трекинг данных о портах приложений, протоколах, оптимальное объединение с балансировочными алгоритмами, а также выбор сервера, характеризующегося самым коротким периодом ожидания ответа. Последующие рабочие уровни таковы:
- L5. Сеансовый уровень – его основной задачей выступает управление сеансами связи. Он обеспечивает синхронизацию задач, их формирование, поддержку при отсутствии активности, окончание сеанса. Далее каждый из уровней работает уже с очищенными данными.
- L6. Уровень представления. Он занимается шифровкой данных, преобразуя их в понятное пользователю и удобное для дальнейшей работы состояние.
- L7. Прикладной, обеспечивает взаимодействие сети и пользователя. С помощью верхнего уровня производится доступ к сетевым службам. Действующий на L7 протокол HTTP производит идентификацию сеансов. Затем проверяет файлы cookie и производит транспортировку на сервер запросов, исходящих от конкретного пользователя.
Как функционирует HTTP-протокол
В OSI верхний уровень находится во взаимодействии с предшествующими ему. С его помощью осуществляется проверка трафика L4, выполняется отправление запросов к L4 и отчётов о совершенных ошибках, передача служебных данных.
Модель OSI – подробности работы
Как оценивается доступность: сервис проверяет статусы серверов, при падении какого-либо из них выполняет перенаправку соединения. Проверка состояния серверов производится по нескольким параметрам:
- Выполняются запросы для проверки, проводится настройка интервалов с точностью до секунды.
- Оценивается период ожидания.
- Проверяются коды ответов для HTTP, HTTPS.
- При определенном количестве совершенных запросов, направленных один за другим, принимается решение о продолжении работы или остановке.
Соединения настраиваются по следующей схеме: вхождение запроса – запуск балансировщика – сервер.
Настройки, которые задают для работы:
- Число соединений ограничивается с учётом полученных задач.
- Период, в течение которого ожидается ответ, определяется таймаутом соединения.
- Подключение является действующим даже при прекращении передачи информации в течение периода действия заданного таймаута неактивности.
- TSP-таймаут – период, на протяжении которого ожидается передача информации с целью проверки созданного соединения.
Алгоритмы балансировки
Планирование
Согласно этому алгоритму происходит планирование запросов, поступающих через серверы в кластере. Благодаря ему возможно успешно решить разные задачи. Среди них оптимизация расхода ресурсов, получение пропускной способности в максимальном количестве, укорачивание времени на ожидание отклика, недопущение возникновения перегрузок в составляющих системы.
BGP Anycast
Это название удобного протокола маршрутизации, где для некоторого количества серверов применяется один IP. При получении запроса отвечает на него тот, который в данный момент испытывает самую низкую нагрузку. Так удается уменьшить вероятность остановок, способных возникать в процессе принятия трафика. Благодаря протоколу обеспечивается удобство вывода и добавляются серверы.
Round Robin
Балансировщик может использовать данный алгоритм, способный обеспечить равномерное распределение запросов по серверам, основываясь на заданном весе.
Least connections
Этот вариант способен при работе учитывать число актуальных подключений к серверу. Создаваемые запросы будут направлены на тот, который в данный момент менее всего загружен. Должна осуществляться балансировка между несколькими Frontend-серверами. После установки соединения с одним из них отправка запросов пойдет на него. Это уязвимое место – при его соблюдении пользователь в конце концов окажется подключенным к наименее загруженному серверу, и авторизацию придется проходить заново.
Для решения этой проблемы придуман Sticky Sessions. Его деятельность обеспечивает закрепление сервера, выполнявшего обработку запроса, для сессии определенного пользователя. Но если начальный сервер окажется недоступным, сессия будет начата на другом.
Как производится распределение нагрузки и проксирование
Сервисы, обеспечивающие балансировку, и обратные прокси-серверы выступают в коммуникации в качестве посредников. Эти термины нередко применяют как взаимозаменяемые. Балансировщик с функцией отказоустойчивости представляет собой обратный прокси, задача которого состоит в распределении трафика между услугами, оказываемыми компанией, размещенными в обособленных друг от друга регионах.
Клиентский запрос принимается обратным прокси-сервером, направляется на другой, способный выполнить задачу, после чего возвращается ответ. Не каждый прокси-сервер выполняет распределение, но именно эта функция является первичной для большинства из них.
Задача балансировщика – правильно распределить нагрузку в виде входящих запросов по объединенным в группу серверам, при этом клиентам возвращается ответ. Применение балансировщика оправдано, если количество запросов очень большое, и один сервер не способен справиться с задачей. В случае проблемы с точкой отказа она может быть решена развёртыванием некоторого количества серверов.
Удобства применения облачного распределителя
Ещё недавно балансировщики существовали исключительно аппаратные, для них настраивали специальное оборудование. Но в настоящее время повсеместно применяют облачные варианты, обладающие несомненными преимуществами.
- Облачный балансировщик можно за короткое время развернуть в совершенно новой конфигурации.
- Простые распределители иногда не выдерживали получаемой нагрузки и ломались. Облачные варианты отличаются большей выносливостью.
- Балансировщик облачного типа обходится несравненно дешевле.
- Очень легко при необходимости создать балансировщик в панели управления, выбрав нужный вид сервиса, добавить правила.
- Если ведётся работа при помощи Terraform, балансировщики можно без проблем создать путем описания инфраструктуры, загружая файлы конфигурации.
- В облачных вариантах могут применяться специальные комбинации протоколов, предназначенные для работы с нагрузками по типу уровней L4, L7.