Подсистема управления

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
Компоненты на верхнем уровне \ Подсистема управления

Это - описание требований к системе. По текущей реализации см. Реализация подсистемы управления.

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

  • Централизованная балансировка нагрузки между узлами одной предметной области.
  • Реализация предметно-независимого описания геометрии среды, в которой моделируется поле. Такое описание дополняется специальными для предметной области параметрами, семантика которых имеет значение исключительно в соответствующей подсистеме предметной области.
  • Реализация политики безопасности, т.е. протоколов взаимодействия с Моделирующими пользователями с одной стороны, и с экземплярами подсистем предметной области с другой.

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

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


Интерфейс подсистемы управления, предоставляемый клиентам со стороны пользователя (напр., веб-серверу)

Схематичный интерфейс управляющей подсистемы, предоставляемый веб-серверу. Более подробно информация представлена в описании соответствующих запросов.

Функции

Все функции интерфейса экспортируются библиотекой управляющей подсистемы как С функции, т.е. имеют связывание в стиле C.

ControlSystemEntryPoint Основная точка входа, которая выполняет обработку запросов пользователя.
ControlSystemFreeData Функция освобождения памяти, выделенной внутрипроцессным сервером при генерации ответа на запрос функцией ControlSystemEntryPoint.
ControlSystemGetErrorDescription функция получения описания ошибки по целочисленному коду, возвращенному другими интерфейсными функциями управляющей подсистемы.
ControlSystemSetErrorLogFile Установка файла текстового журналирования ошибок, возникающих в границах управляющей подсистемы.

Запросы

Конкретный пользовательский запрос задается параметром nFunctionId функции ControlSystemEntryPoint. Возможные значения параметра следующие.


Символическое имя Целочисленное значение Действие
CreateModelId 0 создание новой модели
CreateObjectId 1 создание нового элемента модели
UploadModelId 2 загрузка модели со стороны пользователя.
StartSimulationId 3 запуск физического моделирования в предметной области
GetProcessStatusId 4 получение сведений о состоянии процесса моделирования
GetSimulationResultsId 5 получение результатов моделирования
StopSimulationId 6 досрочная остановка процесса моделирования (не реализовано)
CloseSimulationId 7 закрытие моделирования и освобождение соответствующих ресурсов на сервере; если запущен процесс моделирования, то его остановка.

Последовательность взаимодействия сторон пользователя, веб-сервера и подсистемы управления, если пользователь создает модель среды, моделирует поле и получает результаты, в терминах запросов, следующая.

Диаграмма последовательностей при взаимодействии пользователя, веб-сервера и подсистемы управления.
  1. Моделирующий пользователь задает параметры среды моделирования - метрики и параметры предметной области - и передает их вместе с запросом на создание модели веб-серверу.
  2. Веб-сервер формирует запрос CreateModelId и вызывает ControlSystemEntryPoint подсистемы управления.
  3. Подсистема управления отвечает веб-серверу именем созданной модели, либо возвращает код ошибки.
    1. Если функцией ControlSystemEntryPoint возвращен ненулевой код ошибки, веб-сервер отвечает сообщением об ошибке клиенту, затем сценарий прерывается.
  4. Веб-сервер передает имя модели пользователю и освобождает буфер с именем вызовом функции ControlSystemFreeData.
  5. В любом порядке пользователь создает наполнение пространства моделируемого поля: как минимум, по одному источнику и плоскости, а также геометрическую модель, составленную из полигональных объектов. Для каждого из создаваемых объектов выполняется следующее.
    1. Моделирующий пользователь обращается к веб-серверу с запросом на создание объекта-элемента модели. Модель задается именем, которым подсистема управления ответила на запрос CreateModelId. Создаваемый объект параметризуется также данными, определенными классом объекта и предметной областью, для которой создается объект (см. CreateObjectId).
    2. Веб-сервер формирует запрос CreateObjectId и вызывает функцию ControlSystemEntryPoint.
    3. Подсистема управления отвечает веб-серверу именем созданного объекта, либо возвращает код ошибки.
      1. Если при создании объекта функция ControlSystemEntryPoint возвращает ненулевой код ошибки, соответствующий объект не создается, а сообщение об ошибке (см. ControlSystemGetErrorDescription) передается пользователю. При этом ни сценарий, ни цикл создания объектов не прерывается.
    4. Веб-сервер передает имя созданного объекта пользователю и освобождает буфер с именем вызовом функции ControlSystemFreeData.
  6. Моделирующий пользователь обращается к веб-серверу с запросом на запуск моделирования поля, параметризуя запрос именем модели пространства поля (возвращенным в результате запроса на создание модели) и именем (адресом) экземпляра подсистемы предметной области, который должен проводить моделирование.
  7. Веб-сервер Формирует запрос StartSimulationId и вызывает функцию ControlSystemEntryPoint.
  8. Подсистема управления отвечает веб-серверу именем процесса моделирования, либо возвращает код ошибки.
    1. Если функций ControlSystemEntryPoint возвращен ненулевой код ошибки, процесс моделирования не создается. Веб-сервер отвечает пользователю ошибкой. Пользователь может изменять модель и заново отправлять запросы на запуск моделирования.
  9. Веб-сервер передает имя созданного процесса пользователю.
  10. Пользователь начинает цикл опроса состояния процесса моделирования. При этом на каждой итерации выполняется следующее.
    1. Пользователь запрашивает у веб-сервера состояние процесса, идентифицируемого именем, возвращенным ответом на запрос на запуск моделирования.
    2. Веб-сервер формирует запрос GetProcessStatusId, с которым вызывает функцию ControlSystemEntryPoint.
      1. Если функция возвращает ненулевой код ошибки, сообщение об этом делегируется пользователю. Состояние подсистемы управления при этом не определено.
      2. Если пользователь указал неверный идентификатор процесса, функция ControlSystemEntryPoint завершится успешно (вернет нулевой код ошибки), однако ответом будет код status_not_found. В этом случае состояние подсистемы управления стабильно, и она по-прежнему может принимать запросы. В этом случае веб-сервер должен освободить память ответа вызовом ControlSystemFreeData.
    3. Веб-сервер делегирует ответ с состоянием процесса пользователю и освобождает буфер ответа подсистемы управления вызовом ControlSystemFreeData. Если процесс завершен, цикл прерывается.
  11. Пользователь запрашивает у веб-сервера результаты системы моделирования.
  12. Веб-сервер формирует запрос GetSimulationResultsId и вызывает функцию ControlSystemEntryPoint.
  13. Подсистема управления формирует ответ с таблицей результатов (см. GetSimulationResultsId) и возвращает их, вместе с нулевым кодом ошибки, веб-серверу.
    1. Если при создании объекта функция ControlSystemEntryPoint возвращает ненулевой код ошибки, сообщение об ошибке (см. ControlSystemGetErrorDescription) передается пользователю. При этом сценарий не прерывается.
  14. Веб-сервер Формирует ответ пользователю в необходимом формате и отправляет его.
  15. Пользователь посылает запрос на закрытие процесса моделирования, параметризуя запрос именем процесса, полученным при запуске моделирования (StartSimulationId).
  16. Веб-сервер формирует запрос CloseSimulationId и вызывает функцию ControlSystemEntryPoint с ним.
    1. Если подсистема управления возвращает ненулевой код ошибки, сообщение об этом передается пользователю. При этом фактического закрытия не происходит.
  17. Веб-сервер информирует пользователя об успешном закрытии процесса, при этом ответа управляющей системы нет (кроме кода ошибки), поэтому выходной буфер не должен освобождаться.
  18. Сценарий останавливается.

Интерфейс подсистемы управления, предоставляемый вычислительной подсистеме

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

В виде внутрипроцессного сервера.
Под внутрипроцессным серверам понимается бинарная (native код) разделяемая библиотека (DLL, SO), загружаемая в адресное пространство процесса подсистемы управления и предоставляющая C-функции в виде точек входа, а также набор программных интерфейсов подсистемы предметной области.
Модуль управляющей подсистемы, связанный с внутрипроцессной реализацией подсистемы предметной области.
В виде удаленного сервера.
Удаленный сервер, реализующий ведущий кластер подсистемы предметной области, реализует обработку запросов по каналу TCP/IP.
Модуль управляющей подсистемы, связанный с реализацией подсистемы предметной области в виде удаленного сервера.
Для некоторых языков программирования реализуются обработчики запросов по умолчанию, делегирующие вызовы серверному коду, предоставляемому поставщиком предметной области.
Модуль управляющей подсистемы и удаленный сервер подсистемы предметной области, реализованной в виде враппера над плагином, реализующим моделирование в предметной области.
Модуль управляющей подсистемы и удаленный сервер подсистемы предметной области в виде заглушки, делегирующей запросы программным интерфейсам разделяемой библиотеки подсистемы предметной области.

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

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

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


Символическое имя Целочисленное значение Действие
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 Программный интерфейс, реализуемый узлом подсистемы предметной области и предоставляющий подсистеме управления методы для управления вычислительной нагрузкой, которая подается на узел. Физически может быть ассоциирован с вычислительным кластером (для реализации с локальным балансировщиком) либо с потоком на логическом ядре центрального процессора.