Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Подключение и идентификация узла

 

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

Возможны четыре типа соединений:

“Дай задание” – первичный запрос результата;

“Получи результат - дай следующее задание” – возврат рассчитанного задания и запрос следующего. Этот запрос делается в одной сессии для оптимизации сетевого взаимодействия;

“Получи задание” – возврат рассчитанного задания и сообщение о завершении работы. Сообщение о завершении работы может произойти и без возврата результата, это важно, чтобы корректно определить на сервере статус вычислительного узла;

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

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

 

Первичный запрос задания

 

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

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

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

 

Расчет задания на узле

 

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

Окончив расчет, узел посылает результат расчет на сервера. Для этого используется запрос “Получи результат - дай следующее задание”.

 

Получение сервером результатов вычислений

 

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

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


Окончание вычислений

 

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

 

Структуры данных сервера для хранения информации об узлах

 

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

 

Тип поля Название поля Описание

Идентификация сессии: основной способ идентификации узла

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

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

String gcCode Код клиента задается пользователем на узле, используется при расчете статистики. Может быть не уникальным, тогда в статистике все узла с данным кодом будут суммироваться.
String String Cluster Node   Код клиента обычно состоит из двух частей: имени кластера и имени узла. Данное деление достаточно условно и необходимо только для более удобного сбора и отображения статистики. Если данное деление не используется код кластера остается пустым.
Double MHz Частота процессора на узле.
String IP Последний IP адрес, с которого происходил запрос от данного узла (он может изменяться в случае коммутируемого соединения).
String OS Операционная система узла.

Данные о ходе вычислений

Double Last_access_perf Производительность последнего расчета на данном узле. В начальный момент времени содержит -1.
Long Last_access_time Время последнего расчета на данном узле. В начальный момент времени содержит -1.
Boolean IsActive Флаг активности клиента, если сервер считает, что данный узел выбыл из вычислений, флаг устанавливается в значение “Ложь”. После любого соединения от узла принимает значение “Истина”.
Long Portion Номер порции, которую в данный момент вычисляет узел. Если узел не получил данных для расчета содержит -1.
Long Portion_time Стартовый период времени, в который была передана последняя порция для расчета данным узлом. Если узел не получил данных для расчета содержит -1.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...