...

Диагностика производительности Low-code решения. Как понять, где и что можно улучшить?

Тема в разделе "Примеры решений и дополнительных модулей", создана пользователем arestov, 2 май 2024.

  1. arestov

    arestov Участник

    Текст выступления на конференции ELMA Day 2024 Алексея Пушкарёва
    Диагностика производительности Low-code решения
    Как понять, где и что можно улучшить?
    upload_2024-5-2_20-27-14.png
    Зачем нужна диагностика и отладка?
    upload_2024-5-2_20-27-40.png

    • Поиск (локализация) ошибок при разработке;

    • Проверка гипотез разработки;

    • Тестирование при разработке;

    • Оптимизация интерфейсов;

    • Оптимизация серверных сценариев;

    • Диагностика проблем производительности решения;

    • Поиск ошибок в ходе эксплуатации системы.
    Зачем нужна диагностика и отладка в low-code платформе?

    Поскольку ELMA система не коробочная, нельзя всё внедрение свести к паре десятков настроек. ELMA — это полноценный инструмент разработки. А если есть разработка, то получается, что есть и ошибки. Значит нужен какой-то инструмент, чтобы мы их могли находить. Чтобы как-то протестировать наше решение, нам требуется проверять какие-то гипотезы. Проверять, наш код работает или не работает. Нужен какой-то инструмент, чтобы запускать код. Иногда мы уже сделали это решение, и оно запускается. Нам нужно посмотреть, насколько оно производительное, как быстро оно работает, а если оно не работает быстро, то понять почему. И здесь тоже нужны дополнительные инструменты. Собственно, для оптимизации и поиска этих проблем нам нужны инструменты отладки и диагностики. Кратко пройдёмся по всем этим инструментам, посмотрим и поймём, для чего они нужны.

    Процессы. Отладка сценариев.
    upload_2024-5-2_20-31-51.png

    Начнём с процессов. И самый простой базовый инструмент, с которым мы столкнёмся, — это отладка функций. Он нужен для того, чтобы написанный нами сценарий можно было проверить на работоспособность. Для этого у нас есть в разделе редактирования кода сценариев «Отладить функцию».
    upload_2024-5-2_20-32-23.png
    По нажатию открывается окно, в котором указываем входной контекст, нужную функцию и смотрим, что на выходе.
    upload_2024-5-2_20-32-55.png
    Когда к функции всё не сводится и нам требуется отладить процесс целиком, мы используем инструмент по кнопке «Отладка» в конструкторе процесса. Рассмотрим его на примере процесса «Командировки». Данный процесс мы будем использовать по всей статье для примера. Суть процесса в том, что есть запрос на командировку, который мы запускаем на согласование. Создаётся задача на руководителя. Если руководитель согласовывает, то приходит один ответ, если нет, то другой ответ.
    upload_2024-5-2_20-33-23.png
    Когда мы запускаем отладку, мы видим экран, на котором отображена траектория движения процесса. На нём же мы можем зайти в каждую задачу, можем выполнить за любого пользователя задачу процесса и увидеть задачу пользователя без необходимости перелогиниваться. Можем увидеть лог происходящих событий. Также видим весь контекст процесса с его изменениями по ходу работы процесса.
    upload_2024-5-2_20-33-47.png
    Когда процесс реализован и запущен в работу, мы можем исследовать его при помощи инструмента «Монитор процессов». В мониторе процессов мы можем видеть тоже самое, что мы видели в отладке, кроме исполнения задачи для любого пользователя. Но мы можем найти каждый экземпляр процесса, посмотреть, что с ним происходит, разобраться в ситуации, дать какие-то комментарии. Находится «Монитор процессов» в разделе «Администрирование».
    upload_2024-5-2_20-34-8.png
    «Монитор ошибок» – инструмент, позволяющий увидеть весь список проблемных ситуаций, прервать процесс, пропустить неудавшийся сценарий, также можем продолжить работу процесса. Продолжать процесс имеет смысл, если мы после определения ошибки в мониторе ошибок, исправим процесс и переопубликуем. Тогда для завершения работы процесса не придётся перезапускать процесс целиком.

    Вывод отладочной информации
    upload_2024-5-2_20-34-36.png

    Каким образом можно выводить отладочную информацию? В самом простом случае мы можем использовать наш контекст. В нём завести строковую переменную и в неё писать некий отладочный лог. На слайде представлен пример.

    Есть ещё дополнительные инструменты. На слайде приведены QR-коды со ссылками на эти инструменты.

    Отладка в консоле браузера – при работе клиентских приложений мы можем выводить отладочную информацию непосредственно в консоль браузера.

    Отладка в storage или cache – для серверных функций, где нет интерфейса. Kуда мы можем посмотреть? Мы можем писать куда-то в storage или cache.

    Отладка при помощи Postman, где мы можем запустить функцию и посмотреть результат.

    Отладка интерфейсов.
    upload_2024-5-2_20-35-11.png

    Самый простой способ, так же как и в процессах, – это кнопка «Отладить». Выглядит он так же, как и отладка функции: нужно указать контекст и интерактивно поработать с формой.

    Диагностика интерфейсов
    upload_2024-5-2_20-35-32.png

    Возьмём более сложный пример, в котором нам необходимо определить скорость работы интерфейса. Воспользуемся примером с командировкой. Мы хотели бы посмотреть в процессе, какие ещё сотрудники хотели бы отправиться в командировку.
    upload_2024-5-2_20-36-7.png
    Создаём интерфейс. Вроде бы всё хорошо, но при запуске сталкиваемся с очень долгой загрузкой.
    upload_2024-5-2_20-36-55.png
    Инструменты разработчика. Настройка.
    upload_2024-5-2_20-37-34.png

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

    Вложения:

    Последнее редактирование модератором: 17 май 2024 в 17:53
  2. arestov

    arestov Участник

    upload_2024-5-2_20-40-41.png
    Когда мы его включаем, появляется жучок в правом нижнем углу.
    upload_2024-5-2_20-41-14.png
    Нажимаем на жучка и получаем окно инструмента разработчика. В окне 3 части, где слева сгруппированы происходящие на форме события, посередине таймлайн, где видно, что 25 секунд открывалась форма, в правой части отображается детализация выбранного события.

    В нашем примере мы видим очень много запросов к серверной части. Обычно это бывает, когда мы делаем какой-нибудь поиск или запрос объекта в серверном скрипте в цикле.
    upload_2024-5-2_20-41-48.png
    upload_2024-5-2_20-42-26.png
    upload_2024-5-2_20-43-19.png Собственно, эта проблема у нас и появилась. Мы увидели, что сценарий написан плохо. Переписываем хорошо. Получилось сокращение времени на открытие в 30 раз, количество серверных запросов сократилось до 2-х. Это успех.
    upload_2024-5-2_20-43-44.png
    upload_2024-5-2_20-44-9.png
    Бывает проблема, которая воспроизводится только у пользователя, а у нас нет. В такой момент можем позволить воспользоваться инструментом разработчика пользователю. Для исследования пользователь может для нас скачать логи. Пользователя перед этим нам нужно добавить в возможность отладки виджетов.

    Инструменты разработчика для не разработчика
    upload_2024-5-2_20-44-54.png

    Логи мы читаем и анализируем.
    upload_2024-5-2_20-45-47.png
    upload_2024-5-2_20-46-25.png
    Если удобнее визуальный интерфейс, то мы также можем эти логи загрузить в инструмент разработчика.
    upload_2024-5-2_20-50-13.png
    Последнее редактирование модератором: 17 май 2024 в 16:49
  3. arestov

    arestov Участник

    Отчёт о производительности.
    upload_2024-5-2_20-48-24.png
    Отчёт нужен, чтобы отследить, какие тяжёлые операции происходят в системе.
    upload_2024-5-2_20-48-54.png
    Включается он в инструментах разработчика. По умолчанию он отключен, чтобы не нагружать систему. Там можно настроить его расписание, включить и скачать логи.
    upload_2024-5-2_20-52-18.png
    upload_2024-5-2_20-52-57.png
    upload_2024-5-2_20-53-40.png
    upload_2024-5-2_20-54-14.png
    Что из себя представляют логи? Это excel документ со всем списком запросов, сколько раз обращение происходило к серверу и какое время они занимали. Отчёт также содержит информацию о том, как отрабатывают сценарии. Также мы можем посмотреть информацию по SQL-запросам. Средствами excel мы уже можем анализировать отчёт, фильтровать, сортировать, находить самую тяжёлую операцию.

    On-premises. Тонкая настройка инфраструктуры.
    upload_2024-5-2_20-55-1.png
    К инфраструктуре мы относим:

    - «Железо», ОС и сети;

    - Контейнеризация (это наш Kubernetes);

    - Базы данных и хранилища.

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

    On-premises. Мониторинг
    upload_2024-5-2_20-55-33.png

    Мониторинг позволяет нам увидеть, как используются ресурсы. Настраиваем Prometheus и Grafana и работаем с ними. У нас есть замечательные статьи на эту тему.

    On-premises. Системные логи
    upload_2024-5-2_20-56-2.png

    Наша система пишет для Администраторов логи. Это полезная информация для прочтения.

    Трассировка.
    upload_2024-5-2_20-56-25.png
    Трассировка — это инструмент для того, чтобы провалиться в исполнение какой-то функции. Допустим, мы делаем какую-то функцию и в ней какая-то ошибка. Для того чтобы пройти её всю по шагам, существует инструмент трассировки. Он помогает найти узкое место, в которое мы упираемся, или найти какие-то ошибки в логике.
    upload_2024-5-2_20-56-48.png
    Для трассировки рекомендуем использовать Jaeger. С помощью него можно в первую очередь найти проблемные места. Можно задать критерии фильтрации, где можем указать продолжительность операций, которые мы хотим посмотреть, сервис, к которому мы обращаемся. Как правило, это будет main или processor. В результате, мы получим список интересующих нас операций.
    upload_2024-5-2_20-57-11.png
    Открыв конкретную операцию, мы видим таймлайн, как происходит выполнение всей функции. Есть возможность провалиться непосредственно в SQL-запросы. Тут нам открывается возможность оптимизации средствами Postgre. Можем добавить какие-то индексы или переписать сценарий, чтобы использовать кэш, чтобы не загружать лишний раз инфраструктуру и таким образом ускорить роботу процесса.
    upload_2024-5-2_20-57-39.png

    Вложения:

    Последнее редактирование модератором: 17 май 2024 в 16:55
  4. arestov

    arestov Участник

    upload_2024-5-2_20-58-41.png

    Вложения: