Описание технологического базиса low-code платформы Loginom: состав, архитектура, реализация фронт- и бэкенда, функционал, производительность. Ответы на наиболее часто задаваемые технические вопросы.
Loginom — low-code платформа для продвинутой аналитики, позволяющая минимизировать написание кода. Платформа содержит обширный набор инструментов анализа и исследования — начиная с простых математических операций и заканчивая нейросетями, что позволяет выстраивать сквозной процесс обработки данных: от ETL до интеллектуального анализа данных и машинного обучения.
Loginom ориентирован на обработку структурированных, т.е. табличных данных. Благодаря своей высокой производительности платформа может с успехом применяться для обработки больших данных.
Loginom функционирует как серверное приложение для коллективной работы, либо как настольное приложение для персональной аналитики.
Серверные редакции платформы включают следующие компоненты:
Настольные редакции включают единственный компонент — Desktop, имеющий такую же кодовую базу, что и остальные редакции платформы. Подобный подход позволяет охватить все кейсы использования платформы и минимизировать потребность в разработке двух вариантов Loginom для настольного и серверного применения.
Loginom Desktop — это обычное приложение, выполняемое на компьютере пользователя. В него встроен локальный сервер Loginom для расчетов и Chromium Embedded Framework для отображения пользовательского интерфейса. Доступ к локальной сети или интернету приложению не требуется.
Редакция функционирует под Windows не ниже версии 10 и Linux не ниже версии ядра 5.3.
Loginom Desktop под Linux использует кроссплатформенную библиотеку элементов интерфейса GTK3 и может быть установлен на дистрибутивы операционной системы, поддерживающие GTK3, с минимальной версией ядра 5.3 Если планируется использование Python-a, то минимальная версия ядра 4.11. Кроме того, в некоторых случаях используются утилиты xdg-open и dbus-send, значение переменной окружения DESKTOP_SESSION.
Loginom не накладывает ограничения на способы развертывания. Доступны следующие варианты:
Платформа готова для работы в облаке. При наличии документации компании-провайдера Loginom Company подготовит образ для развертывания в любом облаке. Готовый к использованию сервис с оплатой за время работы доступен на платформе Yandex Cloud.
Серверные редакции могут функционировать в контейнерах. Тестировалось со следующими версиями инструментов контейнеризации:
В дистрибутив Loginom под Linux включены скрипты для создания собственных образов. Следовательно возможно создание контейнеров, включающих не только компоненты платформы Loginom, но и вспомогательное ПО: клиенты для доступа к базам данных, интерпретатор Python с инсталлированными библиотеками, пакеты Loginom, файлы с данными и прочее.
Использование Docker и Podman позволяет обеспечить выполнение политик безопасности, ограничить объем потребляемых ресурсов (памяти, процессоров...), повысить отказоустойчивость, упросить мониторинг, автоматизировать процессы развертывания и масштабирования. Кроме того контейнеры предоставляют возможность работы поверх устаревших версий ОС, в которых отсутствуют необходимые библиотеки.
Для разработки платформы используются 7 языков программирования: Assembler, C, C++, C#, Pascal, TypeScript, JavaScript. Выбор обоснован требованиями обеспечения высокой производительности и экономного расхода оперативной памяти.
Используемые библиотеки: Acorn, ALGLIB, Ararat Synapse, AvlTree.TypeScript , Brian Gladman's SHA, BrianGladman's AES, CEF4Delphi , ChakraCore, ClickHouse C++ client, CodeMirror, DateTimeField, Ext JS, FileSaver.js, Firebird, ICU, jsPDF, LIBLINEAR, librdkafka , libxml2, libxslt, Log4D, LZ4, MariaDB Connector/C, Mbed TLS, Metadata Reflection API, MKL, Newtonsoft.Json, NLog, NSwag, OpenSSL , PCRE2 , Plotly.js, Promise Polyfill, SoapCore, SQLCipher, Swagger UI, SynLZO , TCMalloc, Tern, xxHash.
Кроме этого в Loginom используется .NET Core, веб-сервер Apache HTTP Server, фреймворк Chromium Embedded Framework и семейство шрифтов Source Sans Pro.
В процессе выбора тестировалось множество библиотек, из которых отбирались те, что обеспечивают максимальную производительность и возможность гибкого управления памятью. Все библиотеки, используемые в платформе, доступны с исходными кодами, не накладывают ограничения на их использование и исключают лицензионные отчисления со стороны конечного пользователя.
Loginom может функционировать как платформа с двухзвенной архитектурой с сервером, выполняющим расчеты, и тонким клиентом в виде браузера для настроек, проектирования сценариев и визуализации.
Поддерживаемые браузеры: Chrome, Firefox, Opera, Safari, Edge, Яндекс.
Studio — тонкий клиент, обменивается данными с Loginom Server по протоколу WebSocket. Соединение между ними может устанавливаться одним из двух способов — напрямую с сервером Loginom, либо через WebSocket proxy, настроенном на web-сервере.
Взаимодействие Server — Studio без wsproxy (по умолчанию):
Взаимодействие Server — Studio с использованием wsproxy:
Веб-сервер, указанный в схемах, используется для предоставления статических данных, например, JavaScript-файлов, таблиц стилей или иконок. При необходимости он же может выступать в качестве прокси между браузером и Loginom Server.
В случае применения Integrator обеспечивается возможность обращаться к Loginom Server извне посредством API (SOAP+WSDL или REST JSON).
Взаимодействие Loginom Integrator с Server при работе поверх Windows:
При работе поверх Linux вызов сервисов Loginom может осуществляться как за счет обращения напрямую к Integrator, так и опционально через Apache HTTP Server:
Loginom Server и Integrator в редакции Team могут быть установлены только на одном сервере. Для коммуникаций между ними используется Unix domain socket.
В редакциях Standard и Enterprise компоненты Server и Integrator могут функционировать как на одной машине, так и на разных. При работе на одном сервере взаимодействие между ними осуществляется посредством Unix domain socket или TCP, а на разнесенных — только при помощи TCP.
В платформе имеются компоненты интеграции с SOAP и REST сервисами, которые реализуют наиболее распространенные варианты взаимодействия с веб-сервисами.
Если внешний нестандартный веб-сервис использует индивидуальные протоколы и шифрование данных, с которыми невозможно взаимодействовать встроенными компонентами Loginom, то интеграцию можно реализовать за счет написания кода на JavaScript или Python.
Loginom Server и Integrator способны функционировать в гетерогенной IT среде. Например, возможна работа Server под Linux совместно с Integrator под Windows, либо любые другие сочетания операционных систем и компонентов платформы.
Серверные компоненты аналитической платформы функционируют на операционных системах Windows и Linux.
Windows:
Linux:
Server и Integrator при работе без контейнеров запускаются как сервис systemd, а в случае работы внутри контейнера как процесс с PID 1.
Протестированные дистрибутивы: Astra Linux 1.7.3, Debian 11.5, Fedora 36, OpenSUSE 15.4, Ubuntu 22.04, РЕД ОС 7.3.2.
Loginom сервер спроектирован как монолитная система, но при использовании кластера серверов возможна организация взаимодействия по принципам слабосвязанных распределенных компонентов (сервисов).
Loginom Server обеспечивает вертикальное масштабирование и эффективную утилизацию ресурсов одного сервера:
При использовании нескольких Server и Integrator возможно построение кластера серверов, обеспечивающих отказоустойчивость, горячую и холодную замену, горизонтальное масштабирование и балансировку нагрузки.
В Loginom Integrator реализован тривиальный способ распределения задач и балансировки нагрузки между серверами Loginom: распределение задач по циклу между серверами с учетом загруженности узла. Для реализации более сложной оркестрации необходимо применение дополнительного программного обеспечения.
Возможна реализация различных кластерных архитектур, например, единый кластер серверов, где все Intergator-ы связаны cо всеми Server-ами,
либо кластер, состоящий из независимых контуров, каждый из которых включает один Integrator и один Server.
либо любой их комбинации.
При функционировании в режиме кластера каждый ее компонент (сервис) является самодостаточным и автономным в разрезе исполнения возложенной на него задачи.
Клиент реализован как одностраничное приложение (Single Page Application), использующее единственный HTML-документ как оболочку для всех веб-страниц и организующее взаимодействие с пользователем через динамически подгружаемые HTML, CSS, JavaScript, обычно посредством AJAX. Постоянный доступ к сети обязателен, т.к. вся реальная обработка происходит на сервере.
Каждой экранной форме соответствует уникальный URL, позволяющий адресоваться к нему и делиться со сторонними пользователями в случае необходимости.
Для экономии веб-трафика используется сжатие и пакетная передача данных через собственный быстрый Remote Procedure Call (RPC), оптимизированный для обработки больших объемов данных и минимизации количества обращений клиента к серверу.
Данные, необходимые для визуализации, рассчитываются и хранятся на сервере. Браузер обращается к прокси-слою и передает параметры, позволяющие определить, какой объем данных требуется визуализатору. Специализированный промежуточный слой между браузером и сервером реализуют AJAX подход, т.е. передачу только части данных, необходимых для отображения. Таким образом, минимизируется объем передаваемых данных для каждого варианта отображения.
Например, визуализатор куб передает информацию о ячейках, отображаемых на экране. Прокси-слой получает от ядра сервера объем данных, необходимый для отображения фрагмента куба, который демонстрируется на экране. В результате, визуализатор, получив небольшой, но достаточный для отображения блок данных, быстро отображает его в браузере.
Благодаря тому, что для работы с сервером требуется только браузер, технически возможна работа с мобильных устройств, но интерфейс Loginom не адаптирован под маленькие экраны. Достаточно комфортная работа возможна на планшете.
Возможности стилизации пользовательского интерфейса под корпоративные стандарты отсутствуют.
Логической единицей платформы является пакет. Он представляет собой XML и бинарные файлы, упакованные ZIP-ом. Пакет включает в себе все сущности, которые доступны в Loginom, а также ссылки на другие пакеты, компоненты которых могут быть импортированы.
Для повышения скорости загрузки в файле пакета информация сохранена дважды: в бинарном виде и XML. Если версия пакета совпадает с версией приложения, то производится чтение бинарных данных, что значительно быстрее. Если же пакет был сохранен в предыдущих версиях Loginom, данные считываются из XML, и при необходимости конвертируются в новый формат.
Loginom базируется на идее объектно-ориентированного моделирования, т.е. каждый узел сценария является не просто обработчиком, а классом с возможностью наследования. Ключевым компонентом платформы является подмодель — контейнер, включающий в себя другие узлы. Уровень вложенности подмоделей не ограничен.
Компоненты, реализующие базовые алгоритмы являются встроенными, но аналитик может создавать собственные производные компоненты, чаще всего в виде подмоделей (в том числе и без кодирования) с последующей публикацией для применения сторонними аналитиками.
Поддерживаются две стратегии проектирования сценариев:
Low-code идеология допускает применение языков программирования для реализации сложной логики. В Loginom встроена поддержка 2-х популярных языков программирования: Python и JavaScript.
Взаимодействие между узлом Python и другими узлами сценария Loginom происходит посредством Data API, реализующего интерфейсы получения и передачи данных на входных и выходных портах.
Применение Python в однопоточном режиме не требует загрузки/выгрузки данных в файлы или какие-либо другие приемники/источники. Data API позволяет «лениво» получать данные (переменные и таблицы) из входного потока и выгружать обработанные результаты (таблицу) в выходной поток.
При включенной опции запускать в отдельном процессе анализируемые данные выгружаются в промежуточные файлы и запускаются отдельные процессы интерпретатора Python для каждого узла.
В узле Python доступен вспомогательный модуль builtin_pandas_utils, позволяющий преобразовывать наборы данных Loginom в pandas DataFrame и обратно.
В Loginom под Linux поддерживается возможность запуска интерпретатора Python в контейнерах, что обеспечивает безопасную работу при соответствующих настройках контейнеров.
Для получения и передачи данных на входных и выходных портах узел JavaScript используется интерфейс Data API, полностью идентичный реализованному в компоненте Python. Data API предоставляет данные в узел JavaScript «лениво».
При этом, в отличии от Python, нет ограничений на параллельную обработку. Методы работы с данными остаются неизменными вне зависимости от того, работает ли несколько узлов JavaScript параллельно или нет.
Кроме этого компонент JavaScript поддерживает:
Предоставляется возможность подгружать готовые библиотеки JavaScript. Поддерживаются 2 модульные спецификации: EcmaScript 6 и CommonJS.
Помимо узла JavaScript, данный язык программирования можно использовать в обработчике Калькулятор, позволяющий писать формулы как в стиле Excel, так и на JavaScript.
Настольные редакции имеют доступ ко всем объектам на рабочей станции с учетом прав пользователя, а в серверных редакциях для работы с файлами и папками предназначено файловое хранилище:
Пользователь серверных редакций Loginom не имеет доступа к объектам за пределами файлового хранилища, за исключением случаев использования обработчика Выполнение программы и Python без работы в контейнерах. Т.к. эти обработчики небезопасны, права на их использование должны быть явно предоставлены администратором. По умолчанию в серверных редакциях они отключены.
В платформу встроено множество вариантов визуализации, в том числе и OLAP-модуль — Куб. Куб является мощным средством многомерного анализа, отображающий данные в виде кросс-таблиц и кросс-диаграмм. Он поддерживает все варианты интерактивного манипулирования данными: группировку, сортировку, drill-down, детализацию, расчет многомерных показателей и прочее. Просмотреть данные при помощи куба можно после любого шага обработки.
Помимо куба в Loginom встроено множество специализированных визуализаторов: таблица, статистика, качество данных, профили кластеров, качество бинарной классификации и прочее. Любой из визуализаторов можно вынести на панель отчетов, с возможностью группировать отчеты по папкам.
Предусмотрена специальная роль — просмотр отчетов. Пользователю с данной ролью, при открытии проекта Loginom не показываются сценарии, модели, подключения и прочие объекты, предназначенные для настройки алгоритмов обработки. Данный пользователь видит только переменные, которые он может изменить и панель отчетов. При выборе интересующего отчета, платформа в фоновом режиме выполнит все вычисления и отобразит визуализатор.
Пользователь с ролью «просмотр отчетов» не имеет возможности изменить логику обработки, но может подстраивать под себя варианты представления рассчитанных данных, например, выбрать способ расположения измерений в кубе или тип графика. Таким образом, конечный пользовать получает доступ к преднастроенным аналитическим отчетам с возможностью самостоятельного выбора вариантов отображения результатов обработки.
В случае, если возможностей визуализации средствами платформы не достаточно, предусмотрена интеграция со специализированными BI системами: Visiology, Tableau, Yandex Datalens и прочее.
Возможности построения регулярной отчетности, например, в виде стандартизированных печатных форм в Loginom отсутствуют.
Loginom содержит встроенный диспетчер, предназначенный для просмотра открытых сессий и пакетов, мониторинга и управления их активностью, очистки пула пакетов.
Платформа имеет механизмы логирования, позволяющие записывать в файл информацию с нужным уровнем детализации: трассировка, отладка, информация, событие, предупреждение, ошибка, авария. Возможна запись в лог-файл не только технических данных, но и записей сформированных в процессе выполнения сценария. Лог-файлы содержат детальную информацию, включающую имя пользователя, номер сессии, время, GUID узла, текст сообщения, текст и класс исключения и прочее.
В Windows редакциях для записи в лог-файл Loginom используется формат Log4j (проект Apache Logging Project). Парсинг файлов данного формата поддерживается множеством библиотек и инструментов.
В Linux редакциях помимо записи в файл в формате Log4j поддерживается системный демон журналов systemd — Journald. В Loginom под Linux это способ логирования по умолчанию, обладающий рядом достоинств по сравнению с использованием файлов:
Благодаря наличию стандартных логов возможно построение систем мониторинга «здоровья» сервера с применением дополнительных инструментов, например, Elasticsearch, Grafana и прочее.
Loginom не имеет встроенной поддержки репозитория моделей, DevOps, CI/CD. Для реализаций данного функционала предлагается решение Loginom DevOps, представляющее собой набор инструментов, преднастроенных сред, скриптов и соглашений об оформлении, автоматизирующих все этапы жизненного цикла разработки и эксплуатации моделей.
Loginom DevOps построен на базе популярного стека: Git, GitLab, Docker, NGINX, Gitbook, NodeJS. Ввод в эксплуатацию Loginom DevOps требует адаптации скриптов к инфраструктуре заказчика.
В Loginom отсутствуют механизмы ввода данных. Анализируемые данные импортируются из внешних систем. Результаты обработки могут быть выгружены во внешние системы, предоставлены как итог работы веб-сервиса или отображены на экране при помощи визуализаторов.
Способы интеграции с внешними системами:
При реализации HTTP запросов для создания TLS-соединения используется OpenSSL, а в качестве HTTP-клиента — Synapse. В редакции Loginom под Windows если требуется аутентификация при помощи сертификата клиента, размещенного в хранилище сертификатов Windows, используется Secure Channel.
Для импорта из 1Сv8 используется COM-соединение. В Loginom задается запрос к учетной системе на SQL-подобном языке 1С. Запросы можно составлять как на кириллице, так и на латинице. В запросе используются сущности учетной системы (регистры, журналы, справочники...), т.к. он обрабатывается сервером 1С. Для работы через COM-соединение необходима установка толстого клиента 1С той же разрядности, что и разрядность приложения/сервера Loginom.
Для экспорта в Tableau применяется Tableau SDK, позволяющий сформировать файлы в форматах hyper и tde. Созданный файл с загруженными данными можно опубликовать, отправив на сервер Tableau при помощи REST запроса (посредством Synapse + OpenSSL).
Loginom не требует обязательного наличия базы данных или хранилища. Для аналитической платформы они выступают в качестве источника или приемника данных, откуда можно импортировать записи и загрузить после любого этапа обработки.
Отсутствует жесткое требование разработки специального хранилища данных. Возможно использование существующих хранилищ данных или других источников и встраивание Loginom в существующую информационную инфраструктуру.
Поддерживаются как реляционные, так и колоночные базы данных. Взаимодействие с большинством баз осуществляется посредством прямого доступа при помощи быстрых драйверов, поддерживающих специализированные механизмы, такие как загрузка пачками.
Поддерживаются следующие системы.
Тип источника данных | Наименование/формат |
---|---|
Файлы | Excel, Loginom Data File, XML, CSV-файл |
Реляционные базы данных | RedDB, Firebird, Interbase, MS Access, MS SQL, MySQL, Oracle, PostgreSQL, SQLite |
Колоночные базы данных | BigQuery, Yandex ClickHouse |
ODBC | Teradata, Hive, HP Vertica и др. |
Веб-сервисы | SOAP (XML + WSDL), REST-сервисы (OpenAPI) |
Бизнес-системы | 1C: Предприятие 8.x* |
BI-системы | Visiology, Yandex DataLens, Tableau* |
Брокеры сообщений | Kafka |
*только в редакции Loginom под Windows.
Loginom поддерживает встраиваемую СУБД SQLite, не требующую развертывания и администрирования. SQLite представляют собой библиотеку, присоединённую к серверу Loginom. Она обеспечивает высокую производительностью и малый расход памяти, благодаря специализированному API, минимизирующему число операций чтения-записи. SQLite поддерживает шифрование.
Для работы с NoSQL базами возможно использование механизма REST-запросов, также поддерживаемого платформой Loginom.
Loginom имеет встроенную поддержку реляционного хранилища данных (ROLAP) на базе 3-х СУБД: Oracle, MS SQL, Firebird. При помощи конструктора разрабатывается схема хранилища, т.е. устанавливается соответствие между объектами предметной области: процессами, измерениями и фактами, формируя семантический слой. Есть встроенные обработчики для импорта и экспорта в хранилище данных.
Благодаря семантическому слою, пользователь оперирует не полями и колонками таблиц базы данных, а бизнес-терминами, такими как клиент, товар, сумма продажи и прочее. При импорте/экспорте данных система автоматически производит все требуемые манипуляции, необходимые для работы с реляционной СУБД и формирует корректный SQL-запрос. Таким образом, семантический слой дает пользователю возможность сосредоточиться на анализе и не задумываться о механизмах получения данных.
Для публикации собственных веб-сервисов необходимо применение опционального компонента платформы — Loginom Integrator. Пользователю, публикующему веб-сервис, должны быть предоставлены соответствующие права.
В качестве веб-сервиса можно опубликовать любой узел сценария, но чаще всего объектом публикации является подмодель. Кодирование не обязательно. Создается одновременно 2 типа сервисов: XML с WSDL описанием и REST JSON с OpenAPI описанием. Документация по API формируется автоматически.
При вызове GET или POST методов можно передать параметры на входные порты опубликованного узла, реализующего логику обработки. GET позволяет передать только переменные, а POST — переменные, таблицы, деревья.
В случае вызова подмодели, сервер выполнит только те операции, результаты которых передаются на выходной порт подмодели и проигнорирует все остальные узлы. При необходимости принудительного выполнения произвольного узла не связанного с выходным портом, например, экспорта в базу данных, необходимо настроить порядок выполнения, протянув связь от данного узла к выходному порту.
Для данного режима возможен запуск только одного узла, а не всего пакета.
Настроенные сценарии можно запустить не только в интерактивном, но и в пакетном режиме. Для этого необходимо дать серверу Loginom команду выполнить сценарий, что можно сделать 3-мя способами:
Можно запустить как весь пакет, так и конкретный узел сценария, используя любой из описанных способов. Будут выполнены только ветки потока данных, заканчивающиеся узлами экспорта, так как остальные действия бессмысленны в случае пакетной обработки.
Планировщик позволяет аналитикам самостоятельно настраивать выполнение задач по расписанию и автоматизировать рабочие процессы. Он предлагает удобный пользовательский интерфейс для настройки заданий, логирования процесса и мониторинга обработки.
В планировщике можно просматривать сеансы выполнения задач, как активных, так и завершенных, а при длительном выполнении пакета отслеживать прогресс обработки и при необходимости прервать работу.
При запуске в пакетном режиме любым из способов можно передавать параметры. Ошибки выполнения выводятся в консоль или записываются в лог на сервере.
При наличии соответствующих прав команду на запуск BatchLauncher можно дать как с сервера, так и с любой рабочей станции, имеющей доступ к Loginom Server. В этом случае утилита подключится к серверу по TCP-протоколу и запустит сценарий. По выполнению BatchLauncher возвращает код завершения программы.
Пакетное выполнение поддерживается только в серверных редакциях Loginom. Настольные редакции допускают работу исключительно в интерактивном режиме.
Таким образом, пакетное выполнение может быть запущено как по регламенту при помощи планировщика или утилиты, так и по событию за счет вызова веб-сервиса.
Loginom — одна из самых высокопроизводительных low-code платформ продвинутой аналитики в мире, что достигается за счет оптимизации на всех уровнях:
Асинхронный пользовательский интерфейс не гарантирует высокую скорость обработки, но создает ощущение комфорта и высокой отзывчивости системы даже в случаях, когда выполняются долгие операции, связанные с обращением к внешним системам или сложными математическими расчетами. GUI не блокируется и пользователь может переключиться на другую задачу, а не ждать завершения выполнения длительной операции.
Время отклика платформы зависит от множества показателей: аппаратные ресурсы, сложность логики обработки, скорость источников данных, время отклика веб-сервисов и прочее. Поэтому сложно указать точные метрики производительности без дополнительных уточнений.
Для оценки пропускной способности платформы указаны некоторые показатели, которые были достигнуты в проектах:
Требования к аппаратным ресурсам определяются объемами обрабатываемых данных, сложностью используемых алгоритмов и количеством пользователей. Loginom эффективно утилизирует аппаратные ресурсы и предъявляет минимальные системные требования, но расчет параметров серверов для конкретного проекта требует самостоятельного изучения. Минимальные и рекомендованные системные требования указаны в документации.
Серверные редакции платформы предоставляют возможность управления пользователями, которые могут быть созданы локально. В редакции Enterprise поддерживаются популярные стандарты аутентификации, такие как LDAP и OpenID.
В качестве LDAP-сервера могут использоваться как Active Directory, так и OpenLDAP, а при работе с OpenID — внешний провайдер, например, KeyCloak.
Применение OpenID позволяет:
Предусмотрено 4 роли пользователей:
Для каждого пользователя создается изолированное пространство в файловом хранилище, но администратор может предоставить выбранному пользователю полный доступ ко всем файлам в хранилище.
Кроме этого имеется возможность создания совместных папок с предоставлением прав доступа к ним. Права доступа предоставляется не на пакет или узел, а на папку целиком.
Сервер Loginom не собирает и не отправляет в скрытом фоновом режиме информацию на внешние ресурсы. Однако клиент обращается к сайту loginom.ru при помощи вызова REST API для получения следующей информации:
При этом обращения к сайту loginom.ru осуществляются не сервером, а браузером или настольным приложением.
Доступ в интернет не является обязательным для корректной работы платформы. Единственным следствием его отсутствия станет то, что пользователь не будет проинформирован о новостях компании и наличии обновлений.
Если ваша компания заинтересована во внедрении Loginom, свяжитесь с нами.
Другие материалы по теме:
Loginom 7.0 — описание изменений
Loginom Help — онлайн-документация для пользователей и администраторов