Перейти к основному содержимому

2 Платформа

Описание платформы Luxms BI

Платформа Luxms BI является средой разработки аналитических приложений, которая позволяет на ее основе и в соответствии с документацией:

  • создавать и развивать новые функциональные возможности платформы командой Заказчика и/или сторонних разработчиков;
  • реализовывать разнообразные аналитические проекты в соответствии с целями Заказчика и возможностями Luxms BI.

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

  • открытые описанные интерфейсы (API), в том числе между внутренними компонентами системы;
  • единые стандарты разработки и документирования кода;
  • возможность вести собственные «локальную» разработку в соответствии со стандартами;
  • открытую и гибкую систему администрирования системы и обновления версий;
  • полное описание и документирование всех компонентов;
  • публикацию кода отдельных важных элементов и разработка по принципу открытости (open source);
  • современная, открытая, датацентричная архитектура и подтвержденное быстродействие на больших данных;
  • независимость от аппаратных платформ и типов процессоров и операционных систем.

Применение платформы позволяет решать целевые задачи бизнеса значительно быстрее и существенно меньшими временными и трудовыми затратами.

Перечислим основные компоненты платформы Luxms BI, их роль, состав и технические особенности.

Клиентское приложение (Front-end)

Клиентское приложение (Front-end) реализован в виде веб-приложения на HTML5/JavaScript для браузеров. Установка дополнительного ПО и плагинов не требуется. Совместим со всеми современными версиями браузеров: Firefox, Internet Explorer, Edge, Chrome, Safari. Приложение разработано с использованием адаптивной вёрстки. Для доступа к Front-end можно использовать офисные и портативные компьютеры, смартфоны и планшеты с самым разным разрешением экрана. Front-end оптимизирован для работы на устройствах с сенсорным экраном.

Клиентское приложение можно условно разделить на две части:

  • Пользовательский интерфейс;
  • Административная панель.

Пользовательский интерфейс

Пользовательский интерфейс позволяет работать с интерактивными визуализациями, такими как:

  • информационные панели/дэшборды;
  • графики трендов;
  • отображение метрик на карте;
  • сквозная детализация по всей вертикали с возможностью поиска первопричин;
  • светофорная индикация.

Пользовательский интерфейс Luxms BI предоставляет следующие средства для работы с аналитическими данными:

  • перечень доступных для отображения метрик с возможностью выбора пользователем;
  • перечень доступных фильтров;
  • возможность анализировать данные за выбранный период;
  • возможность отображать нормативные значения для заданных периодов/метрик/объектов;
  • возможность детализации значений, позволяющей перейти с любой точки графика к просмотру детальных значений на более низком уровне иерархии выбранного показателя;
  • возможность построения двухосевых графиков для анализа корреляции метрик, имеющих разные единицы измерения;
  • возможность сохранять диаграммы в формате .png и таблицы в формате .xlsx.

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

Список действий разработчика приведён ниже:

  • Создание, удаление, настройка атласов;
  • Импорт данных в атлас;
  • Создание, редактирование, удаление групп атласов;
  • Настройка дэшбордов в атласах;
  • Настройка параметров точки входа в атлас;
  • Добавление, редактирование, удаление подключений к источникам данных;
  • Анализ источников данных;
  • Добавление, удаление кубов;
  • Добавление, удаление шагов загрузки;
  • Добавление, удаление задач по загрузке.

При визуализации данных на карте используются растровые изображения (tiles). Растровые изображение могут быть сгенерированы заранее для какой-либо географической области, либо можно использовать сервера, генерирующие растровые изображения по запросу. Например: Яндекс.Карты, OpenStreetMap, ArcGIS и т.д. Для отображения областей на карте используется формат WKT. Начиная с версии Luxms BI 7 поддерживаются векторные плитки (vector tiles).

Административная панель

Административная панель позволяет управлять учётными записями, группами пользователей, атласами, дэшбордами, правами доступа к различным объектам. Список доступных операций приведён ниже:

  • Создание, редактирование, блокировка/разблокировка учётной записи;
  • Создание, редактирование удаление групп учётных записей;
  • Настройка прав доступа к атласам и прочим объектам платформы Luxms BI;
  • Отслеживание (анализ) действий пользователей;
  • Стыковка с IDM системами: MS Active Directory, KeyCloak и пр.

Для детальной информации по администрированию учётных записей, системы и функциональным возможностям смотри далее раздел 3.6 «Системное и прикладное администрирование» и документ «Руководство Администратора платформы Luxms BI».

Балансировщик нагрузки (веб-сервер)

Балансировщик нагрузки маршрутизирует и балансирует запросы с клиентского приложения Luxms BI, внешних сервисов, а также предоставляет статический контент для Front-end. Клиентское приложения взаимодействует с балансировщиком нагрузки по протоколу HTTP/HTTPS с использованием тела запроса в формате JSON. Балансировщик нагрузки представляет из себя сервер Nginx с некоторыми дополнительными модулями.

Балансировщик нагрузки предоставляет доступ к сервисам Luxms BI по протоколам HTTP, HTTPS и WebSocket (WS). Для работы с Kerberos /SSO используется модуль spnego-http-auth-nginx-module. Балансировщик нагрузки может использоваться как балансировщик нагрузки в кластерных инсталляциях. Для передачи запросов в ядро Luxms BI используется код на Lua и модуль lua-nginx-module.

Максимальный размер тела HTTP запроса ограничен настройками Nginx и составляет по умолчанию 100Мб.

При необходимости защиты трафика, возможна настройка SSL/TLS, в том числе поддерживаются сертификаты ГОСТ.

Входящие запросы к API, которые содержат тело в формате json, проверяются на корректность формата. Если проверка не проходит, то немедленно возвращается ошибка без передачи данных сервисам Luxms BI.

Серверная часть (Back-end)

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

  • Ядро Luxms BI;
  • Сервис Key/Value DB;
  • Сервис сообщений;
  • BINS;
  • GateWay;
  • DataGate;
  • Appserver;
  • Headless Chrome;
  • Data Boring;
  • Сервис конфигурации.

Ядро Luxms BI (Metadata и Datasets Storage)

Ядро Luxms BI – универсальное хранилище данных, в котором хранится список пользователей, права доступа, настройки визуализации и данные для визуализации (опционально). Данные для визуализации могут храниться во внешних СУБД, без кэширования на стороне Luxms BI.

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

Каждый атлас содержит кубы, ресурсы и настройки экранов визуализации. Эти данные хранятся во внутреннем хранилище Luxms BI, в СУБД PostgreSQL. Один узел Luxms BI может поддерживать сотни атласов.

Некоторые атласы входят в поставку Luxms BI, например атлас “Аудит действий пользоватлей”.

Ядро Luxms BI обеспечивает бизнес-логику по обработке запросов клиентского приложения Luxms BI. Ядро выполняется в СУБД PostgreSQL и реализовано на языке PL/pgSQL. Для работы с большими данными к Luxms BI могут быть подключены массивно-параллельные СУБД: Greenplum, Oracle Exadata, Arenadata DB, Arenadata QuickMarts, ClickHouse.

FDW

Foreign Data Wrapper (FDW) – технология для онлайн-обращений к источникам данных из БД PostgreSQL, которая является неполной реализацией стандарта ISO/IEC 9075-9 (SQL/MED). FDW позволяет представлять таблицы, физически хранящиеся во внешних СУБД, как локальные таблицы PostgreSQL. При обращении к таким таблицам в PostgreSQL происходит передача запроса на выполнение в СУБД (push-down) и представление результата с конвертацией типов данных в типы данных PostgreSQL. Поддерживается нативное взаимодействие через FDW с СУБД Pivotal Greenplum 5 и выше, СУБД ClickHouse v19 и выше, СУБД PostgreSQL 8 и выше. Коннектор FDW для Greenplum выложен в open-source и доступен для использования.

Routing/MiddleWare

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

Authentication – набор функций для аутентификации пользователя. В поставку включены функции для аутентификации через HTTP Cookie и с помощью специального токена в URL. Второй вариант может быть полезен для встраивания экранов Luxms BI в другие веб-приложения.

Authorization – набор функций для авторизации действий пользователя. Поддерживается проверка прав доступа на основе собственных настроек Luxms BI, а также на основе информации, полученной из AD/LDAP, либо из других внешних источников.

Routing – маршрутизация запросов осуществляется на основе сопоставления HTTP метода и URL запроса с информацией в таблице webapi.routes. Если сопоставление найдено, то будет вызвана указанная в таблице процедура, либо осуществлено перенаправление запроса в указанный микросервис.

HTTP Pass Through – способ обработки входящего HTTP запроса, когда middleware ядра (процедура на PL/pgSQL) напрямую делает обращение к микросервису по протоколу HTTP и имеет возможность обработать ответ микросервиса перед отправкой ответа Front-end.

HTTP Pass Back – способ обработки входящего HTTP запроса, когда middleware ядра (процедура на PL/pgSQL) передаёт управление в микросервис. При этом HTTP ответ микросервиса будет направлен Front-end напрямую, без вовлечения middleware ядра в обработку этого ответа.

Audit Logs – инфраструктура для логирования действий пользователя. Статистика и информация о запросе доступна всем функциям middleware и микросервисам в виде специальных HTTP заголовков. Имеется возможность сбрасывать логи в CSV файл и/или в таблицу в БД.

Application logic

Блок ядра платформы Application logic осуществляет реализацию всей логики обработки запросов пользователей и действий с данными. Он реализован посредством хранимых процедур в базе данных. Application logic, например, содержит алгоритмы проверки выполнения нормативов, поиска датасетов, доступных пользователю и многих других. Хранимые процедуры Application logic осуществляют выборку данных, проверку прав доступа, форматирование данных, и проверку входных данных на корректность.

Блок ядра платформы Application logic содержит шесть основных компонентов:

DB API – универсальный открытый интерфейс (API) для доступа к таблицам Luxms BI в стиле RESTful. Позволяет создавать, получать, обновлять и удалять данные (CRUD) с помощью HTTP запросов. Сервис можно использовать для загрузки данных из внешних систем в Luxms BI.

KooB API – универсальный интерфейс (API) для работы с многомерными данными и широкими таблицами только на чтение с учетом необходимых фильтров и группировки.

Sync API – специальный системный интерфейс (API), предназначенный для согласованного изменения данных и/или параметров сразу в нескольких таблицах и в разных частях системы одновременно. Активно используется в процессе изменения параметров при администрировании платформы.

CDC – (change data capture) компонент для непрерывного отслеживания изменений данных, например, для целей резервирования и восстановления системы, запуска процессов по событию и др.

File Storage – компонент для хранения программного кода и элементов дизайна, необходимых для разработки новых дэшбордов и элементов визуализации.

LPE – (Lux Path Expressions) язык программирования, используемый как на Front-end, так и внутри базы данных для возможности программирования операций с данными, например, описание SQL шаблонов, обработка действий пользователей на Front-end и адаптация визуализации.

Cервис Key/Value DB

Микросервис Key/Value DB используется в Luxms BI для хранения сессий пользователей в многоузловых конфигурациях. Микросервис реализован на основе проекта с открытым исходным кодом KeyDB.

Сервис Tracing

Сервис Tracing используется для трассировки запросов и аудита работы других сервисов. Сервис реализован на основе проекта с открытым исходным кодом Jaeger.

к сведению

Сервис используется вендором Luxms BI для внутренней разработки и не предоставляется заказчикам.

Сервис сообщений

Сервис сообщений используется в Luxms BI как событийно-ориентированный промежуточный слой, обеспечивающий передачу сообщений между внутренними сервисами.

Сервис Pub/Sub реализован на основе проекта с открытым кодом NATS.

BINS

BINS – сервис на основе Node.js, используется для передачи асинхронных сообщений между клиентским приложением и серверной частью Luxms BI.

GateWay

GateWay – cервис, реализованный на Go. Используется для:

  • взаимодействия с LDAP/AD серверами;
  • взаимодействия с серверами Memcached;
  • конвертации HTML документа в PDF (с помощью Headless Chrome)

DataGate

DataGate – cервис, реализованный на Java, используется для получения данных из JDBC-совместимых источников, в том числе для онлайн-запросов в источники данных для обслуживания интерактивных действий пользователей. Кроме того, DataGate обслуживает работу ETL инструмента Luxms Data Boring.

AppServer

AppServer – cервис, реализованный на Java, используется для создания отчётов и презентаций в формате PDF/PPTX, а также настройки подключения источников данных.

Data Boring

Data Boring – высокоскоростной ETL инструмент для подготовки данных к визуализации в Luxms BI. Позволяет формировать горячий и тёплый слои данных, выполнять пост-обработку данных, автоматизировать выполнение регулярных задач, оптимизировать запросы под отдельные небольшие задачи. Инструмент может использовать ClickHouse для горячего слоя данных и Greenplum для тёплого слоя данных. Критический функционал для обработки данных реализован на Java и обеспечивает стыковки с Luxms BI, PostgreSQL, Hadoop, Kafka, ClickHouse, Greenplum. Визуальный интерфейс Data Boring создан на базе проекта с открытым исходным кодом Node-Red.

Серверная часть Data Boring реализована как сервис на основе Node.js, а серверная часть некоторых узлов Data Boring реализована на Java в сервисе AppServer.

Функциональное описание

Авторизация, права доступа: SSO, AD

Платформа Luxms BI поддерживает SSO в корпоративном окружении с использованием SPNEGO (Active Directory + Kerberos). Вместо Active Directory можно использовать любой LDAP сервер, например, FreeIPA.

Поддерживается аутентификация через внешнюю систему по протоколу OAuth 2.0. Также поддерживаются IAM системы, основанные на стандарте Open ID Connect, в частности, KeyCloak, Blitz Identity Provider и др.

Luxms BI хранит информацию о пользователях и их правах доступа в базе данных PostgreSQL. Доступ к системе осуществляется по логину и паролю, с использованием HTTP cookie. Безопасность обеспечивается шифрованием трафика по стандарту SSL/HTTPS. В базе данных хранятся хэш-суммы паролей, поэтому восстановить пароль невозможно, даже имея доступ к базе данных.

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

Поддерживается стыковка с LDAP и Active Directory для аутентификации и авторизации пользователей с помощью Luxms BI Gateway.

В системе, не хранятся секреты в открытом виде. Пароли пользователей хэшируются алгоритмом SHA512 с использованием соли длинной 12 символов.

Работа с источниками, загрузка данных

Возможны следующие основные методы работы с источниками данных:

  • Онлайн запросы в источник данных, в том числе для получения первичных данных из учётных систем (Table Lookup);
  • Онлайн запросы в источник данных для выборки значений метрик «на лету»;
  • Импорт/прямая загрузка c помощью Data Boring;
  • Сложные конвейеры обработки данных с помощью Data Boring;
  • Ручная и автоматическая загрузка Excel файлов.

Импорт данных в Luxms BI может осуществляться из самых разных источников, например:

  • Системы управления реляционными базами данных: Oracle, DB2, MS SQL Server, MySQL, PostgreSQL, ClickHouse, Greenplum, SAP HANA, и прочие JDBC/HTTP совместимые источники;
  • Хранилища данных: Teradata DWH, SQL Server Analysis Services и другие MDX совместимые;
  • SAP RFC;
  • Системы бизнес-аналитики: Oracle BI;
  • Big Data источники, Data Lakes: Hadoop, HBase, Hive;
  • Системы бухгалтерского учёта (1C, ПАРУС);
  • Таблицы Excel и CSV файлы;
  • Специализированные системы мониторинга и учёта;
  • Неструктурированные источники, архивы документов;
  • Потоковые источники данных, в том числе реального времени: очереди и логи сообщений, такие как Apache Kafka, NATS, MQTT, RabbitMQ, Syslog, SNMP, Redis и т.д.

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

Luxms BI не накладывает никаких ограничений на визуализацию значений метрик, полученных с помощью онлайн запросов. Их можно использовать во всех типах визуализации.

Luxms BI может работать в режиме кэширования «медленных» (редко меняющихся) данных, когда это оправдано, например, даёт выигрыш в скорости отображения. Для кэширования данных и увеличения скорости работы необходимо использовать ClickHouse или Arenadata QuickMarts.

Clickhouse может быть установлен как часть платформы Luxms BI. В случае, если у заказчика уже имеется собственный кластер Clickhouse или доступ к облачной инсталляци Clickhouse, то Luxms BI можно подключить к внешнему кластеру Clickhouse.

Data Boring (ETL)

Для обработки данных используется Data Boring - инструмент визуального программирования класса dataflow programming. Краткий список компонентов Data Boring:

  • экспорт данных из JDBC источников с оптимизацией для PostgreSQL;
  • загрузка данных в JDBC источники с оптимизацией для PostgreSQL и Clickhouse;
  • выполнение SQL запросов в JDBC источниках;
  • коннектор для Kafka;
  • коннектор для Redis;
  • коннектор для TCP/UDP сокетов;
  • коннектор SAP RFC;
  • интерфейс для Jupyter Notebook;
  • интерпретатор JavaScript;
  • HTTP сервер и HTTP клиент.

Data Boring позволяет подключать широкий спектр инструментов обработки данных: систем на основе правил, методов машинного обучения, математических методов любой сложности (статанализ, ML, NLP, кастомные скрипты на R/Python), для текстовых данных - методов NLP.

Метаданные

С точки зрения BI приложения данными являются цифры и тексты, которые отображаются на экране с помощью разных визуализаций. Также к данным Luxms BI можно отнести файлы, содержащие код и изображения (ресурсы).

Административная панель позволяет управлять всеми типами метаданных.

Структурные метаданные

  • Атласы;
  • Дэшборды;
  • Дэшлеты;
  • Кубы;
  • Источники данных;
  • Графы задач ETL.

Описательные метаданные

  • Информация о пользователях;
  • Заголовки и комментарии к объектам Luxms BI;
  • Дата создания и изменения объектов Luxms BI.

Административные метаданные

  • Права доступа;
  • Журнал действий пользователей.

Стандартная визуализация

В стандартную визуализацию данных входит более 30 визуальных представлений, доступных в дистрибутиве Luxms BI. Обеспечиваются следующие средства работы для пользователя:

  • Дэшборды;
  • Географические карты;
  • Тренды;
  • Мнемосхемы на основе SVG;
  • Декомпозиция объектов, метрик и периодов наблюдения;
  • Глубокая детализация до первопричин, в том числе, до транзакционных данных;
  • Светофорная индикация «красный-жёлтый-зелёный» отклонений от целевых значений;
  • Рейтинги «отличников и двоечников»;
  • Инструменты совместной работы: интерактивные презентации, обсуждения, поручения исполнителям;
  • Личные кабинеты руководителей;
  • Экспорт данных;
  • Встраивание дэшбордов Luxms BI во внешние системы, в том числе на публично доступные сайты.

Примеры представлены в документе «Перечень типов визуализации на информационных панелях ПО ВУК Luxms BI».

Отдельно необходимо отметить широкий набор доступных визуализаций с использованием различных видов и типов карт. При визуализации данных на карте могут использоваться растровые изображения (tiles). Растровые изображения могут быть сгенерированы заранее для какой-либо географической области, либо можно использовать сервера, генерирующие растровые изображения по запросу (WMS), например, Яндекс.Карты, OpenStreetMap, ArcGIS и т.д. Внутренний формат хранения геоданных - WKT.

Генеральские дэшборды

Возможно создание индивидуальных визуализаций по эскизам дизайнера, как на уровне дэша (элемента информационной панели), так и на уровне всего интерфейса (стили, шрифты, дополнительная бизнес-логика). Штатным инструментом создания инфографики является подключение визуальных объектов в формате SVG. С помощью этого механизма можно гибко обеспечивать как управленческую визуализацию, так и, например, мнемосхемы и показ планов цехов, этажей, застройки и т.д.

Каждую компоненту SVG можно сделать интерактивной и обеспечить цветовое кодирование по заданным условиям. Расширенные возможности по созданию дизайнерских визуализаций обеспечивает JavaScript API для Front-end разработки, об этом подробнее в разделе 2.4. Такие визуализации могут быть подготовлены силами поставщика решения на платформе Luxms BI «под ключ», либо выполнены самостоятельно обученной командой Front-end разработки Заказчика.

Развёртывание Luxms BI

Основной операционной системой для установки Luxms BI является CentOS 7. Основная ОС используется для внутренней разработки и внутреннего тестирования Luxms BI, а также для передачи виртуальных машин заказчикам для пилотных проектов и демонстраций. Выбор основной ОС определяется прежде всего отсутствием лицензионных ограничений при распространении продукта.

к сведению

С 2024 года планируется использрование Rocky Linux 9 в качестве основной ОС.

Поддерживаемые операционные системы

Операционная системаВерсия ОСФормат пакетовПакетный менеджер
Linux CentOS7RPMyum
AstraLinux1.7DEBapt
RED OS7RPMyum
Rocky Linux8RPMdnf
Rocky Linux9RPMdnf

Luxms BI поставляется в виде стандартных пакетов Linux, поэтому для установки пакетов используютя пакетные менеджеры Linux: dnf, yum, apt.

Способы развёртывания Luxms BI

  • Виртуальные машины – образ в формате OVA на основе CentOS 7. Поддерживаемые варианты виртуализации: VMWare, Hyper-V, Xen, VirtualBox, Proxmox, KVM;
  • Docker – каждый компонент разворачивается в отдельном контейнере Docker. Возможны смешанные инсталляции (часть компонентов на хосте, часть в Docker контейнерах). Развёртывание в Docker рекомендовано исключительно для целей разработки или демонстраций;
  • Облака – развёртывание как в частных, так и в публичных облаках. Среди поддерживаемых публичных облаков: Azure, Google Cloud Platform, Amazon Web Services, PCF, OpenShift, Yandex Облако, облако ВКонтакте;
  • OpenShift;
  • ArenaData Cluster Manager;
  • Multi-Tenant – возможно изолирование данных на уровне БД (каждый клиент в своей логической БД в рамках общего инстанса PostgreSQL) и на уровне атласов (каждый клиент имеет доступ только к своим атласам).

Масштабирование, резервирование, отказоустойчивость

Как уже отмечалось выше, абсолютно все компоненты платформы масштабируются. Балансировщик запросов реализован на базе Nginx, что позволяет легко увеличивать количество узлов. Ядро системы реализовано на базе PostgreSQL, логика написана на PL/pgSQL, это позволяет создавать многоузловые конфигурации в виде кластеров. Чтобы гарантировать действительно непревзойдённую скорость на проектах с данными больших объёмов и интенсивности мы подключаем массивно параллельные СХД. Целевое MPP СХД - Clickhouse.

Luxms BI поддерживает одноузловую и многоузловые конфигурации.

При увеличении рабочей нагрузки возможно как горизонтальное, так и вертикальное масштабирование.

  • Вертикальное - масштабирование одноузловой конфигурации (или узлов многоузловой конфигурации) по оперативной памяти и процессорным ядрам;
  • Горизонтальное - использование многоузловой конфигурации, с возможностью конфигурирования отдельных узлов под определённые компоненты системы.

Поддерживается холодное и горячее резервирование. Настраивается автоматическое резервное копирование, например, каждый день в 4 часа ночи.

Разработка на платформе

Платформа Luxms BI располагает развитым инструментарием как для разработки на стороне клиента, так и на стороне сервера.

На стороне клиента можно создавать собственные элементы визуализации – дэши, дэшборды, настраивать цветовые схемы и стили. Для создания своих элементов визуализации предъявляются квалификационные требования к разработчику: уверенное знание JavaScript (средний уровень/middle) и пройденный короткий учебный курс по Front-end разработке на платформе Luxms BI (в формате вебинара). Элементы визуализации встраиваются с помощью документированного JavaScript API. Для их создания Front-End разработчик можно подгружать и использовать любые знакомые ему библиотеки и фреймворки JavaScript.

На стороне Back-end возможно разрабатывать:

  • собственные сервисы на любых технологиях;
  • обработчики дополнительных API вызовов на PL/pgSQL и JavaScript.

Исходные коды

В Luxms BI используются разные языки программирования. Выбор языка зависит от нескольких факторов: конечной цели создания и среды выполнения функционала, наличия готовых библиотек, наличия компетенций в команде. Например, Luxms BI Datagate написан на Java, так как JDBC
драйвера имеются практически у всех существующих БД, а Java библиотеки есть практически для любых задач обработки данных. Luxms BI Sync реализован на Go, так как имеет встроенную поддержку кросс-компиляции под все распространённые операционные системы и является удобным с точки зрения распространения и использования большим числом пользователей. Для реализации функционала Luxms BI используются также Javascript, Typescript, PL/pgSQL, C, Lua.

Документирование Luxms BI ведётся в виде отдельных описаний в формате MarkDown. В процессе ежедневной сборки конечного продукта (CI/CD) также собирается 2 версии документации: PDF и HTML. PDF версия оптимизирована для печати, а HTML версия - для онлайн просмотра.

Каждая команда разработки использует внутренние соглашения по организации и форматированию исходного кода, с учётом возможностей и ограничений средств разработки (IDE).

Все исходные коды хранятся в Git-репозитариях. Исходные коды каждого сервиса/компонента системы хранятся в отдельном репозитарии. Внесение любых изменений всегда производится в отдельных ветках (branch). После изменений запускается автоматический процесс сборки и тестирования (CI/CD). При удачном завершении тестов автоматически собирается новая патч версия пакетов для установки (RPM), однако она не предоставляется заказчикам без дополнительных интеграционных тестов.

Жизненный цикл ПО

Обновления производятся путём установки новых версий пакетов. Кластерные версии Luxms BI могут быть обновлены без остановки работы пользователей.

Для версионирования в Luxms BI используются соглашения Семантического версионирования, однако мажорная версия может быть увеличена при наличии большого количества нового функционала, даже если сохраняется обратная совместимость. https://semver.org/lang/ru/.

API

Luxms BI использует два вида API:

  • HTTP API – открытый, документированный API для подключения и взаимодействия с внешними системами, разработчиками, сервисами. Используется Front-end, административной панелью и пользовательским интерфейсом. Предоставляет полный доступ к данным и метаданным в Luxms BI. Обеспечивает возможность расширения функционала, настройки интеграций в ИТ ландшафте заказчика, импорта/экспорта данных, настройки конфигураций дэшбордов, управления правами доступа пользователей, создания датасетов, управления нормативами через API и другие возможности;
  • Внутренний API – закрытый API для взаимодействия сервисов Luxms BI между собой. Может понадобиться, если заказчик планирует добавлять собственные сервисы. В качестве транспорта используются: HTTP, WebSocket, RSocket и NATS. Документация разработчика предоставляется по запросу.

HTTP API разрешает только допустимый список методов, а именно:

  • GET
  • DELETE
  • HEAD
  • POST
  • PATCH
  • PUT

Веб-приложение Luxms BI, предназначено для использования во внутренней сети предприятия. Настройки Cross-Origin Resource Sharing отсутствуют. При необходимости публикации на публичных ресурсах рекомендуется использовать дополнительный Proxy сервер, где можно настроить CORS.

Проверки прав доступа

Доступ к API контролируется встроенной системой прав доступа на базе пользовательских групп и ролей. Значительная часть прав доступа управляется в разделе “Администрирование” веб-приложения. Дополнительные тонкие настройки прав доступа возможны путем заполнения настроечных таблиц в БД Luxms BI.

Доступ к API с помощью JWT

Luxms BI поддерживает использование JWT для доступа к HTTP API. Также поддерживается устаревший способ с использованием Cookie, который можно получить войдя в систему используя имя пользователя и его пароль.

подсказка

Начиная с версии Luxms BI 9.3 рекомендуем использовать JWT для программного доступа к API.

подсказка

Начиная с версии Luxms BI 9.3 для выпуска JWT имеется панель администратора.

Все выпущенные JWT подписываются с помощью алгоритмов HS256, HS384 или HS512. По умолчанию используется алгоритм HS256. Серверная часть Luxms BI не принимает неподписанные JWT, а также JWT подписанные алгоритмом, который не поддерживается серверной частью.

Принципы разработки ПО

При разработке Luxms BI разработчики руководствуется следующими принципами:

  1. В URL запрещается передавать секреты, например, токены или пароли.
осторожно

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

осторожно

Ограничение не распространяется на ресурсы, которые целенаправленно предоставляются в публичный доступ.

осторожно

Ограничение не распространяется на коммуникации “сервер-сервер”.

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

  2. При обработке клиентских запросов серверная часть никогда не использует конкатенацию строк для создания вторичных запросов в СУБД/внешние системы/и т.д. Для генерации таких запросов в обязательном порядке используются стандартные функции, предоставляемые стандартными библиотеками, предначенными для генерации текстовых запросов в СУБД.

  3. При обработке входящих запросов серверная часть проводит обязательную валидацию входящих данных.

  4. Когда через API запрашивается информация о пользователях, хранимая в Luxms BI, требуется явно перечислять список запрашиваемых столбцов, либо ограничивать перечень столбцов на стороне сервера. Этот список должен быть доступен для аудита, а также регулярно пересматриваться на предмет уязвимостей или избыточности раскрываемых данных.

осторожно

Ограничение не распространяется на запросы администратора.