Подсистема управления
Компоненты на верхнем уровне \ Подсистема управления
Это - описание требований к системе. По текущей реализации см. control.
Подсистема управления - внутрипроцессный сервер, загружаемый в адресное пространство процесса веб-сервера. Функции подсистемы управления:
- Централизованная балансировка нагрузки между узлами одной предметной области.
- Реализация предметно-независимого описания геометрии среды, в которой моделируется поле. Такой описание дополняется специальными для предметной области параметрами, семантика которых имеет значение исключительно в соответствующей подсистеме предметной области.
- Реализация политики безопасности, т.е. протоколов взаимодействия с Моделирующими пользователями с одной стороны, и с экземплярами подсистем предметной области с другой.
Последний пункт имеет значение, если система моделирования распределена, т.е. если пользователь, поставщик предметно-независимых сервисов и поставщик подсистемы предметной области - возможно разные лица с собственными, возможно конфликтующими, интересами.
Поскольку принципиальным является требование к масштабируемости, должна предоставляться возможность сборки всей моделирующей подсистемы в одну программу, объединяющую управляющую подсистему, конфигурируемый набор моделирующих подсистем и клиента в один процесс.
Интерфейс подсистемы управления, предоставляемый клиентам со стороны пользователя (напр., веб-серверу)

Функции
Все функции интерфейса экспортируются библиотекой управляющей подсистемы как С функции, т.е. имеют связывание в стиле C.
entry_point | основная точка входа, которая выполняет обработку запросов пользователя |
FreeData | функция освобождения памяти, выделенной внутрипроцессным сервером при генерации ответа на запрос функцией entry_point. |
GetErrorDescription | функция получения описания ошибки по целочисленному коду, возвращенному другими интерфейсными функциями управляющей подсистемы. |
SetErrorLogFile | Установка файла текстового журналирования ошибок, возникающих в границах управляющей подсистемы. |
Запросы
Конкретный пользовательский запрос задается параметром nFunctionId
функции entry_point. Возможные значения параметра следующие.
Символическое имя | Целочисленное значение | Действие |
---|---|---|
CreateModelId | 0 | создание новой модели |
CreateObjectId | 1 | создание нового элемента модели |
UploadModelId | 2 | загрузка модели со стороны пользователя. |
StartSimulationId | 3 | запуск физического моделирования в предметной области |
GetProcessStatusId | 4 | получение сведений о состоянии процесса моделирования |
GetSimulationResultsId | 5 | получение результатов моделирования |
StopSimulationId | 6 | досрочная остановка процесса моделирования (не реализовано) |
CloseSimulationId | 7 | закрытие моделирования и освобождение соответствующих ресурсов на сервере; если запущен процесс моделирования, то его остановка. |
Последовательность взаимодействия сторон пользователя, веб-сервера и подсистемы управления, если пользователь создает модель среды, моделирует поле и получает результаты, в терминах запросов, следующая.

- Моделирующий пользователь задает параметры среды моделирования - метрики и параметры предметной области - и передает их вместе с запросом на создание модели веб-серверу.
- Веб-сервер формирует запрос CreateModelId и вызывает entry_point подсистемы управления.
- Подсистема управления отвечает веб-серверу именем созданной модели, либо возвращает код ошибки.
- Если функцией entry_point возвращен ненулевой код ошибки, веб-сервер отвечает сообщением об ошибке клиенту, затем сценарий прерывается.
- Веб-сервер передает имя модели пользователю и освобождает буфер с именем вызовом функции FreeData.
- В любом порядке пользователь создает наполнение пространства моделируемого поля: как минимум, по одному источнику и плоскости, а также геометрическую модель, составленную из полигональных объектов. Для каждого из создаваемых объектов выполняется следующее.
- Моделирующий пользователь обращается к веб-серверу с запросом на создание объекта-элемента модели. Модель задается именем, которым подсистема управления ответила на запрос CreateModelId. Создаваемый объект параметризуется также данными, определенными классом объекта и предметной областью, для которой создается объект (см. CreateObjectId).
- Веб-сервер формирует запрос CreateObjectId и вызывает функцию entry_point.
- Подсистема управления отвечает веб-серверу именем созданного объекта, либо возвращает код ошибки.
- Если при создании объекта функция entry_point возвращает ненулевой код ошибки, соответствующий объект не создается, а сообщение об ошибке (см. GetErrorDescription) передается пользователю. При этом ни сценарий, ни цикл создания объектов не прерывается.
- Веб-сервер передает имя созданного объекта пользователю и освобождает буфер с именем вызовом функции FreeData.
- Моделирующий пользователь обращается к веб-серверу с запросом на запуск моделирования поля, параметризуя запрос именем модели пространства поля (возвращенным в результате запроса на создание модели) и именем (адресом) экземпляра подсистемы предметной области, который должен проводить моделирование.
- Веб-сервер Формирует запрос StartSimulationId и вызывает функцию entry_point.
- Подсистема управления отвечает веб-серверу именем процесса моделирования, либо возвращает код ошибки.
- Если функций entry_point возвращен ненулевой код ошибки, процесс моделирования не создается. Веб-сервер отвечает пользователю ошибкой. Пользователь может изменять модель и заново отправлять запросы на запуск моделирования.
- Веб-сервер передает имя созданного процесса пользователю.
- Пользователь начинает цикл опроса состояния процесса моделирования. При этом на каждой итерации выполняется следующее.
- Пользователь запрашивает у веб-сервера состояние процесса, идентифицируемого именем, возвращенным ответом на запрос на запуск моделирования.
- Веб-сервер формирует запрос GetProcessStatusId, с которым вызывает функцию entry_point.
- Если функция возвращает ненулевой код ошибки, сообщение об этом делегируется пользователю. Состояние подсистемы управления при этом не определено.
- Если пользователь указал неверный идентификатор процесса, функция entry_point завершится успешно (вернет нулевой код ошибки), однако ответом будет код
status_not_found
. В этом случае состояние подсистемы управления стабильно, и она по-прежнему может принимать запросы. В этом случае веб-сервер должен освободить память ответа вызовом FreeData.
- Веб-сервер делегирует ответ с состоянием процесса пользователю и освобождает буфер ответа подсистемы управления вызовом FreeData. Если процесс завершен, цикл прерывается.
- Пользователь запрашивает у веб-сервера результаты системы моделирования.
- Веб-сервер формирует запрос GetSimulationResultsId и вызывает функцию entry_point.
- Подсистема управления формирует ответ с таблицей результатов (см. GetSimulationResultsId) и возвращает их, вместе с нулевым кодом ошибки, веб-серверу.
- Если при создании объекта функция entry_point возвращает ненулевой код ошибки, сообщение об ошибке (см. GetErrorDescription) передается пользователю. При этом сценарий не прерывается.
- Веб-сервер Формирует ответ пользователю в необходимом формате и отправляет его.
- Пользователь посылает запрос на закрытие процесса моделирования, параметризуя запрос именем процесса, полученным при запуске моделирования (StartSimulationId).
- Веб-сервер формирует запрос CloseSimulationId и вызывает функцию entry_point с ним.
- Если подсистема управления возвращает ненулевой код ошибки, сообщение об этом передается пользователю. При этом фактического закрытия не происходит.
- Веб-сервер информирует пользователя об успешном закрытии процесса, при этом ответа управляющей системы нет (кроме кода ошибки), поэтому выходной буфер не должен освобождаться.
- Сценарий останавливается.
Интерфейс подсистемы управления, предоставляемый вычислительной подсистеме и подсистемам предметных областей
Подсистема предметной области реализуется в виде внутрипроцессного сервера, которому делегируются запросы управляющей системы. При распределении вычислений по сети[1] обращение к подсистеме предметной области осуществляется через заглушку - службу, реализующую взаимодействие по сети. При реализации подсистемы как части процесса управляющей подсистемы функции подсистемы предметной области вызываются непосредственно управляющей подсистемой.
Точка входа
Библиотека, реализующая предметную область должна предоставлять функцию DomainEntryPoint, имеющую связывание stdcall. Данная точка входа в качестве входных параметров должна принимать в запакованном виде четырехбайтовый целочисленный идентификатор запроса и соответствующие параметры.
Запросы
Запросы, обрабатываемые точкой входа.
Символическое имя | Целочисленное значение | Действие |
---|---|---|
DomainStartSimulation | 0 | запуск моделирования |
DomainGetProcessStatus | 1 | получение идентификатора состояния процесса моделирования |
DomainGetSimulationResultsSize | 2 | получение размера результатов моделирования |
DomainGetSimulationResults | 3 | получение результатов моделирования |
DomainCloseSimulation | 4 | закрытие процесса моделирования и освобождение соответствующих ресурсов в предметной области; если запущен процесс моделирования, то его остановка. |
Классы и их интерфейсы
Классы объектов при взаимодействии управляющей и моделирующей подсистем.
Интерфейсы, реализуемые подсистемой управления | |
---|---|
ILoadBalancer | Программный интерфейс, предоставляемый подсистемой управления для подсистемы предметной области. Предоставляет методы для регистрации задачи, которая должна быть выполнена как элемент параллельных вычислений, а также для регистрации свободного узла INode. |
IControlSystem | Базовый интерфейс подсистемы управления. |
IControlSystemDomainSide | Интерфейс, предоставляемый подсистеме предметной области, для установки соединения с подсистемой управления, а также для получения доступа к ее балансировщикам нагрузки. |
IGeometryModel | Интерфейс геометрической модели среды моделируемого физического поля. |
IObject | Базовый интерфейс для всех элементов геометрической модели. |
IPlainObject | Секущая плоскость вывода результатов моделирования. |
ISourceObject | Интерфейс объекта-источника моделируемого поля. |
IPolyObject | Интерфейс объекта-полигонального элемента геометрической модели. |
IObjectCollection | Программный интерфейс коллекции объектов, составляющих геометрическую модель. |
IPlainCollection | Программный интерфейс коллекции секущих плоскостей вывода результатов моделирования. |
ISourceCollection | Программный интерфейс коллекции источников моделируемого физического поля. |
IPolyCollection | Программный интерфейс коллекции полигональных элементов геометрической модели. |
const_object_iterator, object_iterator | Компонент, реализующий двунаправленный итератор, для перечисления всех элементов, составляющих геометрическую модель, т.е. принадлежащих соответствующей коллекции IObjectCollection. |
const_plain_iterator, plain_iterator | Компонент, реализующий двунаправленный итератор, для перечисления плоскостей вывода результатов моделирования, т.е. объектов, реализующих интерфейс IPlainObject и принадлежащих коллекции IPlainCollection соответствующей геометрической модели. |
const_source_iterator, source_iterator | Компонент, реализующий двунаправленный итератор, для перечисления источников моделируемого поля, т.е. объектов, реализующих интерфейс ISourceObject и принадлежащих коллекции ISourceCollection соответствующей геометрической модели. |
const_poly_iterator, poly_iterator | Компонент, реализующий двунаправленный итератор, для перечисления полигональных элементов геометрической модели, т.е. объектов, реализующих интерфейс IPolyObject и принадлежащих коллекции IPolyCollection модели. |
POINT3DEXT | Трехкомпонентный вектор-столбец для описания координат точки в пространстве или радиус-вектора. |
SIZE3DEXT | Трехкомпонентный вектор-столбец для описания трехмерного размера в виде разницы двух координат по соответствующим осям x, y и z. |
FACE3DEXT | Класс полигональной поверхности, композиция которых составляет элемент IPolyObject. |
Интерфейсы, реализуемые подсистемой предметной области. | |
IDomainSystem | Основной программный интерфейс экземпляра подсистемы предметной области. |
INode | Программный интерфейс, реализуемый узлом подсистемы предметной области и предоставляющий подсистеме управления методы для управления вычислительной нагрузкой, которая подается на узел. Физически может быть ассоциирован с вычислительным кластером (для реализации с локальным балансировщиком) либо с потоком на логическом ядре центрального процессора. |
- ↑ не реализовано