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

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
Строка 72: Строка 72:
# [[Веб-сервер]] информирует [[Заглавная страница#Действующие лица и их роли|пользователя]] об успешном закрытии процесса, при этом ответа управляющей системы нет (кроме кода ошибки), поэтому выходной буфер не должен освобождаться.
# [[Веб-сервер]] информирует [[Заглавная страница#Действующие лица и их роли|пользователя]] об успешном закрытии процесса, при этом ответа управляющей системы нет (кроме кода ошибки), поэтому выходной буфер не должен освобождаться.
# Сценарий останавливается.
# Сценарий останавливается.
==Интерфейс подсистемы управления, предоставляемый [[Вычислительная подсистема|вычислительной подсистеме]] и подсистемам предметных областей==

Версия 20:03, 20 декабря 2015

Это - описание требований к системе. По текущей реализации см. 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 закрытие моделирования и освобождение соответствующих ресурсов на сервере; если запущен процесс моделирования, то его остановка.

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

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

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