Моделирование#
Последовательность выполнения#
Выполните действия описанные в секции Доступ к приложению для того, чтобы перейти на главную страницу «Генерация цифрового двойника».

Рис.1 - Главная страница «Генерация цифрового двойника»
Нажмите на вкладку «Моделирование» слева в боковом меню.
![]()
Рис.2 - Значок «Моделирование»
Откроется страница «Моделирование».

Рис.3 - Страница «Моделирование»
Нажмите на кнопку «Добавить элемент», чтобы добавить новый цифровой двойник.
Примечание: если у вас уже имеется схема, то функционал моделирования предусматривает возможность импортировать и работать с уже имеющиеся схемой. Для этого вам необходимо перейти на пункт 7 и выполнить все описанные там шаги.

Рис.4 - Кнопка «Добавить элемент»
В открывшейся окне в форме json укажите данные сервиса, который вы хотите добавить:

Рис.5 - Форма указания значений цифрового двойника
Пример заполнения значений цифрового двойника, которые необходимо указать:
{
"approximation": {
"name": "example",
"r2_score": 0.8274659416286798,
"r2_score_memory": 0.8693824694164557,
"degree": 4,
"degree_memory": 5,
"equation": "y = 0.1721160786 + -0.0040123388 * tps + 0.0000467083 * tps^2 + -0.0000001518 * tps^3 + 0.0000000002 * tps^4",
"equation_memory": "y = 0.4518521493 + -0.0019271983 * tps + -0.0000071230 * tps^2 + 0.0000002039 * tps^3 + -0.0000000008 * tps^4 + 0.0000000000 * tps^5",
"coefficients": {
"intercept": 0.17211607864438944,
"coefs": [
-0.004012338761542752,
0.00004670833417044238,
-1.5176740185022632e-7,
1.610320292661595e-10
]
},
"coefficients_memory": {
"intercept": 0.4518521493063319,
"coefs": [
-0.0019271983417529267,
-0.000007123033571743772,
2.03885491727988e-7,
-7.893728712896916e-10,
9.034571635130323e-13
]
},
"data_bounds": {
"tps_min": 0.15000000000000002,
"tps_max": 363.45,
"cpu_min": 0.01,
"cpu_max": 0.46,
"memory_min": 0.35,
"memory_max": 0.56,
"tps_memory_min": 0.15000000000000002,
"tps_memory_max": 363.45
},
"metadata": {
"cpu_limits": 600,
"memory_limits": 851443712
}
},
"name": "example",
"version": "1"
}
Поле |
Тип данных |
Описание |
|---|---|---|
name |
String |
Имя цифрового двойника |
version |
Integer |
Верчия цифрогового двойника |
approximation.name |
String |
Имя сервиса |
approximation.r2_score |
Integer |
Оценка точности модели |
approximation.r2_score_memory |
Integer |
Оценка точности модели по памяти |
approximation.equation |
String |
Уравнение cpu от tps |
approximation.equation_memory |
String |
Уравнение cpu от tps по памяти |
approximation.degree |
Integer |
Значение точности |
approximation.degree_memory |
Integer |
Значение точности по памяти |
approximation.coefficients.intercept |
Integer |
Коэффициент уравнения |
approximation.coefficients.coefs |
Integer |
Коэффициенты уравнения при степенях |
approximation.coefficients_memory.intercept |
Integer |
Коэффициент уравнения по памяти |
approximation.coefficients_memory.coefs |
Integer |
Коэффициенты уравнения при степенях по памяти |
approximation.data_bounds.tps_min |
Integer |
Ограничение по минимальному tps, в рамках которого будет корректный расчет |
approximation.data_bounds.tps_max |
Integer |
Ограничение по максимальному tps, в рамках которого будет корректный расчет |
approximation.data_bounds.cpu_min |
Integer |
Ограничение по минимальному CPU, в рамках которого будет корректный расчет |
approximation.data_bounds.cpu_max |
Integer |
Ограничение по максимальному CPU, в рамках которого будет корректный расчет |
approximation.data_bounds.memory_min |
Integer |
Ограничение по минимальному memory, в рамках которого будет корректный расчет |
approximation.data_bounds.memory_max |
Integer |
Ограничение по максимальному memory, в рамках которого будет корректный расчет |
approximation.data_bounds.tps_memory_min |
Integer |
Ограничение по минимальному tps_memory_min, в рамках которого будет корректный расчет |
approximation.data_bounds.tps_memory_max |
Integer |
Ограничение по максимальному tps_memory_max, в рамках которого будет корректный расчет |
approximation.metadata.cpu_limits |
Integer |
Лимиты контейнера по CPU |
approximation.metadata.memory_limits |
Integer |
Лимиты контейнера по memory |
Таблица. Описание полей цифрового двойника
Примечание: значения, вводимые пользователем, не могут быть отрицательными. Поля вводимые пользователем name, version. Значения для секции approximation берутся из ручки digital-twin.
Также предусмотрена функция добавления нового цифрового двойника в виде файла в формате json (например, если вы выгрузили json с данными по цифровому двойнику из раздела «Генерация цифрового двойника»), для этого нажмите на кнопку «Импортировать json».

Рис.6 - Кнопка «Импортировать json»
После того, как вы ввели данные/импортировали json файл с цифровым двойником и нажали кнопку «Добавить», ваш новый сервис отобразиться на общей схеме (без связей).

Рис.7 - Добавление нового элемента
Добавьте связь к новому сервису. Соблюдайте корректность, соединенного входа и выхода.
В данном примере необходимо делать связь от выхода сервиса к входу «example», далее от выхода «example» на вход «egw» (предварительно был добавлен еще один компонент egw).
В результате соединения нового сервиса с другими получаем следующий результат:

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

Рис.9 - Подсказка о добавлении нового элемента и изменении значения
Примечание: при необходимости вы можете указать значение входного TPS в специальной ноде «Входящий tps». Значение не может быть отрицательным.

Рис.10 - Нода «Входящий tps»
Нажмите на кнопку «Рассчитать».

Рис.11 - Кнопка «Рассчитать»
Далее происходит отображение результатов расчета.
Как видно на картинке для каждого сервиса выводится следующая информация: процент утилизации, процент утилизации по памяти, количество реплик и нагрузка на реплику в tps (рис.12).

Рис.12 - Результат расчета
Нажмите на переключатель «Результат расчета», чтобы увидеть результат значений tps между сервисами (на стрелках):

Рис.13 - Кнопка «Результат расчета»

Рис.14 - Отображение по кнопке «Результат расчета»
Также можно нажать на переключатель «Показывать дополнительную информацию», чтобы увидеть дополнительную информацию по весу стрелок между компонентами:

Рис.15 - Кнопка «Показывать дополнительную информацию»

Рис.16 - Результат работы кнопки «Показывать дополнительную информацию»
Также имеется возможность при нажатии на область конкретной стрелки изменить вес стрелки (Опционально).
Откроется окно редактирования веса:

Рис.17 - Окно редактирования веса
Введите необходимое значение веса и нажмите «Сохранить».
Примечание: значение веса должно быть больше нуля.
Нажмите на кнопку «Экспортировать схему», чтобы сохранить на свое устройство схему цифровой архитектуры с сохранением результатов последнего расчета (если он был произведен):

Рис.18 - Кнопка «Экспортировать схему»
Далее шаги 7-14 являются опциональными.
Нажмите на кнопку «Импортировать схему», чтобы загрузить схему цифровой архитектуры в формате json.

Рис.19 - Кнопка «Импортировать схему»
В результате будет импортирована схема, которая будет выглядеть следующим образом:

Рис.20 - Результат импортирования схемы
Элементы данной схемы можно отредактировать при нажатии на кнопку «Карандаш», которая есть у каждого компонента:

Рис.21 - Кнопка «Редактирование»
Окно редактирования параметров будет иметь следующий вид:

Рис.22 - Форма редактирования параметров
Примечание: значения не могут быть отрицательными.
После настройки сервиса нажмите на кнопку «Сохранить».
Далее выполните действия согласно шагу 6, чтобы сохранить полученную схему на свое устройство.
Функционал предусматривает возможность добавить несколько входящих нагрузок (опционально).
Нажмите кнопку «Добавить Input».

Рис.23 - Кнопка «Добавить Input»
На рабочей поверхности отобразится еще один элемент с входящей нагрузкой.

Рис.24 - Отображение второго input элемента с входящей нагрузкой
Данная функция может быть полезна для моделирования сценариев нагрузки, где входной трафик может поступать из нескольких независимых источников.
Функционал предусматривает удаление сервиса, но не является обязательным (опционально).
Например, для удаления сервиса example перейдите в режим редактирования сервиса и нажмите кнопку «Удалить»:

Рис.25 - Кнопка «Удалить» сервис
Функционал предусматривает возможность замены цифрового двойника (обновления версии), но не является обязательным (опционально).
Например, для замены компонента example (обновления версии) нажмите на кнопку «Заменить цифровой двойник»:

Рис.26 - Кнопка «Заменить цифровой двойник»
При нажатии на нее открывается всплывающее окно для редактирования:

Рис.27 - Окно для редактирования цифрового двойника
В окне предусмотрена кнопка «Импорт элемента» для загрузки файла JSON:

Рис.28 - Кнопка импорт элемента
После того, как вы изменили данные/импортировали json файл с цифровым двойником (обновили версию) и нажали кнопку «Заменить», ваш новый сервис отобразиться на общей схеме с новыми значениями и произойдет перерасчет.

Рис.29 - Замена элемента на другой в схеме
Используйте кнопки дополнительных функциональностей (опционально).

Рис.30 - Кнопки дополнительных функциональностей
Предусмотрены вспомогательные кнопки:
1 - Увеличение масштаба.
2 - Уменьшение масштаба.
3 - Настроить вид (кнопка изменения масштаба или положения элемента на экране так, чтобы он полностью помещался в пределах видимой области).
4 - Переключатель состояний (кнопка фиксации элементов на экране).
Также предусмотрена кнопка настройки панели (схемы):

Рис.31 - Кнопка настройки панели
Нажмите на данную кнопку, если хотите указать «Имя схемы»,»Описание»,»Версию».
Используйте кнопку «Документация» (опционально).
Если есть ссылка на документацию, то для пользователя будет доступна кнопка «Документация».

Рис.32 - Кнопки «Документация»
Функционал предусматривает расчет по нескольким эпохам (опционально).
Нажмите на значок дополнительных функций:
![]()
Рис.33 - Значок дополнительных функций
Нажмите на кнопку «Добавить эпоху»:

Рис.34 - Кнопка «Добавить эпоху»
После добавления нескольких эпох вы можете посмотреть на графике результат. Для этого нажмите на кнопку «Показать график».

Рис.35 - Кнопка «Показать график»

Рис.36 - Результат отображения эпох
Нажмите на кнопку «Применить на схему», если вы хотите применить добавленную входящую нагрузку на схему рабочей области.

Рис.37 - Кнопка «Применить на схему»
В результате произойдет изменение входящей нагрузки на рабочей области согласно выбранной в данной форме, а также перерасчет на схеме.
При необходимости вы можете удалить одну выбранную эпоху. Для этого выберите эпоху и нажмите на кнопку «Удалить».

Рис.38 - Удаление эпохи
Нажмите на кнопку «Скачать результат», если хотите выгрузить полученный результат по эпохам (Epoches.yaml) и спецификацию вашей схемы (ScaleObjects.yaml).

Рис.39 - Кнопка «Скачать результат»
Функционал предусматривает генерацию отчета по эпохам (опционально).
Добавьте предварительно эпохи согласно пункту 13.
Нажмите на кнопку «Сгенерировать отчет».

Рис.40 - Кнопка «Сгенерировать отчет»
В результате будет выведен отчет содержащий следующую информацию:
Данные по максимальным значениям среди всех сервисов:
Максимальная утилизация по памяти.
Максимальная утилизация.
Максимальная входная нагрузка.

Рис.41 - Визуализация максимальных значений среди всех сервисов
Также отчет содержит графики, которые показывают следующую информацию:
Входная нагрузка от эпох.
Входная нагрузка на каждый сервис на эпоху.
Число реплик на каждый сервис на эпоху.
Утилизация по CPU на каждый сервис на эпоху.
Утилизация по памяти на каждый сервис на эпоху.
Утилизация по CPU на каждый сервис на эпоху абсолютные значения.
Утилизация по памяти на каждый сервис на эпоху абсолютные значения.
Общая утилизация по CPU на проекте.
Общая утилизация по памяти на проекте.
В качестве примера представлено несколько графиков:

Рис.42 - График «Входная нагрузка от эпох»

Рис.43 - График «Входная нагрузка на каждый сервис на эпоху»

Рис.44 - График «Утилизация по памяти на каждый сервис на эпоху»
Результат#
В ходе выполнения данных шагов пользователь получает файл в формате json, который содержит схему с взаимосвязанными сервисами, рассчитанными значениями утилизации, утилизации по памяти и количеством реплик.
Для проверки успешности использования моделирования необходимо:
Выполнить шаг 1-2.
Выполнить шаги 3-5 (или выполнить действия согласно шагу 7, если вы работаете с уже имеющиеся схемой).
Выполнить шаги 8-14 (опционально).
Выполнить шаг 6.
Импортировать полученную схему.
Проверить, что раннее экспортированный файл соответствует импортированному по содержанию: корректность рассчитанных данных и связей между сервисами.