2. Структура Витрины данных
В данном разделе приведены сведения о структуре Витрины данных, ее составных частях, о связях между составными частями и о связях с другими программами.
2.1. Составные части Витрины данных
Программа имеет модульную архитектуру и построена на базе различных компонентов (включая разработки сторонних производителей).
Общую схему взаимосвязей компонентов можно просмотреть в разделе Архитектура Витрины данных.
Функционально, программа состоит из следующих частей:
2.1.1. Основные компоненты
ProStore — основной компонент программы с открытым исходным кодом, обеспечивает единый интерфейс к хранилищу разнородных данных. Определяет структуры данных, запись и чтение данных Витрины. Позволяет работать со входящими в состав хранилища СУБД одинаковым образом, используя единый синтаксис запросов SQL и единую логическую схему данных. ProStore включает следующие компоненты:
Сервис исполнения запросов — анализирует и исполняет SQL-запросы; предоставляет REST API для JDBC-драйвера и взаимодействует с сервисом мониторинга статусов Kafka по REST API. В свою очередь состоит из следующих компонентов:
Коннектор Kafka-Postgres reader - считывает данные из PostrgeSQL и передает их в брокер сообщений Kafka.
Коннектор Kafka-Postgres writer - записывает данные из брокера сообщений Kafka в PostrgeSQL.
Сервис мониторинга статусов Kafka — отслеживает состояние топиков брокера сообщений Kafka; предоставляет REST API для сервиса исполнения запросов.
PostrgeSQL — база данных ProStore.
Apache ZooKeeper — необходим для поддержки информации о конфигурации и распределенной координации между компонентами Витрины, также используется как сервисная база данных ProStore, для хранения технической информации (метаданных) от поступающих в Витрину данных запросах.
Брокер сообщений Kafka — используется для непрерывной передачи сообщений между:
ПОДД-адаптер-Модуль исполнения запросов и Агент ПОДД.
CSV-uploader — модуль программы, который предназначен для загрузки и выгрузки csv/xml-файлов.
ПОДД-адаптер — общее название логических модулей программы, которые обеспечивают подключение к ПОДД СМЭВ, как информационной системы участника взаимодействия. В зависимости от предназначения логические модули обеспечивают загрузку запросов из очереди ИС УВ в ПОДД СМЭВ, формирование и отправку ответов в ПОДД СМЭВ, инициативное формирование уведомлений об изменении данных в экземпляре ПО «Витрина данных НСУД», отправку уведомлений в ПОДД СМЭВ, регистрацию реплики данных ИС УВ, подписки на репликацию и поддержку реплики в актуальном состоянии.
ПОДД-адаптер состоит из следующих логических модулей:
ПОДД-адаптер-Модуль исполнения запросов — предназначен для подключения программы к ПОДД СМЭВ (через протокол коммуникации Агент ПОДД), как информационной системы участника взаимодействия.
ПОДД-адаптер – Модуль MPPR — предназначен для загрузки данных табличных параметров в многопоточном режиме (massively parallel processing, MPP);
ПОДД-адаптер - Модуль MPPW исполняет запросы в многопоточном режиме, записывающие данные в Prostore;
Модуль группировки чанков репликации.
2.1.2. Дополнительные компоненты
Дополнительное программное обеспечение для администрирования и мониторинга:
Prometheus — используется как система мониторинга системных ресурсов Компонент «Витрина данных Лайт». Связь компонентов реализована через HTTP. Данные хранятся локально, в собственной TSBD базе, индексы хранятся в LevelDB. Метрики представляют собой time-series данные. Каждая метрика состоит из имени метрики, временной метки и пары «ключ – значение». Визуализация осуществляется через подключение к Grafana. Официальный сайт разработчика приложения: https://prometheus.io/.
Grafana — инструмент реализован в виде панели управления и мониторинга и позволяет визуализировать системные события программы на базе собираемых метрик. Официальный сайт разработчика приложения: https://grafana.com/docs/
Ansible — платформа удалённого управления конфигурациями программного обеспечения, предназначенная для упрощения развёртывания Компонент «Витрина данных Лайт» через создание специальных сценариев. Официальный сайт разработчика приложения: https://www.ansible.com/
Docker — программное обеспечение для автоматизации развёртывания и управления программы в виртуальных средах с поддержкой контейнеризации. Контейнер позволяет производить изолированный запуск ОС с подключённой файловой системой из образа, изолированно разворачивать приложения и реализовывать микросервисы. Настройки среды хранятся в GitHub, обеспечивая единую точку управления конфигурациями. Может быть использован для для развёртывания тестового окружения Компонент «Витрина данных Лайт», без прерывания работы сервисов в продуктовой среде. Официальный сайт разработчика приложения: https://www.docker.com/
Portainer — web-приложение для управления docker-контейнерами. Официальный сайт разработчика приложения: https://www.portainer.io/
Graylog — программное обеспечение для управления лог-файлами. Официальный сайт разработчика приложения: https://www.graylog.org/
МongoDB — база данных Graylog. Официальный сайт разработчика приложения: https://www.mongodb.com/
Elasticsearch — утилита полнотекстового поиска и аналитики, которая позволяет быстро в режиме реального времени хранить, искать и анализировать большие объемы данных и сохраняет их для Graylog. Для передачи сообщений в Graylog использует Filebeat. Официальный сайт разработчика приложения: https://www.elastic.co/elasticsearch/
Filebeat — агент на сервере для отправки различных типов оперативных данных в Elasticsearch. Официальный сайт разработчика приложения: https://www.elastic.co/elasticsearch/
Node_exporter — процессы, обеспечивающие сбор и передачу системных метрик серверу Prometheus. Также, используется для сбора метрик ПОДД-адаптера и CSV-uploader см. https://github.com/prometheus/node_exporter.
2.1.3. Операционная система
Операционная система устанавливается на сервер, где будет развернута программа.
Программа может функционировать под одной из следующих операционных систем:
CentOS 7.9 (далее - CentOS);
РЕД ОС версии 7.2 (далее - РЕД ОС);
АЛЬТ Сервер 8 СП (далее - АЛЬТ ОС);
Astra Linux 1.7 (уровень защищенности «Воронеж»).
2.2. Модули Витрины данных
2.2.1. ПОДД-адаптер — Модуль исполнения запросов
2.2.1.1. Общее описание
ПОДД-адаптера - Модуль исполнения запросов Логический модуль ПОДД-адаптера, предназначен для исполнения запросов ПОДД СМЭВ (через протокол коммуникации Агент ПОДД).
Установка опциональна
Обмен сообщениями между ПОДД-адаптера - Модуль исполнения запросов и Агент ПОДД происходит через заранее согласованные топики брокера сообщений Kafka.
Формат обмена электронными сообщениями описан в разделе Спецификация модуля ПОДД-адаптера - Модуль исполнения запросов.
2.2.1.1.1. Общая схема взаимодействия через ПОДД-адаптер- Модуль исполнения запросов
Рисунок - 2.1 Взаимодействие программы с ПОДД
2.2.1.1.2. Процесс обработки запроса через ПОДД-адаптер- Модуль исполнения запросов
Получатель данных отправляет через ПОДД запрос к Витрине данных.
Запрос поступает в Агент ПОДД.
ПОДД-адаптер- Модуль исполнения запросов (через заранее согласованные топики брокера сообщений Kafka) получает запрос от Агента ПОДД на предоставление данных.
ПОДД-адаптер- Модуль исполнения запросов обрабатывает запрос и отправляет его в Витрину данных.
Витрина данных обрабатывает запрос и формирует на него ответ в ПОДД-адаптер.
ПОДД-адаптер- Модуль исполнения запросов обрабатывает ответ, записывает результат в заранее согласованные топик обмена сообщениями и предоставляет ответ Агенту ПОДД.
Агент ПОДД отправляет полученный ответ через ПОДД Получателю данных.
Процесс получения BLOB-объектов через ПОДД-адаптер- Модуль исполнения запросов описан в разделе Взаимодействие через ПОДД-адаптер.
Описание настроек модуля, запуск и остановка модуля см. в «Руководстве администратора».
2.2.2. ПОДД-адаптер — Модуль MPPR
2.2.2.1. Общее описание
Логический модуль ПОДД-адаптер - Модуль MPPR является частью ПОДД-адаптер и предназначен для чтения данных в многопоточном режиме (massively parallel processing, MPP).
ПОДД-адаптер - Модуль MPPR предназначен для следующих задач:
Многопоточное параллельное чтение данных.
Отправка ответа с результатом запроса в Агент ПОДД.
Удаление временных таблиц, созданных на основе табличных параметров.
Обмен сообщениями между ПОДД-адаптером и ПОДД-адаптером - Модуль MPPR происходит через топик mppr.query.
Формат обмена электронными сообщениями описан в разделе Спецификация модуля ПОДД-адаптера - Модуль исполнения запросов Технического описания программы.
2.2.2.1.1. Общая схема взаимодействия
Рисунок - 2.2 Взаимодействие через Модуль MPPR
2.2.2.1.2. Процесс обработки запроса через Модуль MPPR
Получатель данных отправляет через ПОДД запрос к Витрине данных.
Запрос поступает через Агента ПОДД в ПОДД-адаптер.
Если формат обработки данных предполагает MPP, то ПОДД-адаптер отправляет запрос через топик
mppr.queryв ПОДД-адаптер - Модуль MPPR.ПОДД-адаптер - Модуль MPPR создает временную таблицу (по результатам запроса) и временный топик с запросом для Витрины.
Витрина считывает топик, обрабатывает запрос, формирует на него ответ.
ПОДД-адаптер - Модуль MPPR получает ответ и выкладывает полученные данные во временную таблицу.
ПОДД-адаптер считывает ответ из временной таблицы и отправляет данные в Агент ПОДД.
Агент ПОДД отправляет полученный ответ через ПОДД Получателю данных.
ПОДД-адаптер - Модуль MPPR удаляет временный топик и таблицу.
Описание настроек модуля, запуск и остановка модуля см. в «Руководстве администратора».
2.2.3. Модуль подписок
2.2.3.1. Общее описание
Модуль ПОДД-адаптер-Модуль подписок предназначен для управления подписками между Получателем данных (consumer) и Поставщиком данных (producer).
Модуль используется для получения результатов комплексных запросов из нескольких Витрин источников. Подписка позволяет автоматически загрузить и поддерживать в актуальном состоянии данные из Витрины Поставщика в специальном хранилище на стороне Потребителя - Хранилище данных по подписке. Потребитель посылает запросы напрямую в своё Хранилище данных по подписке, в результате чего сокращается продолжительность сеансов обмена и необходимость «склейки» запросов на стороне ПОДД.
Обмен между Витринами осуществляется по предварительно созданной подписке на уведомления об изменениях или репликацию.
Модуль решает следующие задачи:
Запрос создания подписки (Поставщик данных);
Запрос отмены подписки (Поставщик данных);
Запрос дельты (Поставщик данных);
Запрос создания структуры по подписке (Получатель данных);
Запрос применения дельты (Получатель данных).
Формат обмена электронными сообщениями описан в разделе Спецификация модуля ПОДД-адаптера - Модуль исполнения запросов.
Потребители данных могут получать сведения из Витрин Поставщиков данных путем:
отправки регламентированных запросов;
подписки на изменения сведений.
Подписка позволяет автоматически загрузить и поддерживать в актуальном состоянии данные из Витрины Поставщика в специальном хранилище на стороне Потребителя (Хранилище данных по подписке) и Потребитель посылает запросы напрямую в своё Хранилище, в результате чего сокращается продолжительность сеансов обмена и необходимость «склейки» запросов на стороне ПОДД.
Информационный обмен по подписке состоит из следующих этапов:
Регистрация подписки в Витрине Поставщика данных и создание структуры данных в Хранилище Потребителя данных.
Передача снапшота из Витрины Поставщика данных в Хранилище Потребителя данных (только для подписки на репликацию). В текущей реализации снапшот не содержит историчность.
Актуализация данных посредством передачи пакета дельт от Витрины Поставщика данных в Хранилище Потребителя данных в одном из режимов:
по расписанию (если оно указано в подписке);
по событию об изменении данных (если расписание не указано в подписке).
Подписка определяется следующими параметрами:
уникальный идентификатор подписки;
источник данных по подписке – мнемоника Витрины Поставщика данных;
адресат данных по подписке – мнемоника Витрины Потребителя данных;
набор SQL-выражений, каждое из которых описывает подмножество данных Витрины;
расписание синхронизации (может отсутствовать).
Виды подписок:
Подписка на репликацию - снэпшот текущего состояния витрины;
Подписка на уведомление - выгружаем данные только по дельте.
Реализованы два варианта подписки:
одиночная;
распределенная.
Ключевые особенности одиночных подписок:
подписка только на один датамарт;
в одиночных подписках можно создать подписку с множественными SQL-запросами к разным таблицам одной витрины.
Ключевые особенности распределенных подписок:
количество витрин-источников больше 1;
одной подписке соответствует один SQL-запрос;
один датамарт может фигурировать в нескольких подписках витрины потребителя.
В случае необходимости отключить подписку, осуществляется отмена подписки через ВС «Отмена подписки на репликацию или уведомлений в изменении данных».
Описание настроек модуля, запуск и остановка модуля см. в «Руководстве администратора».
2.2.4. CSV-uploader
2.2.4.1. Общее описание
CSV-uploader - программный модуль Витрины данных, который предназначен для загрузки CSV-файлов в Витрину данных.
CSV-uploader предназначен для следующих задач:
загрузка CSV-файлов;
загрузка CSV-файлов со структурой Витрины;
выгрузка CSV-шаблонов с демо-шаблонами структуры Витрины;
автоматический запуск загрузки CSV-файлов по расписанию из выбранного каталога;
просмотр Журнала операций.
Внимание
Загружаемые файлы обязательно должны быть в кодировке UTF-8
2.2.4.1.1. Общая схема взаимодействия через CSV-uploader
Рисунок - 2.3 Общая схема взаимодействия через CSV-uploader
2.3. Состав компонентов в дистрибутиве
Перечень состава компонентов программы версии 1.12.0 приведен в таблице ниже (см. Таблица 2.1)
Наименование компонента |
Версия |
Техническое наименование |
|---|---|---|
graylog |
4.2.7 |
graylog:4.2.7 |
podd-adapter-query |
1.12.0 |
podd-adapter:1.12.0 |
podd-adapter-mppr |
1.12.0 |
podd-adapter-mppr:1.12.0 |
podd-adapter-mppw |
1.12.0 |
podd-adapter-mppw:1.12.0 |
podd-adapter-replicator |
1.12.0 |
podd-adapter-replicator:1.12.0 |
podd-adapter-group-repl |
1.12.0 |
podd-adapter-group-repl:1.12.0 |
csv-uploader |
1.12.0 |
csv-uploader:1.12.0 |
query-execution |
6.7.0 |
query-execution:6.7.0 |
status-monitor |
6.7.0 |
status-monitor:6.7.0 |
PostgreSQL |
13.4 |
PostgreSQL:13.4 |
PG-connector |
0.6.0 |
PG connector:0.6.0 |
kafka-postgres-writer |
0.6.1 |
kafka-postgres-writer:0.6.1 |
kafka-postgres-reader |
0.6.1 |
kafka-postgres-reader:0.6.1 |
2.4. Cвязи между составными частями
Взаимосвязи между составными частями программы приведены в Таблица 2.2.
Клиент |
Сервер |
Способ взаимодействия |
Описание |
|---|---|---|---|
ПОДД-адаптер — Модуль исполнения запросов |
ProStore |
JDBC Брокер сообщений Kafka |
Исполнение запросов. |
CSV-Uploader |
ProStore |
JDBC Брокер сообщений Kafka |
Управление логической структурой таблиц. Загрузка публикуемых данных в Витрину. |
ProStore |
СУБД PostgreSQL |
JDBC |
Управление логической структурой таблиц. Исполнение запросов. Управление загрузкой публикуемых данных в Витрину. |
ПОДД- адаптер — Модуль MPPR |
Агент ПОДД |
Через брокера сообщений Kafka |
Предоставляет Результат запрос/подзапрос на получение публикуемых данных (в т.ч. с использованием ТП), делегированного ПОДД-адаптером. |
2.5. Связи с другими программами
Взаимодействие с другими программами происходит путем вызова соответствующих модулей программы:
Внутренняя ИС Ведомства взаимодействует с ProStore через JDBC-driver.
ПОДД-адаптер - Модуль исполнения запросов для взаимодействия с ИС участников взаимодействия через Агента ПОДД.
CSV-uploader для взаимодействия с ИС участников взаимодействия для передачи файлов в формате XML и CSV.
Связи программы со сторонними программами приведены в см. Таблица 2.3.
Клиент |
Сервер |
Способ взаимодействия |
Описание |
|---|---|---|---|
Внутренняя ИС Ведомств |
CSV-uploader |
Файловый обмен (CSV) REST |
Загрузка публикуемых данных в Витрину |
ProStore |
JDBC Брокер сообщений Kafka |
Управление логической структурой таблиц. Исполнение запросов. Загрузка публикуемых данных в Витрину. |
|
ПОДД-адаптер — Модуль исполнения запросов |
Агент ПОДД |
Брокер сообщений Kafka Kafka |
Исполнение запросов. |
2.6. Карта портов
Компонент
Описание
podd-adapter
Порт: 8083
Протокол: HTTP
Описание: Взаимодействие с ПОДД-адаптером
csv-uploader
Порт: 8080
Протокол: HTTP
Описание: Взаимодействие с CSV-uploader
query-execution
Порт: 8080
Протокол: HTTP
Описание: номер порта сервиса метрик
Порт: 9090
Протокол: TCP
Описание: номер порта сервиса исполнения запросов
status_monitor
Порт: 9095
Протокол: HTTP
Описание: сетевой адрес и путь для получения информации о статусе сервиса
prometheus
Порт: 9090
Протокол: HTTP
Описание: Подключение к Prometheus WEB UI
grafana
Порт: 3000
Протокол: HTTP
Описание: Web-интерфейс для работы c Grafana
node_exporter
Порт: 9100
Протокол: HTTP
Описание: Порт для загрузки метрик
filebeat
Порт: нет открытых портов
Протокол: -
Описание: -
mongodb
Порт: 27017
Протокол:TCP
Описание: Подключение к MongoDB. Порт по умолчанию для экземпляров mongod и mongos. Вы можете изменить этот порт с помощью port или –port .
Порт: 27018
Протокол: TCP
Описание: Подключение к MongoDB. Порт по умолчанию для mongod при запуске с параметром командной строки –shardsvr или значением shardsvr для параметра clusterRole в файле конфигурации
elasticsearch
Порт: 9200
Протокол: HTTP
Описание: Подключение к Elasticsearch.
kafka_postgres_writer
Порт: 8096
Протокол: HTTP
Описание: Порт используется для записи топиков Kafka в ProStore
kafka_postgres_reader
Порт: 8094
Протокол: HTTP
Описание: Порт используется для чтения топиков Kafka из ProStore
postgres
Порт: 5432
Протокол: TCP PostgresSQL Protocol
Описание: Источник данных SQL
kafka
Порт: 9092
Протокол: Порт используется для
Описание: TCP
zookeeper
Порт: 2181
Протокол: TCP
Описание: Порт используется для доступа к Zookeeper
portainer
Порт: 9000
Протокол: HTTP
Описание: Web-интерфейс для работы c Portainer