Skip to main content

JDBC-коннектор

Бизнес-требования

Основные требования к фиче:

  • Заменить подключение к БД в диспетчере данных на JDBC-коннектор
  • Единый способ подключения к разным СУБД
  • Возможность добавлять новые коннекторы к любой СУБД прямо из интерфейса системы
  • Возможность управлять параметрами подключения через конфигурацию источника
  • Обеспечить безопасность соединения
  • Сохранить логику взаимодействия с микросервисами бэкенда, просмотр статуса подключения
  • Настроить логирование всех операций с JDBC-коннекторами
  • Коннектор и нагрузка на него никак не должны влиять на производительность системы, при падении драйвера не должен падать основной поток FB
  • В документации требуется добавить новый раздел, посвященный добавлению JDBC-драйвером и подключению по JDBC к внешним СУБД

В базовой конфигурации должно быть настроено подключение к следующим СУБД (уточнить актуальные версии):

  • ClickHouse
  • PostgreSQL
  • MSSQL
  • MYSQL
  • ORACLE

Вопросы:

  • Нужны ли типы защиты SSL/SSH?
  • Нужен ли валидатор драйверов? Какие поддерживаем результаты валидации (принято/отклонено или принято/предупреждение/отклонено)
  • Формирование JDBC URL: строка подключения в формате jdbc:<subdb>://<host>:<port>/<database>? 
  • Продумать стратегию перехода с текущих коннекторов к БД на JDBC

Решение

Архитектурная схема

JDBC.png

Сценарии использования
Use case Зачем нужен
Администратор взаимодействует с веб-интерфейсом
Точка входа для всех операций с драйверами
Интерфейс читает/записывает данные в реестр драйверов
Чтобы показать список доступных драйверов и сохранить новый
Интерфейс передаёт файл драйвера на валидацию
Проверка корректности .jar-файла перед сохранением
Валидатор сохраняет проверенный файл в хранилище
Физическое хранение драйверов на диске
Реестр передаёт список доступных типов драйверов во Слой 2
Чтобы дата-инженер видел только проверенные драйверы при создании источника
BI-разработчик запускает тест подключения
Проверка работоспособности настроек перед сохранением
BI-разработчик создаёт/редактирует конфигурацию подключения
Сохранение параметров: URL, порт, имя БД
BI-разработчик настраивает маппинг таблиц и полей
Определение, какие данные и как загружать из источника
Конфигурация ссылается на хранилище учётных данных
Пароли хранятся отдельно от конфигурации (безопасность)
Конфигурация ссылается на настройки SSL/SSH
Параметры защищённого соединения вынесены отдельно
Модуль тестирования вызывает микросервисы для проверки
Реальное подключение к БД выполняется через ETL-сервисы
Микросервисы читают параметры подключения
Чтобы знать, к какой БД подключаться
Микросервисы читают правила маппинга
Чтобы знать, какие таблицы и поля загружать
Хранилище передаёт учётные данные микросервисам
Логин/пароль для подключения к внешней БД
Настройки SSL/SSH передаются микросервисам
Для защищённого соединения с источником
Микросервисы читают данные из внешних БД через JDBC
Основной процесс ETL-загрузки
Микросервисы записывают данные в ClickHouse
Загрузка данных в БД проекта для аналитики
Микросервисы пишут логи загрузки
Отладка ETL-процессов, мониторинг ошибок
Валидатор пишет логи проверки драйверов
Аудит операций с драйверами, отладка проблем

План работ
  • Управление драйверами (бэкенд)
    • Подготовить каталог для хранения jar-файлов драйверов с правами доступа только для сервисов платформы; обеспечить резервное копирование этого каталога
    • Настроить валидатор драйверов: проверить наличие обязательных мета-методов (getTables, getColumns, getImportedKeys, getColumnName, getColumnType, getScale, getColumnCount); обеспечить логирование результатов валидации
    • Обеспечить регистрацию драйвера в реестре: записать тип, версию, путь к файлу, хэш-сумму (?), дату загрузки, статус
    • Настроить синхронизацию с Vault для лицензионных ключей проприетарных драйверов (Oracle, MSSQL); обеспечить проверку наличия лицензии при регистрации драйвера
  • Управление драйверами (фронтенд)
    • Реализовать интерфейс загрузки драйвера: выбор файла, ввод типа СУБД, версии, описания; обеспечить проверку файла
    • Реализовать вывод списка доступных драйверов в интерфейсе настройки источников
  • Конфигурация подключений (бэкенд)
    • Настроить хранение учётных данных в хранилище с обратимым шифрованием; обеспечить передачу секретов микросервисам только в момент выполнения подключения
    • Реализовать модуль тестирования подключения: при нажатии «Проверить» микросервисы пытаются установить соединение с внешней БД и выполнить пробный запрос; обеспечить возврат понятного сообщения об успехе или ошибке
    • Реализовать поддержку параметров SSL: загрузка сертификата сервера, настройка взаимной аутентификации при необходимости; обеспечить проверку валидности сертификата при тестировании подключения
    • Реализовать поддержку SSH-туннеля: ввод хоста, порта, логина, пароля или ключа; обеспечить создание туннеля перед установкой JDBC-соединения и его закрытие после завершения
  • Конфигурация подключений (фронтенд)
    • Реализовать форму создания источника данных: выбор драйвера из реестра, ввод JDBC URL, логина, пароля, настроек SSL/SSH; обеспечить маскировку пароля в интерфейсе
  • Загрузка данных (бэкенд)
    • Реализовать логику Cron: запуск загрузок по расписанию или событию; обеспечить передачу контекста выполнения в Blocker и обработку ошибок запуска
    • Реализовать логику Blocker: проверка активной загрузки для того же источника; обеспечить установку и снятие блокировки, предотвращение параллельного импорта одной таблицы
    • Реализовать логику Loader: чтение данных из внешней БД через JDBC-драйвер с учётом параметров подключения
    • Настроить запись данных в ClickHouse
  • Логирование и мониторинг (бэкенд)
    • Настроить сбор логов при добавлении и валидации драйверов, создании JDBC-подключений
    • Настроить алертинг: при ошибке загрузки, таймауте подключения или превышении лимита попыток отправлять уведомление
  • Ролевая модель (бэкенд)
    • Доступ к добавлению и валидации драйверов имеют только пользователи с ролью "Администратор системы"
    • Доступ к созданию подключений имеют только пользователи с ролью "Разработчик" и выше