Підсистема управління реляційними базами даних

🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію.

1. Загальний опис підсистеми

Підсистема управління реляційними базами даних надає надійне та масштабоване зберігання даних для сервісів реєстру. Підсистема використовує Crunchy PGO для управління кластерами PostgreSQL.

Підсистема забезпечує управління користувачами та схемами, за підтримки Liquibase для контролю версій схем баз даних. Крім того, підсистема підтримує географічні об’єкти та геолокаційні запити з використанням PostGIS, що дозволяє аналізувати та візуалізувати геопросторові дані.

Підсистема розроблена з врахуванням вимог до масштабування, дозволяючи горизонтально масштабувати кластери PostgreSQL, щоб задовольнити змінні потреби. На випадок втрати даних або їх пошкодження, підсистема включає потужні функції резервного копіювання та відновлення, з автоматичними графіками резервного копіювання та можливістю відновлення на певний момент у часі.

Для забезпечення надійності та продуктивності підсистеми вона має вбудовані можливості моніторингу та логування, з метриками в реальному часі через Prometheus та Grafana.

Сервіси реєстру використовують дану підсистему для зберігання своїх службових даних та даних реєстру.

2. Функції підсистеми

  • Зберігання даних реєстру

    • Зберігання бізнес-даних

    • Зберігання історії змін бізнес-даних

    • Зберігання журналу подій аудиту

    • Зберігання глобальних налаштувань

    • Зберігання персональних налаштувань користувачів

    • Зберігання стану виконання бізнес-процесів

  • Контроль цілісності даних

  • Підтримка географічних об’єктів та геолокаційних запитів

  • Забезпечення механізмів контролю доступу до даних, автентифікації та авторизації

  • Резервне копіювання та відновлення, в тому числі відновлення на момент часу (PITR)

  • Підтримка горизонтального масштабування

  • Підтримка комплексної аналітики та звітності

3. Технічний дизайн підсистеми

registry rdbms

Підсистема управління реляційними базами даних складається з двох екземплярів СКБД (Систем керування базами даних), а саме операційного (Operational Instance) та аналітичного (Analytical Instance). Операційний екземпляр містить БД сервісів і БД реєстру, тоді як аналітичний екземпляр містить аналітичну БД реєстру яка наповнюється за допомогою реплікації з БД реєстру операційного екземпляру.

Процес реплікації реалізовано за допомогою логічної реплікації Postgres, яка керується та налаштовується підсистемою розгортання реєстру.

Нарешті, аналітичний екземпляр в основному використовується підсистемою аналітичної звітності реєстру для комплексної аналітики та звітності щодо даних, що зберігаються в БД реєстру.

Кожен екземпляр складається з компонентів представлених на наступній діаграмі:

rdbms component architecture
  • Компонент PostgresCluster instance представляє собою кластер PostgreSQL, який керується Crunchy Postgres оператором. Цей оператор відповідає за керування такими ресурсами:

    • PostgreSQL Primary под: Основний (primary) под бази даних PostgreSQL, який використовується для запису даних та виконання транзакцій.

    • PostgreSQL Replica поди: Додаткові (replica), доступні лише на читання, поди бази даних PostgreSQL, які створюються лише у випадку, коли налаштовано масштабування на 2 або більше поди.

    • Сервіси екземпляру PostgresCluster: Сервіси Kubernetes що забезпечують балансування навантаження та надання стабільної IP-адреси та доменного імені.

    • Налаштування резервного копіювання: Конфігураційні параметри, які визначають політику резервного копіювання та зберігання резервних копій бази даних.

    • Налаштування експорту метрик для моніторингу: Конфігураційні параметри, які визначають, які метрики бази даних експортуються для моніторингу та аналізу.

  • Компонент PgPool II виконує роль проміжного рівня між додатками та кластером PostgreSQL. Він забезпечує прозоре та автоматичне розділення запитів на читання та запис з перенаправленням їх на відповідні сервіси екземпляру PostgresCluster. Цей компонент і його сервіс керуються безпосередньо, без допомоги оператора.

Для економії ресурсів под PgPool II та сервіс pool не створюються на аналітичному екземплярі СКБД, оскільки жоден сервіс що працює з ним не потребує автоматичного розділення запитів на читання та запитів на запис.

Доступ до екземпляру СКБД надається через 4 сервіси які виконують наступні функції:

  • Primary - направляє запити на primary под, який дає можливість читання та запису БД. Використовується для підключення до БД службовими додатками які вносять зміни у БД але не потребують балансування навантаження, наприклад Задачею керування об’єктами БД

  • Replica - балансує запити між replica подами, які дають тільки можливість читання БД. Наразі використовується тільки PgPool II для автоматичного перенаправлення запитів на читання

  • Pods - балансує запити між всіма подами, primary і replica. Використовується додатками які здійснюють тільки читання БД, наприклад Підсистемою аналітичної звітності реєстру

  • Pool - направляє запити на PgPool II, який автоматично балансує запити на читання між всіма подами, а запити на запис направляє на primary под. Використовується додатками які здійснюють як читання так і запис БД та потребують балансування навантаження, тобто переважною більшістю додатків реєстру.

На розгорнутому оточенні імена ресурсів доповнюються префіксом з іменем екземпляра СКБД. Наприклад operational-pool чи analytical-pods.

4. Компоненти підсистеми

Назва компоненти Представлення в платформі Походження Репозиторій Призначення

Операційний екземпляр СКБД

operational
operational-pool

3rd-party

Екземпляр СКБД що обробляє операційні запити сервісів. Містить операційні бази сервісів та операційну базу реєстру.

Аналітичний екземпляр СКБД

analytical

3rd-party

Екземпляр СКБД що обробляє аналітичні запити підсистеми аналітичної звітності. Містить аналітичну базу реєстру.

Задача керування об’єктами БД

run-db-scripts-job

origin

Відповідальна за створення та оновлення баз даних, користувачів та службових схем БД

Crunchy Postgres Оператор

pgo
pgo-upgrade

3rd-party

Відповідальний за розгортання та конфігурацію екземплярів кластерів PostgreSQL

5. Технологічний стек

При проектуванні та розробці підсистеми, були використані наступні технології:

6. Атрибути якості підсистеми

6.1. Scalability

Підсистема управління реляційними базами даних підтримує вертикальне та горизонтальне масштабування у разі збільшення навантаження шляхом виділення додаткових ресурсів для подів підсистеми або використання механізмів описаних у розділі Горизонтальне масштабування.

6.2. Security

Підсистема управління реляційними базами даних забезпечує захист каналу інформаційної взаємодії між сервісами підсистеми за допомогою SSL/TLS шифрування трафіку. Також вона надає можливість SSL/TLS шифрування трафіку при взаємодії з іншими підсистемами.

Для підсистеми налаштовані мережеві політики які дозволяють мережеву взаємодію тільки з сервісами внесеними у білий список.

Для кожного сервісу створені окремі користувачі БД. Їм видані мінімальні привілеями необхідні для роботи.

Дані зберігаються у Підсистемі розподіленого зберігання файлів та використовують її можливості забезпечення безпеки.

6.3. Performance

Висока продуктивність Підсистеми управління реляційними базами даних досягається завдяки:

  • Використання найкращих практик при моделюванні БД.

  • Відокремленню бази даних для аналітичних робочих навантажень.

  • Використанню механізму горизонтального масштабування.

6.4. Observability

Підсистема управління реляційними базами даних підтримує журналювання вхідних запитів та збір метрик продуктивності для подальшого аналізу через веб-інтерфейси відповідних підсистем Платформи.

Архітектура містить в собі використання Postgres exporter та підсистеми моніторингу подій та сповіщення для моніторингу та візуалізації метрик з баз даних PostgreSQL.

Postgres exporter - це інструмент, який збирає метрики з сервера PostgreSQL та викладає їх у форматі, який може бути зібраний сервісом Prometheus підсистеми моніторингу подій та сповіщення.

Postgres exporter встановлено на сервері PostgreSQL та налаштовано для збору необхідних метрик з бази даних. А в підсистемі моніторингу подій та сповіщення встановлено інформаційні панелі які візуалізують ці метрики.

Детальніше з дизайном підсистем можна ознайомитись у відповідних розділах:

6.5. Reliability

Надійність Підсистеми управління реляційними базами даних забезпечується вбудованими функціями резервного копіювання та відновлення, з автоматичними графіками резервного копіювання та можливістю відновлення на певний момент у часі.

Додатково до внутрішніх механізмів резервного копіювання, підсистема резервного копіювання та відновлення включає у себе резервне копіювання файлових систем БД.