6.2. Начальный момент времени и соединение узлов с сервером
В начальный момент времени сервер находится в состоянии ожидания запросов от вычислительных узлов. Пусть у нас есть некоторое количество вычислительных узлов, и все они запущены.
Каждый узел все время пока он функционирует, периодически посылает запросы “дай задание” на сервер. Если произошел сбой соединения, либо сервер еще не готов узел снова ожидает некоторое время и повторяет попытку.
6.3 Подключение и идентификация узла
Предположим, что некоторый вычислительный узел соединился с сервером. Первым о соединении узнает серверный коммуникационный блок. Он не реализует никакой логики, просто принимает запрос, разбирает его заголовки, и передает данные запроса в серверный блок логики.
Возможны четыре типа соединений:
“Дай задание” – первичный запрос результата;
“Получи результат - дай следующее задание” – возврат рассчитанного задания и запрос следующего. Этот запрос делается в одной сессии для оптимизации сетевого взаимодействия;
“Получи задание” – возврат рассчитанного задания и сообщение о завершении работы. Сообщение о завершении работы может произойти и без возврата результата, это важно, чтобы корректно определить на сервере статус вычислительного узла;
Сообщение о статусе расчета на данном узле. Это информационный тип запросов, который важен при длительных вычислениях, чтобы сервер “помнил” о существовании узла, такие запросы передаются напрямую в блок сбора статистике о ходе вычислений и прямо не влияют на ход вычислений.
Любой подключившийся узел в независимости от типа соединения проходит процедуру идентификации, где однозначно находится соответствующая ему запись в таблице узлов, либо, если это первое общение данного узла, заводится новая запись.
6.4 Первичный запрос задания
В начальный момент времени все узлы обращаются к серверу с запросом “дай задание”. Предположим, что некоторый узел установил соединения и прошел процедуру идентификации.
На блок логики сервера поступил запрос о выдаче новой порции вычислений, блок логики в свою очередь передал этот запрос через API прикладной программе, которая вернула порцию данных, необходимую для расчета. Серверная часть прикладной программы не знает, на каком узле будет производиться расчет, она просто выдает очередной блок данных по номеру, который генерирует блок логики сервера.
Затем задание на расчет через блок логики, серверный коммуникационный блок, клиентский коммуникационный блок попадает на узел.
6.5 Расчет задания на узле
Получив задание, узел запускает прикладную программу для расчета. По ходу расчета фоновый процесс блока логики узла периодически посылает информацию, что узел находится в состоянии вычисления полученной порции. Данный процесс необходим, чтобы для сложных по времени вычисления порций данных, сервер не посчитал узел выбывшим из вычислений.
Окончив расчет, узел посылает результат расчет на сервера. Для этого используется запрос “Получи результат - дай следующее задание”.
6.6 Получение сервером результатов вычислений
Пройдя серверный коммуникационный блок, процедуру идентификации, проверку корректности запрос через блок логики сервера передает прикладной программе результат вычислений.
После этого происходит запрос новой порции вычислений, с точки зрения прикладной программы он полностью аналогичен первичному запросу задания.
6.7 Окончание вычислений
Предположим, что в некоторый момент времени все задания для расчета уже розданы. Тогда очередной узел, при возврате результата своего расчета получит ответ от сервера “Нет заданий”, после чего он отключится и перейдет в режим первичного запроса заданий. По мере окончания вычислений все узлы вернут результаты порученных им расчетов, и сервер зафиксирует окончание вычислений.
6.8 Структуры данных сервера для хранения информации об узлах
В таблице приведена структура базы данных, которая ведется сервером во время вычислений. Эти данные используются для управления ходом вычисления, а также для сбора и отображения статистики о ходе вычислений.
Тип поля | Название поля | Описание |
Идентификация сессии: основной способ идентификации узла | ||
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. |
... предприятия. Для дальнейшего развития Системы необходимо рассчитать экономическую эффективность проекта. Для этого необходимо выбрать направление распространения Системы. Заказчиком системы выступало закрытое акционерное общество "Белгородский бройлер". Произведем расчет экономической эффективности проекта с точки зрения заказного проекта. Структура экономической части при создании программного ...
... , но впоследствии стали применяться для управления проектами в самых различных отраслях. В настоящее время в это семейство продуктов входят: · Open Plan – система календарного планирования и контроля, предназначенная для управления реализацией как отдельных проектов, так и сложных проектных программ в срок и в рамках бюджета; · Cobra – система управления бюджетом проектов, ...
... 1000 10 1000 Итого: - - 11000 Отчисления во внебюджетные фонды 36%: - - 3960 Итого с отчислениями во внебюджетные фонды: 14960 Затраты на разработку программной системы аттестации ИТ-специалистов Расчёт релевантных затрат на разработку проекта приведён в таблице 11.9. Таблица 11.9 Расчёт релевантных затрат на разработку программной системы N п/п ...
... по соответствующему полю). В окне Конструктора таблиц созданные связи отображаются визуально, их легко изменить, установить новые, удалить (клавиша Del). 1 Многозвенные информационные системы. Модель распределённого приложения БД называется многозвенной и её наиболее простой вариант – трёхзвенное распределённое приложение. Тремя частями такого приложения являются: ...
0 комментариев