Структура Витрины данных ============================ В данном разделе приведены сведения о структуре Витрины данных, ее составных частях, о связях между составными частями и о связях с другими программами. Составные части Витрины данных ----------------------------------- Программа имеет модульную архитектуру и построена на базе различных компонентов (включая разработки сторонних производителей). Общую схему взаимосвязей компонентов можно просмотреть в разделе Архитектура Витрины данных. Функционально, программа состоит из следующих частей: Основные компоненты ~~~~~~~~~~~~~~~~~~~ - **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** и **ProStore**; - **ПОДД-адаптер-Модуль исполнения запросов** и **Агент СМЭВ4**. - **CSV-uploader** — модуль программы, который предназначен для загрузки и выгрузки csv/xml-файлов. - **ПОДД-адаптер** — общее название логических модулей программы, которые обеспечивают подключение к ПОДД СМЭВ, как информационной системы участника взаимодействия. В зависимости от предназначения логические модули обеспечивают загрузку запросов из очереди ИС УВ в ПОДД СМЭВ, формирование и отправку ответов в ПОДД СМЭВ, инициативное формирование уведомлений об изменении данных в экземпляре ПО «Витрина данных НСУД», отправку уведомлений в ПОДД СМЭВ, регистрацию реплики данных ИС УВ, подписки на репликацию и поддержку реплики в актуальном состоянии. **ПОДД-адаптер** состоит из следующих логических модулей: - **ПОДД-адаптер-Модуль исполнения запросов** — предназначен для подключения программы к ПОДД СМЭВ (через протокол коммуникации Агент ПОДД), как информационной системы участника взаимодействия; - **ПОДД-адаптер – Модуль MPPR** — предназначен для загрузки данных табличных параметров в многопоточном режиме (massively parallel processing, MPP); - **Модуль подписок** — предназначен для управления подписками между Получателем данных (consumer) и Поставщиком данных (producer). Дополнительные компоненты ~~~~~~~~~~~~~~~~~~~~~~~~~ Дополнительное программное обеспечение для администрирования и мониторинга: - **Prometheus** — используется как система мониторинга системных ресурсов |Product Lite|. Связь компонентов реализована через HTTP. Данные хранятся локально, в собственной TSBD базе, индексы хранятся в LevelDB. Метрики представляют собой time-series данные. Каждая метрика состоит из имени метрики, временной метки и пары «ключ – значение». Визуализация осуществляется через подключение к Grafana. Официальный сайт разработчика приложения: https://prometheus.io/. - **Grafana** — инструмент реализован в виде панели управления и мониторинга и позволяет визуализировать системные события программы на базе собираемых метрик. Официальный сайт разработчика приложения: https://grafana.com/docs/. - **Ansible** — платформа удалённого управления конфигурациями программного обеспечения, предназначенная для упрощения развёртывания |Product Lite| через создание специальных сценариев. Официальный сайт разработчика приложения: https://www.ansible.com/. - **Docker** — программное обеспечение для автоматизации развёртывания и управления программы в виртуальных средах с поддержкой контейнеризации. Контейнер позволяет производить изолированный запуск ОС с подключённой файловой системой из образа, изолированно разворачивать приложения и реализовывать микросервисы. Настройки среды хранятся в GitHub, обеспечивая единую точку управления конфигурациями. Может быть использован для для развёртывания тестового окружения |Product Lite|, без прерывания работы сервисов в продуктовой среде. Официальный сайт разработчика приложения: 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. Операционная система ~~~~~~~~~~~~~~~~~~~~ Операционная система устанавливается на сервер, где будет развернута программа. Программа может функционировать под одной из следующих операционных систем: - CentOS 7.9 (далее - CentOS); - РЕД ОС версии 7.2 (далее - РЕД ОС); - АЛЬТ Сервер 8 СП (далее - АЛЬТ ОС); - Astra Linux 1.7 (уровень защищенности "Воронеж"). .. _lite_distr_component: Состав компонентов в дистрибутиве --------------------------------- Перечень состава компонентов программы версии 1.13.1 приведен в таблице ниже (см. :numref:`lite_gd_tab_2`) .. Проверить соответствие компонентов и версий в Portainer (документ "Установка программы") .. _lite_gd_tab_2: .. table:: Состав компонентов в дистрибутиве программы =========================== ========== ============================== **Наименование компонента** **Версия** **Техническое наименование** =========================== ========== ============================== graylog 4.3.15 graylog:4.3.15 prometheus 2.34.0 prometheus:2.34.0 podd-adapter-replicator 1.13.1 podd-adapter-replicator:1.13.1 podd-adapter-mppw 1.13.1 podd-adapter-mppw:1.13.1 podd-adapter-mppr 1.13.1 podd-adapter-mppr:1.13.1 kafka-jet-writer 1.2.0 kafka-jet-writer:1.2.0 podd-adapter-group-repl 1.13.1 podd-adapter-group-repl:1.13.1 podd-adapter-query 1.13.1 podd-adapter:1.13.1 csv-uploader 1.13.1 csv-uploader:1.13.1 query-execution 6.8.1 query-execution:6.8.1 grafana 9.2.15 grafana:9.2.15 node_exporter 1.2.1 node_exporter:1.2.1 filebeat 7.10.2 filebeat:7.10.2 mongo 4.4 mongo:4.4 opensearch 1.3.14 opensearch:1.3.14 kafka-postgres-writer 0.8.0 kafka-postgres-writer:0.8.0 kafka-postgres-reader 0.8.0 kafka-postgres-reader:0.8.0 postgres 13.4 postgres:13.4 kafka 2.13 kafka:2.13-2.6.0-alt-p10-r3 zookeeper 3.5.7 zookeeper:3.5.7-alt-p10-r3 portainer 2.14.0 portainer:2.14.0 =========================== ========== ============================== Cвязи между составными частями ------------------------------ Взаимосвязи между составными частями программы приведены в :numref:`lite_gd_tab_3`. .. _lite_gd_tab_3: .. table:: Взаимодействие между составными частями +------------------+----------------+---------------------------+--------------------------------------+ | **Клиент** | **Сервер** | **Способ взаимодействия** | **Описание** | +==================+================+===========================+======================================+ | ПОДД-адаптер — | ProStore | JDBC | Исполнение запросов. | | | | | | | Модуль | | Брокер сообщений Kafka | | | исполнения | | | | | запросов | | | | +------------------+----------------+---------------------------+--------------------------------------+ | CSV-Uploader | ProStore | JDBC | Управление логической структурой | | | | | таблиц. | | | | | | | | | Брокер сообщений Kafka | Загрузка публикуемых данных в | | | | | Витрину. | +------------------+----------------+---------------------------+--------------------------------------+ | ProStore | СУБД | JDBC | Управление логической структурой | | | PostgreSQL | | таблиц. | | | | | | | | | | Исполнение запросов. | | | | | | | | | | Управление загрузкой публикуемых | | | | | данных в Витрину. | +------------------+----------------+---------------------------+--------------------------------------+ | ПОДД- | Агент ПОДД | Через брокера сообщений | Предоставляет | | адаптер — Модуль | | Kafka | Результат | | MPPR | | | запрос/подзапрос | | | | | на получение публикуемых | | | | | данных | | | | | | | | | | (в т.ч. с использованием ТП), | | | | | делегированного ПОДД-адаптером. | +------------------+----------------+---------------------------+--------------------------------------+ Модули Витрины данных ----------------------------- ПОДД-адаптер — Модуль исполнения запросов ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Описание ПОДД-адаптер - Модуль исполнения запросов .. Подключаем файл с описанием ПОДД-адаптер - Модуль исполнения запросов .. include:: ../../modules/podd-adapter-query/doc/podd_adapter_query_doc.rst ПОДД-адаптер — Модуль MPPR ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Описание ПОДД-адаптер – Модуль MPPR .. Подключаем файл с описанием ПОДД-адаптер – Модуль MPPR .. include:: ../../modules/podd-adapter-mppr/doc/podd_adapter_mppr_doc.rst ПОДД-адаптер — Модуль MPPW ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Описание ПОДД-адаптер-Модуль MPPW .. Подключаем файл с описанием ПОДД-адаптер-Модуль MPPW .. include:: ../../modules/podd-adapter-mppw/doc/podd_adapter_mppw_doc.rst Описание настроек модуля, запуск и остановка модуля см. в "Руководстве администратора". Модуль подписок ~~~~~~~~~~~~~~~~ .. Описание ПОДД-адаптера - Модуля подписок .. Подключаем файл с описанием ПОДД-адаптер - Модуль подписок .. include:: ../../modules/podd-adapter-replicator/doc/podd_adapter_replicator_doc.rst Модуль группировки чанков репликации ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Описание Модуля группировки чанков репликации .. Подключаем файл с описанием Модуля группировки чанков репликации .. include:: ../../modules/podd-adapter-group-repl/doc/podd_adapter_group_repl_doc.rst CSV-uploader ~~~~~~~~~~~~ .. Описание CSV-uploader .. Подключаем файл с описанием CSV-uploader .. include:: ../../modules/csv-uploader/doc/csv_uploader_doc.rst Связи с другими программами --------------------------- Взаимодействие с другими программами происходит путем вызова соответствующих модулей программы: - Внутренняя ИС Ведомства взаимодействует с ProStore через JDBC-driver. - *ПОДД-адаптер - Модуль исполнения запросов* для взаимодействия с ИС участников взаимодействия через Агента ПОДД. - CSV-uploader для взаимодействия с ИС участников взаимодействия для передачи файлов в формате XML и CSV. Связи программы со сторонними программами приведены в см. :numref:`lite_gd_tab_4`. .. _lite_gd_tab_4: .. table:: Связи с другими программами +----------------+--------------+---------------------------+--------------------+ | **Клиент** | **Сервер** | **Способ взаимодействия** | **Описание** | +================+==============+===========================+====================+ | Внутренняя ИС | CSV-uploader | Файловый обмен (CSV) | Загрузка | | Ведомств | | | публикуемых | | | | REST | данных в Витрину | +----------------+--------------+---------------------------+--------------------+ | | ProStore | JDBC | Управление | | | | | логической | | | | Брокер | структурой | | | | сообщений | таблиц. | | | | Kafka | | | | | | Исполнение | | | | | запросов. | | | | | | | | | | Загрузка | | | | | публикуемых | | | | | данных в | | | | | Витрину. | +----------------+--------------+---------------------------+--------------------+ | ПОДД-адаптер — | Агент ПОДД | Брокер | Исполнение | | Модуль | | сообщений | запросов. | | исполнения | | Kafka | | | запросов | | | | | | | Kafka | | +----------------+--------------+---------------------------+--------------------+ Карта портов ------------ .. _lite_gd_tab_5: .. table:: Карта портов +-----------------------+---------------------------------------------+ | **Компонент** | **Описание** | +=======================+=============================================+ | 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 | +-----------------------+---------------------------------------------+