Архитектура Платформы

В этом разделе представлены основные компоненты, из которых состоит Платформа, а также описано их функционирование и взаимодействие.

Основные компоненты и их функции

Платформа состоит из следующих компонентов:

  • Клиентская часть — представляет собой веб-интерфейс для администраторов и позволяет управлять базами данных.

  • Серверная часть — обеспечивает основную функциональность платформы. Состоит из следующих компонентов:

    • backend — реализует логику работы системы и предоставляет API. Разработан на Golang;

    • keeper — обрабатывает входные потоки метрик с агентов. Разработан на Golang;

    • pg_configurator — модуль рекомендаций конфигурации СУБД — предлагает рекомендации по настройке базы данных. Разработан на Python.

  • Фронтенд — обеспечивает интерактивность и удобство использования для пользователей. Разработан на JS Angular.

  • СУБД — является ядром продукта. Основана на PostgreSQL. Имеет следующие расширения для обработки большого количества метрик:

    • btree_gin,

    • http,

    • pg_cron,

    • pg_framework,

    • pg_stat_statements,

    • pg_store_plans,

    • pipelinedb,

    • plpgsql,

    • uuid.

  • Агент — легковесное приложение на Golang — собирает информацию с базы данных и операционной системы и отправляет данные с изменениями на серверную часть платформы, обеспечивает безопасную связь с backend и keeper-серверами. Агент обеспечивает управление и конфигурацию СУБД, а также выполнение заранее запрограммированных задач и задач по расписанию.

  • Брокер сообщений NATS — обеспечивает асинхронный обмен сообщениями и доставку данных в базу данных OperDB.

  • pg_anon — средство для анонимизации данных в СУБД.

  • pg-explain — модуль расширенной аналитики.

  • Swagger — набор инструментов для создания, кодогенерации и использования API-документации в соответствии со спецификацией OpenAPI.

Рис.1 Схема архитектуры Платформы

Особенности архитектуры Платформы

  • Клиент-серверная архитектура: Платформа основана на клиент-серверной архитектуре, в которой клиентская часть представляет собой веб-интерфейс, а серверная часть состоит из нескольких модулей, написанных на языках Golang, Python и JS Angular.

  • Сбор метрик: cбор метрик осуществляется с помощью Агента. Агент наблюдает за базой данных и операционной системой. Он собирает информацию о метриках из администрируемой базы данных и отправляет их через брокер сообщений NATS на backend-сервер. Агент также имеет возможность отправлять только изменившиеся данные на основе срезов и предагрегации данных для снижения объема сетевого трафика и нагрузки на сервер.

  • Хранение метрик: метрики хранятся в основанной на PostgreSQL СУБД, которая была дополнена специальными расширениями для обработки большого количества метрик «на лету». Полученные данные сохраняются в OperDB и могут быть распределены по рабочим пространствам.

  • Сбор и хранение журналов СУБД: с помощью дополнительного сервиса pg-monitor возможно настроить сбор и аналитику журналов СУБД с последующей визуализацией в графическом интерфейсе. Этот сервис является опциональным, так как требует дополнительное защищенное соединение ssh к наблюдаемым экземплярам.

  • Масштабирование: Платформа поддерживает горизонтальное масштабирование большинства компонентов.

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

  • Безопасность: среда исполнения Агента не требует наличия дополнительных открытых сетевых портов. Однако Агенту необходимо иметь сетевое подключение до портов NATS как точки обмена данными с серверной частью Платформы. Также Агент выполняется от имени пользователя postgres, что с одной стороны позволяет иметь возможность глубоко интегрироваться с СУБД, а с другой — минимизирует его влияние не среду операционной системы.

Кластеризация

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

Кластеризация платформы обеспечивается с помощью Python-приложения Patroni, основанном на потоковой репликации. Приложение позволяет преобразовать систему из ведущего и ведомых узлов в высокодоступный кластер с автоматическим контролируемым и аварийным переключением.

С помощью Patroni можно легко добавлять новые реплики в существующий кластер и изменять конфигурацию СУБД одновременно на всех узлах кластера. Patroni поддерживает синхронную репликацию, настраиваемые действия при переключении узлов, REST API и возможность запуска пользовательских команд для создания реплики. Patroni также взаимодействует с Kubernetes и имеет множество других возможностей.

Рис.2 Схема масштабируемой платформы