Моделирование#

Последовательность выполнения#

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

main

Рис.1 - Главная страница «Генерация цифрового двойника»

  1. Нажмите на вкладку «Моделирование» слева в боковом меню.

main

Рис.2 - Значок «Моделирование»

Откроется страница «Моделирование».

main

Рис.3 - Страница «Моделирование»

  1. Нажмите на кнопку «Добавить элемент», чтобы добавить новый цифровой двойник.

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

main

Рис.4 - Кнопка «Добавить элемент»

В открывшейся окне в форме json укажите данные сервиса, который вы хотите добавить:

main

Рис.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».

main

Рис.6 - Кнопка «Импортировать json»

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

main

Рис.7 - Добавление нового элемента

  1. Добавьте связь к новому сервису. Соблюдайте корректность, соединенного входа и выхода.

В данном примере необходимо делать связь от выхода сервиса к входу «example», далее от выхода «example» на вход «egw» (предварительно был добавлен еще один компонент egw).

В результате соединения нового сервиса с другими получаем следующий результат:

main

Рис.8 - Добавление связей с новым элементом

Примечание:

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

  • При соединении сервисов всплывает окошко с подсказкой о пересчете в связи с добавлением нового элемента и изменением значения.

main

Рис.9 - Подсказка о добавлении нового элемента и изменении значения

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

main

Рис.10 - Нода «Входящий tps»

  1. Нажмите на кнопку «Рассчитать».

main

Рис.11 - Кнопка «Рассчитать»

Далее происходит отображение результатов расчета.

Как видно на картинке для каждого сервиса выводится следующая информация: процент утилизации, процент утилизации по памяти, количество реплик и нагрузка на реплику в tps (рис.12).

main

Рис.12 - Результат расчета

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

main

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

main

Рис.14 - Отображение по кнопке «Результат расчета»

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

main

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

main

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

Также имеется возможность при нажатии на область конкретной стрелки изменить вес стрелки (Опционально).

Откроется окно редактирования веса:

main

Рис.17 - Окно редактирования веса

Введите необходимое значение веса и нажмите «Сохранить».

Примечание: значение веса должно быть больше нуля.

  1. Нажмите на кнопку «Экспортировать схему», чтобы сохранить на свое устройство схему цифровой архитектуры с сохранением результатов последнего расчета (если он был произведен):

main

Рис.18 - Кнопка «Экспортировать схему»

Далее шаги 7-14 являются опциональными.

  1. Нажмите на кнопку «Импортировать схему», чтобы загрузить схему цифровой архитектуры в формате json.

main

Рис.19 - Кнопка «Импортировать схему»

В результате будет импортирована схема, которая будет выглядеть следующим образом:

main

Рис.20 - Результат импортирования схемы

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

main

Рис.21 - Кнопка «Редактирование»

Окно редактирования параметров будет иметь следующий вид:

main

Рис.22 - Форма редактирования параметров

Примечание: значения не могут быть отрицательными.

После настройки сервиса нажмите на кнопку «Сохранить».

Далее выполните действия согласно шагу 6, чтобы сохранить полученную схему на свое устройство.

  1. Функционал предусматривает возможность добавить несколько входящих нагрузок (опционально).

Нажмите кнопку «Добавить Input».

main

Рис.23 - Кнопка «Добавить Input»

На рабочей поверхности отобразится еще один элемент с входящей нагрузкой.

main

Рис.24 - Отображение второго input элемента с входящей нагрузкой

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

  1. Функционал предусматривает удаление сервиса, но не является обязательным (опционально).

Например, для удаления сервиса example перейдите в режим редактирования сервиса и нажмите кнопку «Удалить»:

main

Рис.25 - Кнопка «Удалить» сервис

  1. Функционал предусматривает возможность замены цифрового двойника (обновления версии), но не является обязательным (опционально).

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

main

Рис.26 - Кнопка «Заменить цифровой двойник»

При нажатии на нее открывается всплывающее окно для редактирования:

main

Рис.27 - Окно для редактирования цифрового двойника

В окне предусмотрена кнопка «Импорт элемента» для загрузки файла JSON:

main

Рис.28 - Кнопка импорт элемента

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

main

Рис.29 - Замена элемента на другой в схеме

  1. Используйте кнопки дополнительных функциональностей (опционально).

main

Рис.30 - Кнопки дополнительных функциональностей

Предусмотрены вспомогательные кнопки:

1 - Увеличение масштаба.

2 - Уменьшение масштаба.

3 - Настроить вид (кнопка изменения масштаба или положения элемента на экране так, чтобы он полностью помещался в пределах видимой области).

4 - Переключатель состояний (кнопка фиксации элементов на экране).

Также предусмотрена кнопка настройки панели (схемы):

main

Рис.31 - Кнопка настройки панели

Нажмите на данную кнопку, если хотите указать «Имя схемы»,»Описание»,»Версию».

  1. Используйте кнопку «Документация» (опционально).

Если есть ссылка на документацию, то для пользователя будет доступна кнопка «Документация».

main

Рис.32 - Кнопки «Документация»

  1. Функционал предусматривает расчет по нескольким эпохам (опционально).

Нажмите на значок дополнительных функций:

main

Рис.33 - Значок дополнительных функций

Нажмите на кнопку «Добавить эпоху»:

main

Рис.34 - Кнопка «Добавить эпоху»

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

main

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

main

Рис.36 - Результат отображения эпох

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

main

Рис.37 - Кнопка «Применить на схему»

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

При необходимости вы можете удалить одну выбранную эпоху. Для этого выберите эпоху и нажмите на кнопку «Удалить».

main

Рис.38 - Удаление эпохи

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

main

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

  1. Функционал предусматривает генерацию отчета по эпохам (опционально).

Добавьте предварительно эпохи согласно пункту 13.

Нажмите на кнопку «Сгенерировать отчет».

main

Рис.40 - Кнопка «Сгенерировать отчет»

В результате будет выведен отчет содержащий следующую информацию:

Данные по максимальным значениям среди всех сервисов:

  • Максимальная утилизация по памяти.

  • Максимальная утилизация.

  • Максимальная входная нагрузка.

main

Рис.41 - Визуализация максимальных значений среди всех сервисов

Также отчет содержит графики, которые показывают следующую информацию:

  • Входная нагрузка от эпох.

  • Входная нагрузка на каждый сервис на эпоху.

  • Число реплик на каждый сервис на эпоху.

  • Утилизация по CPU на каждый сервис на эпоху.

  • Утилизация по памяти на каждый сервис на эпоху.

  • Утилизация по CPU на каждый сервис на эпоху абсолютные значения.

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

  • Общая утилизация по CPU на проекте.

  • Общая утилизация по памяти на проекте.

В качестве примера представлено несколько графиков:

main

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

main

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

main

Рис.44 - График «Утилизация по памяти на каждый сервис на эпоху»

Результат#

В ходе выполнения данных шагов пользователь получает файл в формате json, который содержит схему с взаимосвязанными сервисами, рассчитанными значениями утилизации, утилизации по памяти и количеством реплик.

Для проверки успешности использования моделирования необходимо:

  1. Выполнить шаг 1-2.

  2. Выполнить шаги 3-5 (или выполнить действия согласно шагу 7, если вы работаете с уже имеющиеся схемой).

  3. Выполнить шаги 8-14 (опционально).

  4. Выполнить шаг 6.

  5. Импортировать полученную схему.

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