Данный репозиторий содержит проект архитектуры из ВКР "Разработка и применение распределённой модели вычислений для моделирования системы диполей". Основные работы над ВКР производились с ноября 2024 по июнь 2025.
Содержание для markdown документации
Основные инструменты и библиотеки:
- Drogon (1.9.10) — фреймворк для создания веб-сервисов.
- OpenSSL (3.0.2) — поставщик функций для организации безопасных соединений.
- jsoncpp (1.9.5) — сериализация объектов в формат JSON.
- libpq (14.13) — низкоуровневый клиент для PostgreSQL (зависимость libpqxx).
- libpqxx (7.10.0) — высокопроизводительный C++-клиент для взаимодействия с PostgreSQL.
- AMQP-CPP (4.3.27) — библиотека для асинхронного взаимодействия с RabbitMQ.
- hiredis (0.14.1) — клиент для Redis (используется вместе с Drogon).
- OpenMP (4.5) — модель параллелизма, может применяться совместно с Eigen.
- libcurl (7.81.0) — библиотека для выполнения HTTP-запросов с помощью curl.
- fmt (8.1.1) — библиотека для удобного форматирования и вывода данных.
- scnlib (4.0.1) - библиотека для упрощения считывания данных из форматированных строк.
- Boost (1.74) — используется Boost.Math (численное интегрирование) и Boost.Asio (асинхронный ввод-вывод).
- Eigen (3.4.0) — библиотека линейной алгебры с поддержкой векторизации.
- matplotplusplus (1.2.2) — библиотека визуализации данных поверх GNU plot.
- qt6-base (6.2.4) — реализация пользовательского GUI на базе Qt6.
- Google Test (1.15.0) — фреймворк для написания и запуска модульных тестов.
- Wiremock (?) — планируется использовать для будущего REST-тестирования.
В рамках данного проекта существует набор модулей для реализации различных элементов распределённой архитектуры. В этом описании под модулем, в контексте описания структуры проекта, подразумевается поддиректория корневой директории проекта, содержащая файл CmakeLists.txt.
Ниже приведена таблица зависимостей между поддиректориями проекта:
Модуль | Пакетные зависимости | Зависимости от модулей |
---|---|---|
utilLib | Eigen3, jsoncpp, fmt | — |
computationalLib | OpenMP, amqpcpp, CURL, libpqxx,scn | utilLib |
computationalNode | Drogon | utilLib, computationalLib |
client | Qt6, Matplot++ | utilLib |
mainNode | Drogon | utilLib, computationalLib |
Стоит учесть, что при отсутствии одного из элементов из списка, конфигурация системы не будет прервана на проверяемом модуле. Данный модуль в таком случае не будет собираться, о чём будет соответсвующее оповещение в cmake log.
На данный момент в проекте используются следующие опции сборки:
Опция | Описание | Значение по умолчанию |
---|---|---|
BUILD_TESTS | Сборка тестовых сценариев | OFF |
BUILD_DOC | Сборка документации | OFF |
BUILD_TYPE 1 | Тип сборки проекта | Release |
В рамках некоторых тестовых сценариев применяется следующий перечень переменных окружения.
Переменная | Описание |
---|---|
host | Хост для RabbitMQ брокера |
dbhost | Хост для PostgreSQL БД |
username | Имя пользователя |
password | Парольпользователя |
Данные переменные являются опциональными и применяются для настройки тестовых сценариев для сервисов AMQP и libpqxx. Данные аргументы используются в составе следующих троек: host;username;password и dbhost;username;password. При отсутствии одного из элементов тройки, соответствующие ей тесты не будут собраны, что будет отражено в логе cmake.
Минимальный скрипт для установки и сборки Release версии системы приведён ниже:
git clone https://github.com/AlexanderMeynik/distributedMathArh
cd distributedMathArh
mkdir build && cd build
cmake ..
Скрипт для установки и полной сборки проекта приведён ниже:
export host=http://localhost:15672
export pghost=http://localhost:5432
export username=sysadmin
export password=syspassword
git clone https://github.com/AlexanderMeynik/distributedMathArh
cd distributedMathArh
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release-Coverage \
-DBUILD_TESTS=ON -BUILD_DOC=ON ..
Исходная постановка численной задачи содержит следующие этапы: построение СЛАУ, решение СЛАУ, вычисление двухмерной сетки для целевой функции. Данные операции многократно повторяются для усреднения целевого функционала.
Особенности математической модели:
- Каждая итерация выполняется независимо от других, порядок итераций не играет значения.
- Расчёт агрегированной целевой функции не требует дополнительных итераций по значениям.
- Целевая функция нетривиально зависит от входных углов, что затрудняет векторизацию.
Разработанная система подходит для распределения задач Монте-Карло 2, однако её применение ограничивается задачами данного класса.
Особенности реализации:
- Аналитическое решение для получения целевой функции на 3 порядка превосходит численное.
- Итерации хорошо поддаются распараллеливанию: вплоть до 11 кратного ускорения для 16 потоков.
- Динамическая процедура распределения нагрузки основна на данных бенчмарков вычислительных узлов.
- Почти линейный коэффициент горизонтального масштабирования.
- Гибкость в настройке составляющих кластера: компоненты системы можно подключать при помощи выделенных HTTP эндпоинтов.
- Асинхронная реализация AMQP позволяет эффективно обрабатывать большой поток входящих задач.