Структура программы =================== В данном разделе приведены сведения о структуре программы, ее составных частях, о связях между составными частями и о связях с другими программами. Составные части программы ------------------------- Программа имеет модульную архитектуру и построена на базе различных компонентов (включая разработки сторонних производителей). Общую схему взаимосвязей компонентов можно просмотреть в разделе Архитектура программы. Функционально, программа состоит из следующих частей: Основные компоненты ~~~~~~~~~~~~~~~~~~~ - **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** — используется для непрерывной передачи сообщений между: - :term:`CSV-uploader` и :term:`ProStore`; - ПОДД-адаптер-Модуль исполнения запросов и :term:`Агент ПОДД`. - **CSV-uploader** — модуль программы, который предназначен для загрузки и выгрузки csv/xml-файлов. - **ПОДД-адаптер** — общее название логических модулей программы, которые обеспечивают подключение к ПОДД СМЭВ, как информационной системы участника взаимодействия. В зависимости от предназначения логические модули обеспечивают загрузку запросов из очереди ИС УВ в ПОДД СМЭВ, формирование и отправку ответов в ПОДД СМЭВ, инициативное формирование уведомлений об изменении данных в экземпляре ПО «Витрина данных НСУД», отправку уведомлений в ПОДД СМЭВ, регистрацию реплики данных ИС УВ, подписки на репликацию и поддержку реплики в актуальном состоянии. **ПОДД-адаптер** состоит из следующих логических модулей: - **ПОДД-адаптер-Модуль исполнения запросов** — предназначен для подключения программы к ПОДД СМЭВ (через протокол коммуникации Агент ПОДД), как информационной системы участника взаимодействия. - **ПОДД-адаптер – Модуль MPPR** — предназначен для загрузки данных табличных параметров в многопоточном режиме (massively parallel processing, MPP); - **ПОДД-адаптер - Модуль MPPW** исполняет запросы в многопоточном режиме, записывающие данные в Prostore; - **Модуль группировки чанков репликации**. Дополнительные компоненты ~~~~~~~~~~~~~~~~~~~~~~~~~ Дополнительное программное обеспечение для администрирования и мониторинга: - **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 (уровень защищенности "Воронеж"). Модули программы ---------------- ПОДД-адаптер — Модуль исполнения запросов ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Описание ПОДД-адаптер - Модуль исполнения запросов .. Подключаем файл с описанием ПОДД-адаптер - Модуль исполнения запросов .. 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 Описание настроек модуля, запуск и остановка модуля см. в "Руководстве администратора". Модуль группировки чанков репликации ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. Описание модуля .. Подключаем файл с описанием модуля .. include:: ../../modules/podd-adapter-group-repl/doc/podd_adapter_group_repl_doc.rst Состав компонентов в дистрибутиве --------------------------------- Перечень состава компонентов программы версии 1.11.1 приведен в таблице ниже (см. :numref:`lite_gd_tab_2`) .. Проверить соответствие компонентов и версий в Portainer (документ "Установка программы") .. _lite_gd_tab_2: .. table:: Состав компонентов в дистрибутиве программы ======================= ========== ============================== Наименование компонента Версия Техническое наименование ======================= ========== ============================== 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 ======================= ========== ============================== Cвязи между составными частями ------------------------------ Взаимосвязи между составными частями программы приведены в :numref:`lite_gd_tab_3`. .. _lite_gd_tab_3: .. table:: Взаимодействие между составными частями +------------------+----------------+----------------+--------------------------------------+ | Клиент | Сервер | Способ | Описание | | | | взаимодействия | | +==================+================+================+======================================+ | ПОДД-адаптер — | ProStore | JDBC | Исполнение запросов. | | | | | | | Модуль | | Брокер | | | исполнения | | сообщений | | | запросов | | Kafka | | +------------------+----------------+----------------+--------------------------------------+ | CSV-Uploader | ProStore | JDBC | Управление логической структурой | | | | | таблиц. | | | | Брокер | Загрузка публикуемых данных в | | | | сообщений | Витрину. | | | | Kafka | | +------------------+----------------+----------------+--------------------------------------+ | ProStore | СУБД | JDBC | Управление логической структурой | | | PostgreSQL | | таблиц. | | | | | | | | | | Исполнение запросов. | | | | | | | | | | Управление загрузкой публикуемых | | | | | данных в Витрину. | +------------------+----------------+----------------+--------------------------------------+ | ПОДД- | Агент ПОДД | Через брокера | Предоставляет | | адаптер — Модуль | | сообщений | Результат | | MPPR | | Kafka | запрос/подзапрос | | | | | на получение публикуемых | | | | | данных (в т.ч. с использованием ТП), | | | | | делегированного ПОДД-адаптером. | +------------------+----------------+----------------+--------------------------------------+ Связи с другими программами --------------------------- Взаимодействие с другими программами происходит путем вызова соответствующих модулей программы: - Внутренняя ИС Ведомства взаимодействует с 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 | | +----------------+--------------+----------------+----------------+ Карта портов ------------ +-----------------------+---------------------------------------------+ | Компонент | Описание | +=======================+=============================================+ | 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 | +-----------------------+---------------------------------------------+