Верхнеуровневая архитектура

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску

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

Верхнеуровневая архитектура

Структура

На верхнем уровне системной иерархии система принципиально состоит из предметно-независимой и предметно-ориентированной подсистемы.

Предметно-независимая подсистемы разрабатывается нами без какой-либо привязки к предметной области проведения модельных экспериментов.

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

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

Структурно, верхний уровень определяется следующими компонентами.

  1. Веб-сервер - служба, принимающая HTTP запросы от клиентов и трансформирующая их в вызов точки входа подсистемы управления с соответствующими параметрами.
  2. Подсистема управления - динамически загружаемая веб-сервером библиотека (DLL в Windows, SO в Unix), реализующая подсистему управления. Библиотека экспортирует заданный набор интерфейсных функций, доступных веб-серверу для обработки клиентских запросов. Также предоставляет интерфейс для подсистемы предметной области, который зависит от метода реализации подсистемы предметной области - в виде также внутрипроцессного сервера (единственная доступная реализация на 15.12.2015) или в виде удаленного сервера. Программно взаимодействие реализуется в виде пары "прокси-заглушка", предоставляющей полиморфные объекты с методами по передаче вызова.
  3. Вычислительная подсистема - чисто логическое объединение предметно-ориентированных подсистем, реализующих высокопроизводительное моделирование в своих предметных областях. На 15.12.2015 в виде разделяемых (динамических) библиотек реализованы две предметные области - "Архитектурная акустика" и "Интеграл".

Главный сценарий использования системы частично отражает назначение этих подсистем.

Типы модулей системы моделирования

Реализации

Тестовая версия 2

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

  • control - разделяемая библиотека, реализующая управляющую подсистему, и реализующая интерфейс, предоставляемый веб-серверу.
  • lb_dll - разделяемая библиотека, реализующая балансировщики нагрузки с интерфейсом ILoadBalancer, а также провайдер балансировщиков нагрузки ILoadBalancerProvider. Библиотека может быть включена в адресное пространство подсистемы управления при соответствующей конфигурации последней. Также библиотека может быть использована сторонним процессом, который реализует циклическое прослушивание удаленных каналов связи - см. lb_exe.
  • arch_ac - реализация подсистемы предметной области "Архитектурная акустика".
  • cmd_client - клиент, который реализует интерфейс командной строки и подключается к подсистеме управления как внутрипроцессный сервер. Выполняет моделирование в предметной области "Архитектурная акустика", "Распространение радиоволн".
  • domain_shared - разделяемая библиотека, которая опционально предоставляется реализациям подсистем предметных областей и их узлам. Библиотека реализует утилитарные функции, которые могут быть использованы на обеих сторонах - например функции по распаковке/запаковке объектов, реализации каналов связи между узлами. См. рисунок.
  • domain_exe - реализует пользовательский интерфейс для распределенного экземпляра подсистемы предметной области - независимо от предметной области. См. ПОП на рисунке сверху.
  • node_exe - реализует пользовательский интерфейс для распределенного узла подсистемы предметной области - независимо от предметной области. Аналогичен domain_shared, но для узла.
  • lb_exe - реализует пользовательский интерфейс для балансировщиков нагрузки и провайдера балансировщиков нагрузки, которые реализуются разделяемой библиотекой lb_dll.
  • radio_hf - реализация подсистемы предметной области "Распространение радиоволн".
Структурные компоненты, реализующие процесс на стороне экземпляра подсистемы предметной области - в случае использования функций domain_shared. Для узла определяется аналогично.

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

  • integral - реализация подсистемы предметной области "Интеграл" по параллельному расчету интеграла . При , Результат должен быть равен .
  • integral_client - аналогичный клиент, инициирующий расчет интеграла в предметной области "Интеграл".
Сборка, развертывание и запуск

Сборка

- Windows. Для сборки в Windows требуется MS Visual Studio 2015. Файл решения control.2015.sln в корне репозитория. Собирать нужно все кроме integral.2015 и integral_client.2015 - в среде проекты можно выгрузить. Выходная поддиректория в репозиторие, в зависимости от конфигурации сборки: .\Debug\Win32\, .\Release\Win32\, .\Debug\x64\, .\Release\x64\. Для сборки требуется также установить Free Pascal (x86 и/или x64 в зависимости от конфигурации сборки). Поддиректорию ...\bin\i386-win32 (для обеих архитектур - одинаково), в директории с Free Pascal, также нужно прописать в переменной окружения %FreePascalBin%.
- Linux. Для сборки используется cmake. Необходимо задать текущей поддиректорию ./build в репозитории, создав ее при необходимости. Из-под директории ./build выполнить cmake .., затем выполнить построение и установку с помощью make debug_x86 install, make debug_x64 install, make release_x86 install, или make release_x64 install - в зависимости от конфигурации сборки. В версиях debug включается отладочная информация (-g), отключается оптимизация (-O0). В версиях release также включается отладочная информация, но используется оптимизация -O3. Выходная директория относительно корня репозитория: ./build/bin/. Для сборки под Linux необходимо следующее стороннее ПО: make, cmake, gcc версии не ниже 5.3, uuid-dev, fpc (Free Pascal), и libxerces-c-dev (Apache Xerces-C++).

Развертывание

Конфигурация компонентов реализации управляется через набор файлов INI. Наиболее простой способ проверить работоспособность системы - использовать скрипт Powershell win_deploy_base.ps1 под Windows или bash_deploy_base.bash в Linux следующим образом.

  1. . .\win_deploy_base.ps1 или . ./bash_deploy_base.bash. Скрипты реализуют набор функций, которые необходимо загрузить в оболочку указанными командами из терминала. Сделать можно из любой поддиректории репозитория.
  2. Для внутрипроцессной конфигурации выполнить Deploy-DefaultInprocessConfig. Для распределенной конфигурации выполнить Deploy-DefaultTcpConfig. В распределенной конфигурации компоненты системы устанавливаются на текущей машине, а доступ к ним осуществляется по адресу 127.0.0.1. Используется экземпляр подсистемы предметной области arch_ac с одним узлом.
  3. В Windows после Deploy-DefaultTcpConfig желательно добавить необходимые исключения в брандмауэр Windows, выполнив с административными привилегиями Powershell скрипт add_windows_firewall_exceptions.ps1.

Запуск

Запуск осуществляется из-под директории с исходным кодом соответствующего компонента.

Ниже предполагается использование сборки Release и x64.

  • Для запуска arch_ac_client (в обеих конфигурациях) необходимо из-под директории arch_ac_client репозитория выполнить следующее.
    • В Windows: ..\Release\x64\arch_ac_client опциональная_xml_модель опциональная_схема_xsd. Файлы XML и XSD задают модель среды. Они опциональны - по умолчанию используются имена upload_model_test.xml и upload_model_test.xsd из текущей директории (arch_ac_client).
    • В Linux: ../build/bin/arch_ac_client опциональная_xml_модель опциональная_схема_xsd. Файлы XML и XSD используются аналогично.
  • Для запуска распределенного балансировщика нагрузки lb_exe необходимо из-под директории lb_exe репозитория выполнить следующее.
    • В Windows: ..\Release\x64\lb --config=load_balancer_provider.ini
    • В Linux: ../build/bin/lb_exe --config=load_balancer_provider.ini
  • Для запуска распределенной подсистемы предметной области domain_exe и загрузки arch_ac необходимо из-под директории domain_exe репозитория выполнить следующее.
    • В Windows: ..\Release\x64\domain_server --domain_library=arch_ac.dll
    • В Linux: ../build/bin/domain_server --domain_library=libarch_ac.so
  • Для запуска распределенного узла node_exe подсистемы предметной области и загрузки arch_ac необходимо из-под директории node_exe репозитория выполнить следующее.
    • В Windows: ..\Release\x64\node_exe --node_library=arch_ac.dll
    • В Linux: ../build/bin/node_server --node_library=libarch_ac.so

В распределенной конфигурации клиент arch_ac_client нужно запускать в последнюю очередь!

В качестве входной модели можно использовать следующий файл.

<?xml version="1.0" encoding="utf-8"?>
<model cx = "30" cy = "20" cz = "5" name = "Средний зал">
	<domain name = "arch_ac">
		<attenuation>1</attenuation>
	</domain>
	<polyobject name = "Стена 1 Левая">
		<face>
		  <vertex x = "0" y = "0" z = "0"/>
		  <vertex x = "0" y = "5" z = "0"/>
		  <vertex x = "0" y = "5" z = "5"/>
		  <vertex x = "0" y = "0" z = "5"/>
		  <domain name = "arch_ac">
			<absorption> <!--Фанера на стилите-->
			  <absorption_row frequency = "125">0.47</absorption_row>
			  <absorption_row frequency = "250">0.39</absorption_row>
			  <absorption_row frequency = "500">0.18</absorption_row>
			  <absorption_row frequency = "1000">0.14</absorption_row>
			  <absorption_row frequency = "2000">0.13</absorption_row>
			  <absorption_row frequency = "4000">0.12</absorption_row>
			</absorption>
		  </domain>
		</face>
	</polyobject>
	<sourceobject name = "Источник 1">
		<position x = "2.5" y = "2.5" z = "2.5"/>
		<direction x = "-1" y = "0" z = "0"/>
		<top x = "0" y = "0" z = "1"/>
		<domain name = "arch_ac">
		  <rp>
			<function>F(freq, theta, phi) = (1 + cos(theta)) * 0.5 * 0.01</function> <!--Кардиоида-->
			<!--<function>F(freq, theta, phi) = 1</function>--> <!--Круговая-->
		  </rp>
		  <afc>
			<afc_row frequency = "125">0.018456914</afc_row>
			<afc_row frequency = "250">0.015403295</afc_row>
			<afc_row frequency = "500">0.018799808</afc_row>
			<afc_row frequency = "1000">0.010629603</afc_row>
			<afc_row frequency = "2000">0.004951132</afc_row>
			<afc_row frequency = "4000">0.004816578</afc_row>
		  </afc>
		</domain>
	</sourceobject>
	<plainobject>
		<position x = "0" y = "0" z = "1.2"/>
		<v1 x = "1" y = "0" z = "0"/>
		<v2 x = "0" y = "1" z = "0"/>
	</plainobject>
</model>

Другие файлы можно получить в частном порядке.

Тестовая версия 1

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

  • control - библиотека, реализующая управляющую подсистему, и реализующая интерфейс, предоставляемый веб-серверу.
  • arch_ac - реализация моделирующей подсистемы предметной области "Архитектурная акустика".
  • arch_ac_client - исполняемый компонент, играющий роль заглушки "пользователь-веб-сервер". Выполняет моделирование в предметной области "Архитектурная акустика".
  • integral - реализация подсистемы предметной области "Интеграл" по параллельному расчету интеграла . При , Результат должен быть равен .
  • integral_client - аналогичный клиент, инициирующий расчет интеграла в предметной области "Интеграл".
Исполняемые модули на 15.12.2015

См. также

Старая версия архитектуры системы