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

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

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

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

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

  • Серверная часть, состоящая из таких компонентов, как backend, keeper, брокер сообщений NATS, конфигуратор, БД POstgreSQL и auth service и написанная на языке Golang, - обеспечивает основную функциональность платформы.

  • Серверный модуль рекомендаций конфигурации СУБД, разработанный на 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.

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

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

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

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

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

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

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

  • Безопасность: Агент не требует открытия портов для входящих соединений, так как сам приходит и забирает все поступившие команды из NATS. Это позволяет повысить безопасность системы. Кроме того, платформа предоставляет обширный функционал для администрирования подключенных экземпляров СУБД и позволяет настроить конфигурацию PostgreSQL с использованием рекомендаций.

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

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

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

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

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