Компаниец В.А., Громовой П.Ю., Пискунова Т.С.

Киевский национальный университет технологий и дизайна

Принципы распределения нагрузки в сетях передачи данных сети

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

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

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

Триангуляция

Работает на уровне TCP/IP. Первый из серверов, установивший соединение, решает, обслуживать этот запрос самому или переслать его другому серверу. В последнем случае новый сервер распознает, что пакет был перенаправлен, и отвечает непосредственно клиенту. Последующие пакеты этого TCP-соединения продолжают поступать на первый сервер и перенаправляться. Клиент и два сервера образуют треугольник, что и объясняет название метода.

HTTP-перенаправление

Работает на уровне HTTP. Первоначально выбранный сервер возвращает клиенту новый URL и код ответа 301, предлагающий запросить искомый ресурс по новому URL. Браузер устанавливает новое TCP-соединение с другим сервером. Это увеличивает "сетевую" часть времени задержки ответа, но во многих случаях может быть компенсировано более быстрой обработкой запроса на новом сервере, особенно, если первый перегружен. Браузеры, однако делают этот механизм видимым для пользователя, меняя поле ввода URL, что может вызывать проблемы у некоторых специализированных приложений.

Рис. 1 – Принцип работы триангуляции

Демон серверов

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

Рис. 2 – Блок контроллера

На основании сформированной базы данных происходит формирование краткосрочного прогноза о состоянии серверной сети.

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

Демон получает информацию о загрузке информационных серверов от агентов расположенных на них:

- процент загрузки центрального процессора, если на информационном сервере стоит несколько процессоров, то передается средняя загрузка;

- процент использования канала связи;

- процент загрузки жесткого диска;

- процент использования оперативной памяти.

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

Безопасность

Отдельным сервисом в случае использования контроллеров является безопасность. Её организация основывается на политике криптографии открытых ключей и системы SSL.

SSL поддерживает три типа аутентификации: аутентификация обеих сторон (клиент — сервер), аутентификация сервера с неаутентифицированным клиентом и полная анонимность. Каждый раз, когда сервер аутентифицируется, канал безопасен от атаки человек посредине, но полностью анонимная сессия по своей сути уязвима к такой атаке. Каждая сторона отвечает за проверку то, чтобы сертификат другой стороны был действителен и не был отменен. Главная цель процесса обмена ключами — это создание секрета клиента (pre_master_secret), известного только клиенту и серверу. Секрет (pre_master_secret) используется для создания общего секрета (master_secret). Общий секрет необходим для того чтобы создать сообщение для проверки сертификата, ключей шифрования, секрета MAC (message authentication code) и сообщения «finished». При посылке верного сообщения «finished», тем самым стороны докажут что они знают верный секрет (pre_master_secret).

Анонимный обмен ключами

Полностью анонимная сессия может быть установлена при использовании алгоритма RSA или Диффи-Хеллмана для создания ключей обмена. В случае использования RSA клиент шифрует открытое сообщение (pre_master_secret) с помощью открытого ключа несертифицированного сервера, который клиент узнает из сообщения обмена ключами от сервера. Результат посылается в сообщении обмена ключами от клиента. Поскольку перехватчик не знает открытого ключа сервера, то ему будет невозможно расшифровать открытое сообщение (pre_master_secret). При использовании алгоритма Диффи-Хеллмана открытые параметры сервера содержатся в сообщении обмена ключами от сервера, и клиенту посылаются в сообщении обмена ключами от клиента. Перехватчик, который не знает приватных значений, не сможет вскрыть открытое сообщение (pre_master_secret).

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

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

Литература:

 

1.      Бройдо В.Л. Вычислительные системы, сети и телекоммуникации. Спб.: Питер, 2002. - 688 С.

2.     Дэвис Д., Барбер Д., Прайс У., Соломонидес С. Вычислительные сети и сетевые протоколы - М.: Мир, 1980. - 563 С.

3.     Иванов П. Управление информационными системами: базовые концепции и тенденции развития. / Открытые системы, №4, 2006, С. 37-43.

4.     Киллелиа П. Тюнинг WEB-сервера Спб.: Питер, 2003. - 528 С.