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. Процесс обработки запроса через ПОДД-адаптер- Модуль исполнения запросов
  1. Получатель данных отправляет через ПОДД запрос к Витрине данных.

  2. Запрос поступает в Агент ПОДД.

  3. ПОДД-адаптер- Модуль исполнения запросов (через заранее согласованные топики брокера сообщений Kafka) получает запрос от Агента ПОДД на предоставление данных.

  4. ПОДД-адаптер- Модуль исполнения запросов обрабатывает запрос и отправляет его в Витрину данных.

  5. Витрина данных обрабатывает запрос и формирует на него ответ в ПОДД-адаптер.

  6. ПОДД-адаптер- Модуль исполнения запросов обрабатывает ответ, записывает результат в заранее согласованные топик обмена сообщениями и предоставляет ответ Агенту ПОДД.

  7. Агент ПОДД отправляет полученный ответ через ПОДД Получателю данных.

Процесс получения BLOB-объектов через ПОДД-адаптер- Модуль исполнения запросов описан в разделе Взаимодействие через ПОДД-адаптер.

Описание настроек модуля, запуск и остановка модуля см. в «Руководстве администратора».

2.2.2. ПОДД-адаптер — Модуль MPPR

2.2.2.1. Общее описание

Логический модуль ПОДД-адаптер - Модуль MPPR является частью ПОДД-адаптер и предназначен для чтения данных в многопоточном режиме (massively parallel processing, MPP).

ПОДД-адаптер - Модуль MPPR предназначен для следующих задач:

  1. Многопоточное параллельное чтение данных.

  2. Отправка ответа с результатом запроса в Агент ПОДД.

  3. Удаление временных таблиц, созданных на основе табличных параметров.

Обмен сообщениями между ПОДД-адаптером и ПОДД-адаптером - Модуль MPPR происходит через топик mppr.query.

Формат обмена электронными сообщениями описан в разделе Спецификация модуля ПОДД-адаптера - Модуль исполнения запросов Технического описания программы.

2.2.2.1.1. Общая схема взаимодействия
Взаимодействие через Модуль MPPR

Рисунок - 2.2 Взаимодействие через Модуль MPPR

2.2.2.1.2. Процесс обработки запроса через Модуль MPPR
  1. Получатель данных отправляет через ПОДД запрос к Витрине данных.

  2. Запрос поступает через Агента ПОДД в ПОДД-адаптер.

  3. Если формат обработки данных предполагает MPP, то ПОДД-адаптер отправляет запрос через топик mppr.query в ПОДД-адаптер - Модуль MPPR.

  4. ПОДД-адаптер - Модуль MPPR создает временную таблицу (по результатам запроса) и временный топик с запросом для Витрины.

  5. Витрина считывает топик, обрабатывает запрос, формирует на него ответ.

  6. ПОДД-адаптер - Модуль MPPR получает ответ и выкладывает полученные данные во временную таблицу.

  7. ПОДД-адаптер считывает ответ из временной таблицы и отправляет данные в Агент ПОДД.

  8. Агент ПОДД отправляет полученный ответ через ПОДД Получателю данных.

  9. ПОДД-адаптер - Модуль MPPR удаляет временный топик и таблицу.

Описание настроек модуля, запуск и остановка модуля см. в «Руководстве администратора».

2.2.3. ПОДД-адаптер — Модуль MPPW

2.2.3.1. Общее описание

Модуль ПОДД-адаптер-Модуль MPPW исполняет запросы в многопоточном режиме, записывающие данные в Prostore.

Модуль предназначен для следующих задач:

  1. Записывать данные в базу данных Prostore при получении команд от других модулей программы.

  2. Оповещать другие модули об успешной и/или неуспешной записи данных в базу данных Prostore.

Формат обмена электронными сообщениями описан в разделе Спецификация модуля ПОДД-адаптера - Модуль исполнения запросов «Технического описания программы».

Описание настроек модуля, запуск и остановка модуля см. в «Руководстве администратора».

2.2.4. Модуль подписок

2.2.4.1. Общее описание

Модуль ПОДД-адаптер-Модуль подписок предназначен для управления подписками между Получателем данных (consumer) и Поставщиком данных (producer).

Модуль используется для получения результатов комплексных запросов из нескольких Витрин источников. Подписка позволяет автоматически загрузить и поддерживать в актуальном состоянии данные из Витрины Поставщика в специальном хранилище на стороне Потребителя - Хранилище данных по подписке. Потребитель посылает запросы напрямую в своё Хранилище данных по подписке, в результате чего сокращается продолжительность сеансов обмена и необходимость «склейки» запросов на стороне ПОДД.

Обмен между Витринами осуществляется по предварительно созданной подписке на уведомления об изменениях или репликацию.

Модуль решает следующие задачи:

  • Запрос создания подписки (Поставщик данных);

  • Запрос отмены подписки (Поставщик данных);

  • Запрос дельты (Поставщик данных);

  • Запрос создания структуры по подписке (Получатель данных);

  • Запрос применения дельты (Получатель данных).

Формат обмена электронными сообщениями описан в разделе Спецификация модуля ПОДД-адаптера - Модуль исполнения запросов.

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

  1. отправки регламентированных запросов;

  2. подписки на изменения сведений.

Подписка позволяет автоматически загрузить и поддерживать в актуальном состоянии данные из Витрины Поставщика в специальном хранилище на стороне Потребителя (Хранилище данных по подписке) и Потребитель посылает запросы напрямую в своё Хранилище, в результате чего сокращается продолжительность сеансов обмена и необходимость «склейки» запросов на стороне ПОДД.

Информационный обмен по подписке состоит из следующих этапов:

  1. Регистрация подписки в Витрине Поставщика данных и создание структуры данных в Хранилище Потребителя данных.

  2. Передача снапшота из Витрины Поставщика данных в Хранилище Потребителя данных (только для подписки на репликацию). В текущей реализации снапшот не содержит историчность.

  3. Актуализация данных посредством передачи пакета дельт от Витрины Поставщика данных в Хранилище Потребителя данных в одном из режимов:

  • по расписанию (если оно указано в подписке);

  • по событию об изменении данных (если расписание не указано в подписке).

Подписка определяется следующими параметрами:

  • уникальный идентификатор подписки;

  • источник данных по подписке – мнемоника Витрины Поставщика данных;

  • адресат данных по подписке – мнемоника Витрины Потребителя данных;

  • набор SQL-выражений, каждое из которых описывает подмножество данных Витрины;

  • расписание синхронизации (может отсутствовать).

Виды подписок:

  • Подписка на репликацию - снэпшот текущего состояния витрины;

  • Подписка на уведомление - выгружаем данные только по дельте.

Реализованы два варианта подписки:

  • одиночная;

  • распределенная.

Ключевые особенности одиночных подписок:

  • подписка только на один датамарт;

  • в одиночных подписках можно создать подписку с множественными SQL-запросами к разным таблицам одной витрины.

Ключевые особенности распределенных подписок:

  • количество витрин-источников больше 1;

  • одной подписке соответствует один SQL-запрос;

  • один датамарт может фигурировать в нескольких подписках витрины потребителя.

В случае необходимости отключить подписку, осуществляется отмена подписки через ВС «Отмена подписки на репликацию или уведомлений в изменении данных».

Описание настроек модуля, запуск и остановка модуля см. в «Руководстве администратора».

2.2.5. Модуль группировки чанков репликации

2.2.5.1. Общее описание

Модуль группировки чанков репликации на стороне Витрины потребителя при обмене по подписке выполняет следующие фукнции:

группирует фрагменты данных подписки, полученные из топика delta.in.rq и размещает их во временные топики с именем mppw.data.[hash (requestId+subscriptionId)].deltaNum.streamNum, отправляет команду в топик subscription.in модулю подписок при получении lastChunk на загрузку сгруппированных фрагментов (по каждой дельте каждого стрима).

2.2.5.1.1. Интерфейсы модуля

Входящие топики

  • delta.in.rq

Исходящие топики

  • subscription.in

  • mppw.data.[hash (requestId+subscriptionId)].deltaNum.streamNum

2.2.5.1.2. Процесс обработки запроса через Модуль MPPR
  1. Модуль группировки фрагментов подписки считывает сообщение с фрагментом какой-то таблицы (в рамках какой-то дельты) из delta.in.rq.

  2. Модуль группировки фрагментов подписки отправляет полученный фрагмент в динамический топик с именем, содержащем [hash (requestId+subscriptionId)], synId (номер дельты) и streamNum - топик`` mppw.data.X``

  3. Если полученный фрагмент является последним ( isLastChunk: true), то Модуль группировки фрагментов подписки отправляет сообщение (subscriptionId, synId (номер дельты), tableId) в топик subscription.in.

  4. Модуль группировки фрагментов подписки подтверждает обработку (committing an offset) сообщения с фрагментом в delta.in.rq.

2.2.6. CSV-uploader

2.2.6.1. Общее описание

CSV-uploader - программный модуль Витрины данных, который предназначен для загрузки CSV-файлов в Витрину данных.

CSV-uploader предназначен для следующих задач:

  • загрузка CSV-файлов;

  • загрузка CSV-файлов со структурой Витрины;

  • выгрузка CSV-шаблонов с демо-шаблонами структуры Витрины;

  • автоматический запуск загрузки CSV-файлов по расписанию из выбранного каталога;

  • просмотр Журнала операций.

Внимание

Загружаемые файлы обязательно должны быть в кодировке UTF-8

2.2.6.1.1. Общая схема взаимодействия через CSV-uploader
Общая схема взаимодействия через CSV-uploader

Рисунок - 2.3 Общая схема взаимодействия через CSV-uploader

Описание настроек модуля, запуск и остановка модуля см. в «Руководстве администратора».

2.2.7. Модуль группировки чанков репликации

2.2.7.1. Общее описание

Модуль группировки чанков репликации на стороне Витрины потребителя при обмене по подписке выполняет следующие фукнции:

группирует фрагменты данных подписки, полученные из топика delta.in.rq и размещает их во временные топики с именем mppw.data.[hash (requestId+subscriptionId)].deltaNum.streamNum, отправляет команду в топик subscription.in модулю подписок при получении lastChunk на загрузку сгруппированных фрагментов (по каждой дельте каждого стрима).

2.2.7.1.1. Интерфейсы модуля

Входящие топики

  • delta.in.rq

Исходящие топики

  • subscription.in

  • mppw.data.[hash (requestId+subscriptionId)].deltaNum.streamNum

2.2.7.1.2. Процесс обработки запроса через Модуль MPPR
  1. Модуль группировки фрагментов подписки считывает сообщение с фрагментом какой-то таблицы (в рамках какой-то дельты) из delta.in.rq.

  2. Модуль группировки фрагментов подписки отправляет полученный фрагмент в динамический топик с именем, содержащем [hash (requestId+subscriptionId)], synId (номер дельты) и streamNum - топик`` mppw.data.X``

  3. Если полученный фрагмент является последним ( isLastChunk: true), то Модуль группировки фрагментов подписки отправляет сообщение (subscriptionId, synId (номер дельты), tableId) в топик subscription.in.

  4. Модуль группировки фрагментов подписки подтверждает обработку (committing an offset) сообщения с фрагментом в delta.in.rq.

2.3. Состав компонентов в дистрибутиве

Перечень состава компонентов программы версии 1.11.1 приведен в таблице ниже (см. Таблица 2.1)

Таблица 2.1 Состав компонентов в дистрибутиве программы

Наименование компонента

Версия

Техническое наименование

graylog

4.2.7

graylog:4.2.7

podd-adapter-query

1.11.1

podd-adapter:1.11.1

podd-adapter-mppr

1.11.1

podd-adapter-mppr:1.11.1

podd-adapter-mppw

1.11.1

podd-adapter-mppw:1.11.1

podd-adapter-replicator

1.11.1

podd-adapter-replicator:1.11.1

podd-adapter-group-repl

1.11.1

podd-adapter-group-repl:1.11.1

csv-uploader

1.11.1

csv-uploader:1.11.1

query-execution

6.5.0

query-execution:6.5.0

status-monitor

6.5.0

status-monitor:6.5.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.

Таблица 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.

Таблица 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