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

1 Архитектура

Цель создания Luxms BI

Платформа Luxms BI проектировалась и развивалась с целью получить быструю аналитику на больших данных.

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

Принципы архитектуры

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

  • Датацентричность – бизнес-логика рядом с данными;
  • Открытая сервис-ориентированная архитектура – свобода выбора для заказчика;
  • Платформенность – поддержка процесса разработки приложений силами пользователей Luxms BI.

Датацентричность

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

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

  • Широкое использование хранимых процедур в базе данных для реализации бизнес-логики;

  • Двухзвенная датацентричная архитектура: сервер приложений и основная бизнес-логика расположена внутри базы данных (датацентричность ядра системы);

  • Максимально короткий путь прохождения ответа из базы данных на клиентское приложение: один промежуточный компонент – балансировщик запросов на базе Nginx;

  • Исходный код ядра системы написан с использованием датацентричного языка PL/pgSQL.

Открытая сервис-ориентированная архитектура

Открытая сервис-ориентированная архитектура подразумевает максимально широкое использование открытых программных интерфейсов (API) для:

  • взаимодействия с внешними системами;

  • взаимодействия между компонентами системы;

  • возможности лёгкой замены, удаления и добавления компонентов системы;

  • возможности расширения API силами заказчика.

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

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

  • Свобода выбора, как работать с данными: с копированием или без копирования в локальную базу.

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

  • Свобода выбора, как развёртывать компоненты Luxms BI: В облаках, на одном узле, в контейнерах Docker, на разных узлах.

  • Нет привязки к конкретной версии ОС. Запуск на ОС Linux и Unix-подобных системах при необходимости.

  • Нет привязки к типу процессора. Пример: Luxms BI может эксплуатироваться на серверах с отечественными процессорами «Эльбрус».

  • Возможность предоставления исходных кодов заказчику (при наличии такой опции в лицензионном договоре).

В Luxms BI используются как свои собственные разработки, так и ПО с открытым исходным кодом. Варианты лицензирования допускают передачу исходного кода на все компоненты Luxms BI.

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

Платформенность

Разработка приложений на платформе Luxms BI поддерживается как на уровне конфигурации и Low-Code, так и на уровне исходного кода.

Функционал клиентского приложения может быть дополнен или видоизменён с помощью программирования на TypeScript/JavaScript. При этом заказчик может использовать любые JavaScript библиотеки.

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

Архитектурные схемы

Двухзвенная архитектура

Двухзвенная архитектура

Luxms BI имеет двухзвенную клиент-серверную архитектуру. На сервере находится балансировщик нагрузки и серверная часть (Back-end). Серверная часть (Back-end) – это датацентричное ядро (сервер приложений) с основным бизнес-функционалом, которое отвечает за хранение и управление метаданными. Сервер приложений располагается внутри базы данных, основная бизнес логика реализована на языке PL/pgSQL.

Кроме того, на сервере выполняются сервисы и утилиты, отвечающие за:

  • хранение данных;
  • управление очередями сообщений;
  • управление конфигурацией и обнаружение сервисов;
  • выполнение задач ETL;
  • подготовка отчётов в форматах PDF, XLSX и т.д.
  • управление рассылкой отчётов;
  • обмен данными с внешними системами.

Клиентское приложение (Front-end) представляет собой веб-приложение с разделами для пользователя и для администратора.

Двухзвенная архитектура демонстрирует более высокую скорость обработки данных и более низкое время отклика в сравнении с трёхзвенной архитектурой. Не тратится время на выборку данных из базы данных в сервер приложений. Минимизируется трафик в сети. Нет лишних шагов по переносу информации, поэтому Luxms BI справляется практически с неограниченными объёмами данных. В полной мере могут быть задействованы возможности внешних СУБД по аналитической обработке данных.

Наши тесты в ландшафте заказчиков и на мощностях партнеров показали, что такой датацентричный, массивно-параллельный подход даёт BI-системе увеличение по скорости от 2 до 12 раз, в зависимости от сложности запросов.

Более детально ознакомиться с описанием архитектуры и тестов на скорость обработки запросов можно в опубликованной нами научной работе в одной из старейших и крупнейших международных организаций в компьютерной области Association for Computing Machinery. С текстом статьи можно ознакомиться по ссылке: https://dl.acm.org/doi/10.1145/3274856.3274869

Функциональная схема

В состав Luxms BI входят следующие компоненты:

  • Клиентское приложение - web-интерфейс пользователя (клиентская часть, Front-end) выполняемый в браузере на компьютере пользователя, в том числе web-интерфейс административной панели;
  • Балансировщик запросов - сервис на основе Nginx, который выполняет первичную проверку формата HTTP запросов и перенаправляет HTTP запрорсы в ядро или другие сервисы Luxms BI;
  • Ядро - ключевой сервис Lumxs BI, в котором происходит основная обработка запросов от пользователей. Ядро выполняет задачи аутентификации, авторизации, подготовкой ответа или дополнительных запросов в другие сервисы Lumxs BI. Ядро реализовано на PL/pgSQL и выполняется внутри PostgreSQL;
  • Сервисы Luxms BI - дополнительные сервисы, выполняющие задачи, которые трудно или невозможно реализовать в ядре Luxms BI;
  • Luxms DataBoring - сервис, обеспечивающий создание, редактирование, сохранение и запуск задач по подготовке данных (ETL/ELT);
  • Служебные сервисы Luxms BI - дополнительные сервисы, которыми пользуются основные сервисы Luxms BI, ядро и балансировщик нагрузки для обеспечения удобства разработки, удобства эксплуатации и отказоустойчивости. В качестве служебных сервисов используются: KeyDB, NATS, Patroni, Consul.

Общая архитектура

Общая архитектура

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

  1. Клиентское приложение (Front-end) формирует HTTP запрос с телом в формате JSON.

  2. Балансировщик нагрузки (Nginx) направляет HTTP запрос в сервер приложений, расположенный внутри базы данных, вызывая хранимую процедуру и передавая в неё всю информацию о входящем запросе: заголовки, тело, URL.

  3. Ядро (Сервер приложений), расположенный внутри базы данных, обрабатывает запрос каскадно вызывая различные процедуры на PL/pgSQL. В процессе работы бизнес-логики имеется возможность эффективно выполнять SQL запросы в локальное хранилище, в слои горячих/тёплых/холодных данных, а также в прочие сервисы.

Детализируем для функциональной наглядности общую архитектуру Luxms BI:

Детализация общей архитектуры

Luxms BI состоит из следующих основных частей:

Клиентское приложение (Front-end) – веб-приложение, реализованное в виде HTML5/Javascript приложения для браузеров. Клиентское приложение взаимодействует с серверной частью Luxms BI по протоколу HTTP/HTTPS с использованием тела запроса в формате JSON. Бизнес-логика ядра Luxms BI реализована в виде хранимых процедур на PL/pgSQL. Для обслуживания веб-запросов используется балансировщик запросов (Nginx). Клиентское приложение состоит из пользовательского раздела и административной панели. Административная панель позволяет управлять учётными записями, атласами, дэшбордами, правами доступа, подключениями к источникам данных, кубами и задачами ETL. Клиентское приложение работает во всех современных браузерах.

Балансировщик нагрузки принимает запросы от клиентских приложений конечных пользователей и внешних систем, которые используют API Luxms BI. Балансировщик нагрузки включает в себя серверную логику маршрутизации и балансировки веб-запросов от Front-end в Back-end Luxms BI. Он
обрабатывает и маршрутизирует запросы Front-end, а также предоставляет статический контент для Front-end. Вкачестве балансировщика нагрузки используется nginx собственной сборки.

Серверная часть (Back-end) реализует основной функционал по подготовке данных к визуализации. Ядро выполняет предобработку всех запросов, аутентификацю и авторизацию, а также обработку метаданных. Ядро Luxms BI выполняется внутри СУБД PostgreSQL. В дополнение к ядру, серверная часть состоит из нескольких сервисов и утилит отвечающих за обмен данными с внешними системами, автоматическую и ручную загрузку данных, подготовку отчётов, выполнение задач ETL. Подробнее см. в разделе 2.2. “Компоненты Luxms BI”.

Датацентричное ядро

Рассмотрим на схеме основные компоненты ядра и вспомогательных cервисов и утилит. Ядро - центральный компонент Back-end Luxms BI - представляет собой совокупность блоков: маршрутизации/связующего слоя, прикладной логики, хранилища данных и модулей для стыковки со внешними системами. Детальное описание компонентов ядра и вспомогательных микросервисов и утилит представлено в разделе 2.2 «Компоненты Luxms BI».

Ядро

Cервисы Back-end

Микросервисы Back-end

Cервисы Back-end представляет собой набор компонент по расширению функциональности ядра, в том числе, в части работы с источниками данных и взаимодействия с внешними системами.

Интеграционные возможности

Интеграционные возможности

Luxms BI обладает широчайшими интеграционными возможностями. Ядро системы соединяется с источниками данных тремя способами: через Foreign Data Wrapper (FDW), по протоколу HTTP или через сервис Luxms BI Datagate, который может подключаться к любым JDBC источникам.

Стыковка с Clickhouse возможна как через Luxms BI Datagate (JDBC), так и напрямую, через HTTP соединение непосредственно из ядра Luxms BI. При использовании HTTP соединения возможен экспорт больших объемов данных из Clickhouse в форматах CSV, ORC, Parquet и Arrow прямо из Веб-интерфейса Luxms BI.

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

Luxms BI Datagate, помимо JDBC, поддерживает стыковку с Kafka и SAP RFC.

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

MPP, масштабирование и варианты конфигурации

Massive Parallel Processing (MPP) – массивно параллельная обработка данных, класс архитектур параллельных вычислительных систем, особенность которых заключается в том, что память физически разделена. Массивно-параллельный подход воплощён в Luxms BI, чтобы гарантировать действительно непревзойдённую скорость на проектах с данными больших объёмов и большим числом пользователей. Для высокоскоростной выдачи данных используется СУБД Clickhouse или Arenadata QuickMarts (ADQM).

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

Пример горизонтального масштабирования

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

Тип лицензииНачальная лицензия: ВУК Luxms BI Express EditionСтандартная лицензия: ВУК Luxms BI Standard EditionКорпоративная лицензия: ВУК Luxms BI Enterprise Edition
Вариант конфигурации1 узел1 узелКластер из 2+узлов
РезервированиеХолодноеХолодноеГорячее
Количество одновременных пользователейОграничения по лицензии: 1/5/25 именованных пользователейБез ограничения по лицензии. Технически зависит от конфигурации сервера. По опыту от 100 до 5000 пользователей взависимости от типа нагрузкиБез ограничения по лицензии. В среднем 3000 пользователей на узел.*

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

На практике для повышения производительности и отказоустойчивости заказчики используют современные кластерные технологии. Ядро Luxms BI реализовано на PostgreSQL, что позволяет создавать многоузловые конфигурации в виде кластеров на открытых и проверенных временем технологиях.